4489 lines
187 KiB
HTML
4489 lines
187 KiB
HTML
<html>
|
||
|
||
<head>
|
||
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
|
||
<meta name=Generator content="Microsoft Word 14 (filtered)">
|
||
|
||
<style>
|
||
<!--
|
||
/* Font Definitions */
|
||
@font-face
|
||
{font-family:Wingdings;
|
||
panose-1:5 0 0 0 0 0 0 0 0 0;}
|
||
@font-face
|
||
{font-family:宋体;
|
||
panose-1:2 1 6 0 3 1 1 1 1 1;}
|
||
@font-face
|
||
{font-family:黑体;
|
||
panose-1:2 1 6 9 6 1 1 1 1 1;}
|
||
@font-face
|
||
{font-family:黑体;
|
||
panose-1:2 1 6 9 6 1 1 1 1 1;}
|
||
@font-face
|
||
{font-family:方正小标宋简体;}
|
||
@font-face
|
||
{font-family:"\@黑体";
|
||
panose-1:2 1 6 9 6 1 1 1 1 1;}
|
||
@font-face
|
||
{font-family:"\@宋体";
|
||
panose-1:2 1 6 0 3 1 1 1 1 1;}
|
||
@font-face
|
||
{font-family:"\@方正小标宋简体";}
|
||
/* Style Definitions */
|
||
p.MsoNormal, li.MsoNormal, div.MsoNormal
|
||
{margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
h1
|
||
{mso-style-link:"标题 1 Char";
|
||
margin-top:17.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:16.5pt;
|
||
margin-left:7.2pt;
|
||
text-align:center;
|
||
text-indent:-7.2pt;
|
||
page-break-after:avoid;
|
||
font-size:22.0pt;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
h2
|
||
{mso-style-link:"标题 2 Char";
|
||
margin-top:13.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:13.0pt;
|
||
margin-left:0cm;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:0cm;
|
||
page-break-after:avoid;
|
||
font-size:16.0pt;
|
||
font-family:"Arial","sans-serif";
|
||
font-weight:bold;}
|
||
h3
|
||
{mso-style-link:"标题 3 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:0cm;
|
||
page-break-after:avoid;
|
||
font-size:14.0pt;
|
||
font-family:"Arial","sans-serif";
|
||
font-weight:bold;}
|
||
h4
|
||
{mso-style-link:"标题 4 Char";
|
||
margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:28.8pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-28.8pt;
|
||
page-break-after:avoid;
|
||
font-size:12.0pt;
|
||
font-family:"Arial","sans-serif";
|
||
font-weight:bold;}
|
||
h5
|
||
{mso-style-link:"标题 5 Char";
|
||
margin-top:14.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:14.5pt;
|
||
margin-left:36.0pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-36.0pt;
|
||
line-height:156%;
|
||
page-break-after:avoid;
|
||
font-size:14.0pt;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
h6
|
||
{mso-style-link:"标题 6 Char";
|
||
margin-top:12.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:3.2pt;
|
||
margin-left:43.2pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-43.2pt;
|
||
line-height:133%;
|
||
page-break-after:avoid;
|
||
font-size:12.0pt;
|
||
font-family:"Arial","sans-serif";
|
||
font-weight:bold;}
|
||
p.MsoHeading7, li.MsoHeading7, div.MsoHeading7
|
||
{mso-style-link:"标题 7 Char";
|
||
margin-top:12.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:3.2pt;
|
||
margin-left:50.4pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-50.4pt;
|
||
line-height:133%;
|
||
page-break-after:avoid;
|
||
font-size:12.0pt;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
p.MsoHeading8, li.MsoHeading8, div.MsoHeading8
|
||
{mso-style-link:"标题 8 Char";
|
||
margin-top:12.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:3.2pt;
|
||
margin-left:57.6pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-72.0pt;
|
||
line-height:133%;
|
||
page-break-after:avoid;
|
||
font-size:12.0pt;
|
||
font-family:"Arial","sans-serif";}
|
||
p.MsoHeading9, li.MsoHeading9, div.MsoHeading9
|
||
{mso-style-link:"标题 9 Char";
|
||
margin-top:12.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:3.2pt;
|
||
margin-left:64.8pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-79.2pt;
|
||
line-height:133%;
|
||
page-break-after:avoid;
|
||
font-size:10.5pt;
|
||
font-family:"Arial","sans-serif";}
|
||
p.MsoIndex1, li.MsoIndex1, div.MsoIndex1
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:10.5pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-10.5pt;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.MsoIndex2, li.MsoIndex2, div.MsoIndex2
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:21.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-10.5pt;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.MsoIndex3, li.MsoIndex3, div.MsoIndex3
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:31.5pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-10.5pt;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.MsoIndex4, li.MsoIndex4, div.MsoIndex4
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:42.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-10.5pt;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.MsoIndex5, li.MsoIndex5, div.MsoIndex5
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:52.5pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-10.5pt;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.MsoIndex6, li.MsoIndex6, div.MsoIndex6
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:63.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-10.5pt;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.MsoIndex7, li.MsoIndex7, div.MsoIndex7
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:73.5pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-10.5pt;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.MsoIndex8, li.MsoIndex8, div.MsoIndex8
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:84.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-10.5pt;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.MsoIndex9, li.MsoIndex9, div.MsoIndex9
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:94.5pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-10.5pt;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.MsoToc1, li.MsoToc1, div.MsoToc1
|
||
{margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.5pt;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
p.MsoToc2, li.MsoToc2, div.MsoToc2
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:21.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.MsoToc3, li.MsoToc3, div.MsoToc3
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:42.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.MsoToc4, li.MsoToc4, div.MsoToc4
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:31.5pt;
|
||
margin-bottom:.0001pt;
|
||
font-size:9.0pt;
|
||
font-family:宋体;}
|
||
p.MsoToc5, li.MsoToc5, div.MsoToc5
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:42.0pt;
|
||
margin-bottom:.0001pt;
|
||
font-size:9.0pt;
|
||
font-family:宋体;}
|
||
p.MsoToc6, li.MsoToc6, div.MsoToc6
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:52.5pt;
|
||
margin-bottom:.0001pt;
|
||
font-size:9.0pt;
|
||
font-family:宋体;}
|
||
p.MsoToc7, li.MsoToc7, div.MsoToc7
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:63.0pt;
|
||
margin-bottom:.0001pt;
|
||
font-size:9.0pt;
|
||
font-family:宋体;}
|
||
p.MsoToc8, li.MsoToc8, div.MsoToc8
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:73.5pt;
|
||
margin-bottom:.0001pt;
|
||
font-size:9.0pt;
|
||
font-family:宋体;}
|
||
p.MsoToc9, li.MsoToc9, div.MsoToc9
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:84.0pt;
|
||
margin-bottom:.0001pt;
|
||
font-size:9.0pt;
|
||
font-family:宋体;}
|
||
p.MsoFootnoteText, li.MsoFootnoteText, div.MsoFootnoteText
|
||
{mso-style-link:"脚注文本 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
layout-grid-mode:char;
|
||
font-size:9.0pt;
|
||
font-family:宋体;}
|
||
p.MsoCommentText, li.MsoCommentText, div.MsoCommentText
|
||
{mso-style-link:"批注文字 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.MsoHeader, li.MsoHeader, div.MsoHeader
|
||
{mso-style-link:"页眉 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
layout-grid-mode:char;
|
||
border:none;
|
||
padding:0cm;
|
||
font-size:9.0pt;
|
||
font-family:宋体;}
|
||
p.MsoFooter, li.MsoFooter, div.MsoFooter
|
||
{mso-style-link:"页脚 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
layout-grid-mode:char;
|
||
font-size:9.0pt;
|
||
font-family:宋体;}
|
||
p.MsoIndexHeading, li.MsoIndexHeading, div.MsoIndexHeading
|
||
{mso-style-name:"索引标题\,索引类目\,索引类目1\,索引类目2";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.MsoCaption, li.MsoCaption, div.MsoCaption
|
||
{margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.5pt;
|
||
font-family:"Arial","sans-serif";}
|
||
p.MsoTof, li.MsoTof, div.MsoTof
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:42.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-21.0pt;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
span.MsoFootnoteReference
|
||
{vertical-align:super;}
|
||
p.MsoList, li.MsoList, div.MsoList
|
||
{margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:21.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
text-indent:-21.0pt;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.MsoList2, li.MsoList2, div.MsoList2
|
||
{margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.MsoList4, li.MsoList4, div.MsoList4
|
||
{margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.MsoDate, li.MsoDate, div.MsoDate
|
||
{mso-style-link:"日期 Char";
|
||
margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:5.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
a:link, span.MsoHyperlink
|
||
{mso-style-name:"超链接\,超级链接";
|
||
color:blue;
|
||
text-decoration:underline;}
|
||
a:visited, span.MsoHyperlinkFollowed
|
||
{color:purple;
|
||
text-decoration:underline;}
|
||
p
|
||
{mso-style-name:"普通\(网站\)\,普通 \(Web\)\,普通 \(Web\)1\,普通 \(Web\)2\,普通 \(Web\)3";
|
||
margin-right:0cm;
|
||
margin-left:0cm;
|
||
font-size:12.0pt;
|
||
font-family:宋体;}
|
||
pre
|
||
{mso-style-name:"HTML 预设格式\,HTML 预先格式化\,HTML 预先格式化1\,HTML 预先格式化2\,HTML 预先格式化3";
|
||
mso-style-link:"HTML 预设格式 Char\,HTML 预先格式化 Char\,HTML 预先格式化1 Char\,HTML 预先格式化2 Char\,HTML 预先格式化3 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
font-size:12.0pt;
|
||
font-family:宋体;}
|
||
tt
|
||
{font-family:黑体;}
|
||
p.MsoCommentSubject, li.MsoCommentSubject, div.MsoCommentSubject
|
||
{mso-style-link:"批注主题 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
font-size:10.5pt;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
|
||
{mso-style-link:"批注框文本 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:9.0pt;
|
||
font-family:宋体;}
|
||
p.1, li.1, div.1
|
||
{mso-style-name:样式1;
|
||
margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:21.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
text-indent:-21.0pt;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.a, li.a, div.a
|
||
{mso-style-name:代码程序;
|
||
mso-style-link:"代码程序 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
font-size:10.0pt;
|
||
font-family:宋体;}
|
||
span.Char
|
||
{mso-style-name:"代码程序 Char";
|
||
mso-style-link:代码程序;
|
||
font-family:宋体;}
|
||
p.a0, li.a0, div.a0
|
||
{mso-style-name:图说明;
|
||
mso-style-link:"图说明 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
span.Char0
|
||
{mso-style-name:"图说明 Char";
|
||
mso-style-link:图说明;
|
||
font-family:宋体;}
|
||
p.0, li.0, div.0
|
||
{mso-style-name:封面0;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:36.0pt;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
p.10, li.10, div.10
|
||
{mso-style-name:封面1;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:18.0pt;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
p.11, li.11, div.11
|
||
{mso-style-name:非标题1;
|
||
margin-top:7.8pt;
|
||
margin-right:0cm;
|
||
margin-bottom:7.8pt;
|
||
margin-left:0cm;
|
||
text-align:center;
|
||
font-size:22.0pt;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
p.a1, li.a1, div.a1
|
||
{mso-style-name:文本居中;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.3CharChar, li.3CharChar, div.3CharChar
|
||
{mso-style-name:"图中文字3 Char Char";
|
||
mso-style-link:"图中文字3 Char Char Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
line-height:9.0pt;
|
||
font-size:8.0pt;
|
||
font-family:宋体;}
|
||
span.3CharCharChar
|
||
{mso-style-name:"图中文字3 Char Char Char";
|
||
mso-style-link:"图中文字3 Char Char";
|
||
font-family:宋体;}
|
||
p.post, li.post, div.post
|
||
{mso-style-name:邮件post;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:right;
|
||
line-height:11.0pt;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.3, li.3, div.3
|
||
{mso-style-name:图中字体3;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
span.3CharChar1CharCharChar
|
||
{mso-style-name:"图中文字3 Char Char1 Char Char Char";
|
||
font-family:宋体;}
|
||
span.3CharChar1CharChar
|
||
{mso-style-name:"图中文字3 Char Char1 Char Char";
|
||
font-family:宋体;}
|
||
p.5Char, li.5Char, div.5Char
|
||
{mso-style-name:"图中文字5号 Char";
|
||
mso-style-link:"图中文字5号 Char Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
span.5CharChar
|
||
{mso-style-name:"图中文字5号 Char Char";
|
||
mso-style-link:"图中文字5号 Char";
|
||
font-family:宋体;}
|
||
p.5CharChar0, li.5CharChar0, div.5CharChar0
|
||
{mso-style-name:"图中文字小5号 Char Char";
|
||
mso-style-link:"图中文字小5号 Char Char Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:9.0pt;
|
||
font-family:宋体;}
|
||
span.5CharCharChar
|
||
{mso-style-name:"图中文字小5号 Char Char Char";
|
||
mso-style-link:"图中文字小5号 Char Char";
|
||
font-family:宋体;}
|
||
p.5Char0, li.5Char0, div.5Char0
|
||
{mso-style-name:"图中文字小5号 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:9.0pt;
|
||
font-family:宋体;}
|
||
p.5, li.5, div.5
|
||
{mso-style-name:图中文字小5号;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
layout-grid-mode:char;
|
||
font-size:9.0pt;
|
||
font-family:宋体;}
|
||
p.2, li.2, div.2
|
||
{mso-style-name:代码程序2;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
font-size:10.0pt;
|
||
font-family:宋体;}
|
||
p.20, li.20, div.20
|
||
{mso-style-name:图说明2;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.21, li.21, div.21
|
||
{mso-style-name:文本居中2;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.3CharCharCharCharChar, li.3CharCharCharCharChar, div.3CharCharCharCharChar
|
||
{mso-style-name:"图中文字3 Char Char Char Char Char";
|
||
mso-style-link:"图中文字3 Char Char Char Char Char Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
line-height:9.0pt;
|
||
font-size:8.0pt;
|
||
font-family:宋体;}
|
||
span.3CharCharCharCharCharChar
|
||
{mso-style-name:"图中文字3 Char Char Char Char Char Char";
|
||
mso-style-link:"图中文字3 Char Char Char Char Char";
|
||
font-family:宋体;}
|
||
p.a2, li.a2, div.a2
|
||
{mso-style-name:图居中;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.110, li.110, div.110
|
||
{mso-style-name:"样式 标题 1 + 居中1";
|
||
margin-right:0cm;
|
||
margin-left:0cm;
|
||
text-align:center;
|
||
page-break-after:avoid;
|
||
font-size:22.0pt;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
span.1Char
|
||
{mso-style-name:"标题 1 Char";
|
||
mso-style-link:"标题 1";
|
||
font-weight:bold;}
|
||
p.22, li.22, div.22
|
||
{mso-style-name:"样式 列表 2 + 居中";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.23, li.23, div.23
|
||
{mso-style-name:列表2;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.50, li.50, div.50
|
||
{mso-style-name:图中文字5号;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.111, li.111, div.111
|
||
{mso-style-name:样式11;
|
||
margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:21.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
text-indent:-21.0pt;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.12, li.12, div.12
|
||
{mso-style-name:代码程序1;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
font-size:10.0pt;
|
||
font-family:宋体;}
|
||
p.13, li.13, div.13
|
||
{mso-style-name:图说明1;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.01, li.01, div.01
|
||
{mso-style-name:封面01;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:36.0pt;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
p.112, li.112, div.112
|
||
{mso-style-name:封面11;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:18.0pt;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
p.113, li.113, div.113
|
||
{mso-style-name:非标题11;
|
||
margin-top:7.8pt;
|
||
margin-right:0cm;
|
||
margin-bottom:7.8pt;
|
||
margin-left:0cm;
|
||
text-align:center;
|
||
font-size:22.0pt;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
p.14, li.14, div.14
|
||
{mso-style-name:文本居中1;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.3Char1, li.3Char1, div.3Char1
|
||
{mso-style-name:"图中文字3 Char1";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
line-height:9.0pt;
|
||
font-size:8.0pt;
|
||
font-family:宋体;}
|
||
p.post1, li.post1, div.post1
|
||
{mso-style-name:邮件post1;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:right;
|
||
line-height:11.0pt;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.31, li.31, div.31
|
||
{mso-style-name:图中字体31;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.5Char1, li.5Char1, div.5Char1
|
||
{mso-style-name:"图中文字5号 Char1";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.5CharChar1, li.5CharChar1, div.5CharChar1
|
||
{mso-style-name:"图中文字小5号 Char Char1";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:9.0pt;
|
||
font-family:宋体;}
|
||
p.5Char10, li.5Char10, div.5Char10
|
||
{mso-style-name:"图中文字小5号 Char1";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:9.0pt;
|
||
font-family:宋体;}
|
||
p.51, li.51, div.51
|
||
{mso-style-name:图中文字小5号1;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:9.0pt;
|
||
font-family:宋体;}
|
||
p.120, li.120, div.120
|
||
{mso-style-name:样式12;
|
||
margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:21.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
text-indent:-21.0pt;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.02, li.02, div.02
|
||
{mso-style-name:封面02;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:36.0pt;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
p.121, li.121, div.121
|
||
{mso-style-name:封面12;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:18.0pt;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
p.122, li.122, div.122
|
||
{mso-style-name:非标题12;
|
||
margin-top:7.8pt;
|
||
margin-right:0cm;
|
||
margin-bottom:7.8pt;
|
||
margin-left:0cm;
|
||
text-align:center;
|
||
font-size:22.0pt;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
p.3Char2, li.3Char2, div.3Char2
|
||
{mso-style-name:"图中文字3 Char2";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
line-height:9.0pt;
|
||
font-size:8.0pt;
|
||
font-family:宋体;}
|
||
p.post2, li.post2, div.post2
|
||
{mso-style-name:邮件post2;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:right;
|
||
line-height:11.0pt;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.32, li.32, div.32
|
||
{mso-style-name:图中字体32;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.5Char2, li.5Char2, div.5Char2
|
||
{mso-style-name:"图中文字小5号 Char2";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:9.0pt;
|
||
font-family:宋体;}
|
||
p.52, li.52, div.52
|
||
{mso-style-name:图中文字小5号2;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:9.0pt;
|
||
font-family:宋体;}
|
||
p.3CharCharCharChar, li.3CharCharCharChar, div.3CharCharCharChar
|
||
{mso-style-name:"图中文字3 Char Char Char Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
line-height:9.0pt;
|
||
font-size:8.0pt;
|
||
font-family:宋体;}
|
||
p.130, li.130, div.130
|
||
{mso-style-name:样式13;
|
||
margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:21.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
text-indent:-21.0pt;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.30, li.30, div.30
|
||
{mso-style-name:代码程序3;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
font-size:10.0pt;
|
||
font-family:宋体;}
|
||
p.03, li.03, div.03
|
||
{mso-style-name:封面03;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:36.0pt;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
p.131, li.131, div.131
|
||
{mso-style-name:封面13;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:18.0pt;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
p.132, li.132, div.132
|
||
{mso-style-name:非标题13;
|
||
margin-top:7.8pt;
|
||
margin-right:0cm;
|
||
margin-bottom:7.8pt;
|
||
margin-left:0cm;
|
||
text-align:center;
|
||
font-size:22.0pt;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
p.33, li.33, div.33
|
||
{mso-style-name:文本居中3;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.3Char3, li.3Char3, div.3Char3
|
||
{mso-style-name:"图中文字3 Char3";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
line-height:9.0pt;
|
||
font-size:8.0pt;
|
||
font-family:宋体;}
|
||
p.post3, li.post3, div.post3
|
||
{mso-style-name:邮件post3;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:right;
|
||
line-height:11.0pt;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.330, li.330, div.330
|
||
{mso-style-name:图中字体33;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.5Char20, li.5Char20, div.5Char20
|
||
{mso-style-name:"图中文字5号 Char2";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.5CharChar2, li.5CharChar2, div.5CharChar2
|
||
{mso-style-name:"图中文字小5号 Char Char2";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:9.0pt;
|
||
font-family:宋体;}
|
||
p.5Char3, li.5Char3, div.5Char3
|
||
{mso-style-name:"图中文字小5号 Char3";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:9.0pt;
|
||
font-family:宋体;}
|
||
p.53, li.53, div.53
|
||
{mso-style-name:图中文字小5号3;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:9.0pt;
|
||
font-family:宋体;}
|
||
p.3Char, li.3Char, div.3Char
|
||
{mso-style-name:"图中文字3 Char";
|
||
mso-style-link:"图中文字3 Char Char5";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
line-height:9.0pt;
|
||
font-size:8.0pt;
|
||
font-family:宋体;}
|
||
span.3CharChar5
|
||
{mso-style-name:"图中文字3 Char Char5";
|
||
mso-style-link:"图中文字3 Char";
|
||
font-family:宋体;}
|
||
p.54, li.54, div.54
|
||
{mso-style-name:图中文字小5紧密;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
line-height:9.0pt;
|
||
text-autospace:ideograph-numeric;
|
||
font-size:9.0pt;
|
||
font-family:宋体;}
|
||
p.24, li.24, div.24
|
||
{mso-style-name:居中2号粗宋体;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:22.0pt;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
p.15, li.15, div.15
|
||
{mso-style-name:"样式 标题 1 + 居中";
|
||
margin-top:17.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:16.5pt;
|
||
margin-left:0cm;
|
||
text-align:center;
|
||
page-break-after:avoid;
|
||
font-size:22.0pt;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
p.25, li.25, div.25
|
||
{mso-style-name:"样式 标题 2 + 行距\: 单倍行距";
|
||
margin-top:13.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:13.0pt;
|
||
margin-left:28.9pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-28.9pt;
|
||
page-break-after:avoid;
|
||
font-size:16.0pt;
|
||
font-family:"Arial","sans-serif";
|
||
font-weight:bold;}
|
||
span.2Char
|
||
{mso-style-name:"标题 2 Char";
|
||
mso-style-link:"标题 2";
|
||
font-family:"Arial","sans-serif";
|
||
font-weight:bold;}
|
||
p.34, li.34, div.34
|
||
{mso-style-name:列表3;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.35, li.35, div.35
|
||
{mso-style-name:表3;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.4, li.4, div.4
|
||
{mso-style-name:图说明4;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.40, li.40, div.40
|
||
{mso-style-name:列表4;
|
||
margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:21.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
text-indent:-21.0pt;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.41, li.41, div.41
|
||
{mso-style-name:表4;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.55, li.55, div.55
|
||
{mso-style-name:图说明5;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.56, li.56, div.56
|
||
{mso-style-name:列表5;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.57, li.57, div.57
|
||
{mso-style-name:表5;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.6, li.6, div.6
|
||
{mso-style-name:列表6;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.60, li.60, div.60
|
||
{mso-style-name:表6;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.61, li.61, div.61
|
||
{mso-style-name:图说明6;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.7, li.7, div.7
|
||
{mso-style-name:列表7;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.70, li.70, div.70
|
||
{mso-style-name:图说明7;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.71, li.71, div.71
|
||
{mso-style-name:表7;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.8, li.8, div.8
|
||
{mso-style-name:列表8;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.9, li.9, div.9
|
||
{mso-style-name:列表9;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.90, li.90, div.90
|
||
{mso-style-name:图说明9;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.100, li.100, div.100
|
||
{mso-style-name:列表10;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.101, li.101, div.101
|
||
{mso-style-name:图说明10;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.114, li.114, div.114
|
||
{mso-style-name:列表11;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.115, li.115, div.115
|
||
{mso-style-name:图说明11;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.116, li.116, div.116
|
||
{mso-style-name:表11;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.123, li.123, div.123
|
||
{mso-style-name:列表12;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.124, li.124, div.124
|
||
{mso-style-name:图说明12;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.133, li.133, div.133
|
||
{mso-style-name:图说明13;
|
||
mso-style-link:"图说明13 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
span.13Char
|
||
{mso-style-name:"图说明13 Char";
|
||
mso-style-link:图说明13;
|
||
font-family:宋体;}
|
||
p.134, li.134, div.134
|
||
{mso-style-name:列表13;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.26, li.26, div.26
|
||
{mso-style-name:附录2;
|
||
margin-top:13.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:13.0pt;
|
||
margin-left:0cm;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
page-break-after:avoid;
|
||
font-size:16.0pt;
|
||
font-family:"Arial","sans-serif";
|
||
font-weight:bold;}
|
||
p.36, li.36, div.36
|
||
{mso-style-name:附录3;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
page-break-after:avoid;
|
||
font-size:14.0pt;
|
||
font-family:"Arial","sans-serif";
|
||
font-weight:bold;}
|
||
span.3Char0
|
||
{mso-style-name:"标题 3 Char";
|
||
mso-style-link:"标题 3";
|
||
font-family:"Arial","sans-serif";
|
||
font-weight:bold;}
|
||
p.16, li.16, div.16
|
||
{mso-style-name:附录1;
|
||
margin-top:17.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:16.5pt;
|
||
margin-left:0cm;
|
||
text-align:center;
|
||
page-break-after:avoid;
|
||
font-size:22.0pt;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
p.17, li.17, div.17
|
||
{mso-style-name:附录表1;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.42, li.42, div.42
|
||
{mso-style-name:附录4;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
page-break-after:avoid;
|
||
font-size:12.0pt;
|
||
font-family:"Arial","sans-serif";
|
||
font-weight:bold;}
|
||
span.4Char
|
||
{mso-style-name:"标题 4 Char";
|
||
mso-style-link:"标题 4";
|
||
font-family:"Arial","sans-serif";
|
||
font-weight:bold;}
|
||
p.a3, li.a3, div.a3
|
||
{mso-style-name:附录图说明;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.27, li.27, div.27
|
||
{mso-style-name:序标题2;
|
||
margin-top:13.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:13.0pt;
|
||
margin-left:28.8pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
text-indent:-28.8pt;
|
||
page-break-after:avoid;
|
||
font-size:16.0pt;
|
||
font-family:"Arial","sans-serif";
|
||
font-weight:bold;}
|
||
p.a4, li.a4, div.a4
|
||
{mso-style-name:参考标题;
|
||
margin-top:7.8pt;
|
||
margin-right:0cm;
|
||
margin-bottom:7.8pt;
|
||
margin-left:0cm;
|
||
text-align:center;
|
||
page-break-after:avoid;
|
||
font-size:22.0pt;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
p.18, li.18, div.18
|
||
{mso-style-name:索引标题1;
|
||
margin-top:7.8pt;
|
||
margin-right:0cm;
|
||
margin-bottom:7.8pt;
|
||
margin-left:0cm;
|
||
text-align:center;
|
||
page-break-after:avoid;
|
||
font-size:22.0pt;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
p.19, li.19, div.19
|
||
{mso-style-name:列表1;
|
||
margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:21.25pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
text-indent:-21.25pt;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.1a, li.1a, div.1a
|
||
{mso-style-name:表1;
|
||
margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:21.25pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
text-indent:-21.25pt;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.37, li.37, div.37
|
||
{mso-style-name:图说明3;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.62, li.62, div.62
|
||
{mso-style-name:表中字体6号;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
layout-grid-mode:char;
|
||
font-size:7.5pt;
|
||
font-family:宋体;}
|
||
p.a5, li.a5, div.a5
|
||
{mso-style-name:正文代码;
|
||
mso-style-link:"正文代码 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
span.Char1
|
||
{mso-style-name:"正文代码 Char";
|
||
mso-style-link:正文代码;
|
||
font-family:宋体;}
|
||
p.43, li.43, div.43
|
||
{mso-style-name:"样式 标题 4 +";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
page-break-after:avoid;
|
||
font-size:12.0pt;
|
||
font-family:"Arial","sans-serif";
|
||
font-weight:bold;}
|
||
p.140, li.140, div.140
|
||
{mso-style-name:表14;
|
||
margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:21.25pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
text-indent:-21.25pt;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.141, li.141, div.141
|
||
{mso-style-name:图说明14;
|
||
mso-style-link:"图说明14 Char";
|
||
margin-top:0cm;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:21.25pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
text-indent:-21.25pt;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
span.14Char
|
||
{mso-style-name:"图说明14 Char";
|
||
mso-style-link:图说明14;
|
||
font-family:宋体;}
|
||
p.a6, li.a6, div.a6
|
||
{mso-style-name:文件目录表;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.a7, li.a7, div.a7
|
||
{mso-style-name:"样式 正文 +";
|
||
mso-style-link:"样式 正文 + Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
span.Char2
|
||
{mso-style-name:"样式 正文 + Char";
|
||
mso-style-link:"样式 正文 +";
|
||
font-family:"Times New Roman","serif";}
|
||
p.a8, li.a8, div.a8
|
||
{mso-style-name:表格题注;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.a9, li.a9, div.a9
|
||
{mso-style-name:列表题注;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:"Arial","sans-serif";}
|
||
p.aa, li.aa, div.aa
|
||
{mso-style-name:图题注;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:"Arial","sans-serif";}
|
||
p.ab, li.ab, div.ab
|
||
{mso-style-name:程序题注;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:"Arial","sans-serif";}
|
||
p.ac, li.ac, div.ac
|
||
{mso-style-name:框中文字;
|
||
margin-top:0cm;
|
||
margin-right:21.0pt;
|
||
margin-bottom:0cm;
|
||
margin-left:21.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
border:none;
|
||
padding:0cm;
|
||
font-size:9.0pt;
|
||
font-family:宋体;}
|
||
p.125, li.125, div.125
|
||
{mso-style-name:"样式 标题 1 + 居中2";
|
||
margin-top:17.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:16.5pt;
|
||
margin-left:0cm;
|
||
text-align:center;
|
||
page-break-after:avoid;
|
||
font-size:22.0pt;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
p.ad, li.ad, div.ad
|
||
{mso-style-name:"样式 题注 + 宋体 五号 居中";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:黑体;}
|
||
p.1b, li.1b, div.1b
|
||
{mso-style-name:序标题1;
|
||
margin-top:17.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:16.5pt;
|
||
margin-left:0cm;
|
||
line-height:240%;
|
||
page-break-after:avoid;
|
||
font-size:16.0pt;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
p.38, li.38, div.38
|
||
{mso-style-name:序标题3;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
page-break-after:avoid;
|
||
font-size:12.0pt;
|
||
font-family:方正小标宋简体;}
|
||
p.63, li.63, div.63
|
||
{mso-style-name:表中文字6号;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:7.5pt;
|
||
font-family:宋体;}
|
||
p.64, li.64, div.64
|
||
{mso-style-name:图中文字6号左对齐;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
line-height:10.0pt;
|
||
layout-grid-mode:char;
|
||
font-size:7.5pt;
|
||
font-family:宋体;}
|
||
p.65, li.65, div.65
|
||
{mso-style-name:图中文字6号;
|
||
mso-style-link:"图中文字6号 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
line-height:10.0pt;
|
||
layout-grid-mode:char;
|
||
font-size:7.5pt;
|
||
font-family:宋体;}
|
||
span.6Char
|
||
{mso-style-name:"图中文字6号 Char";
|
||
mso-style-link:图中文字6号;
|
||
font-family:宋体;}
|
||
p.ae, li.ae, div.ae
|
||
{mso-style-name:图标;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.28, li.28, div.28
|
||
{mso-style-name:图标2;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.af, li.af, div.af
|
||
{mso-style-name:习题标题;
|
||
margin-top:6.0pt;
|
||
margin-right:0cm;
|
||
margin-bottom:0cm;
|
||
margin-left:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
page-break-after:avoid;
|
||
font-size:14.0pt;
|
||
font-family:黑体;}
|
||
p.1c, li.1c, div.1c
|
||
{mso-style-name:部分编号1;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:16.0pt;
|
||
font-family:宋体;}
|
||
p.af0, li.af0, div.af0
|
||
{mso-style-name:表标题;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:"Arial","sans-serif";}
|
||
p.af1, li.af1, div.af1
|
||
{mso-style-name:"样式 题注 + 居中";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
p.ListTitle, li.ListTitle, div.ListTitle
|
||
{mso-style-name:ListTitle;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.5pt;
|
||
font-family:"Arial","sans-serif";}
|
||
p.FigureTitle, li.FigureTitle, div.FigureTitle
|
||
{mso-style-name:FigureTitle;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:"Arial","sans-serif";}
|
||
p.TableTitle, li.TableTitle, div.TableTitle
|
||
{mso-style-name:TableTitle;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:"Arial","sans-serif";}
|
||
p.ProgramTitle, li.ProgramTitle, div.ProgramTitle
|
||
{mso-style-name:ProgramTitle;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:center;
|
||
font-size:10.5pt;
|
||
font-family:"Arial","sans-serif";}
|
||
p.RightText, li.RightText, div.RightText
|
||
{mso-style-name:RightText;
|
||
margin-top:0cm;
|
||
margin-right:21.0pt;
|
||
margin-bottom:0cm;
|
||
margin-left:42.0pt;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
border:none;
|
||
padding:0cm;
|
||
font-size:9.0pt;
|
||
font-family:宋体;}
|
||
p.af2, li.af2, div.af2
|
||
{mso-style-name:表中文字小五;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:9.0pt;
|
||
font-family:宋体;}
|
||
p.af3, li.af3, div.af3
|
||
{mso-style-name:关键词;
|
||
mso-style-link:"关键词 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
span.Char3
|
||
{mso-style-name:"关键词 Char";
|
||
mso-style-link:关键词;
|
||
font-family:宋体;}
|
||
p.af4, li.af4, div.af4
|
||
{mso-style-name:文件名;
|
||
mso-style-link:"文件名 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
span.Char4
|
||
{mso-style-name:"文件名 Char";
|
||
mso-style-link:文件名;
|
||
font-family:宋体;}
|
||
p.af5, li.af5, div.af5
|
||
{mso-style-name:选项;
|
||
mso-style-link:"选项 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
span.Char5
|
||
{mso-style-name:"选项 Char";
|
||
mso-style-link:选项;
|
||
font-family:宋体;}
|
||
p.af6, li.af6, div.af6
|
||
{mso-style-name:命令行;
|
||
mso-style-link:"命令行 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
span.Char6
|
||
{mso-style-name:"命令行 Char";
|
||
mso-style-link:命令行;
|
||
font-family:宋体;}
|
||
p.af7, li.af7, div.af7
|
||
{mso-style-name:函数名;
|
||
mso-style-link:"函数名 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
span.Char7
|
||
{mso-style-name:"函数名 Char";
|
||
mso-style-link:函数名;
|
||
font-family:宋体;}
|
||
p.af8, li.af8, div.af8
|
||
{mso-style-name:寄存器名;
|
||
mso-style-link:"寄存器名 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
span.Char8
|
||
{mso-style-name:"寄存器名 Char";
|
||
mso-style-link:寄存器名;
|
||
font-family:"Times New Roman","serif";}
|
||
p.af9, li.af9, div.af9
|
||
{mso-style-name:变量名;
|
||
mso-style-link:"变量名 Char";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
text-align:justify;
|
||
text-justify:inter-ideograph;
|
||
font-size:10.5pt;
|
||
font-family:宋体;}
|
||
span.Char9
|
||
{mso-style-name:"变量名 Char";
|
||
mso-style-link:变量名;
|
||
font-family:宋体;}
|
||
p.58, li.58, div.58
|
||
{mso-style-name:图中文字小5号左;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
font-size:9.0pt;
|
||
font-family:宋体;}
|
||
p.59, li.59, div.59
|
||
{mso-style-name:图中文字小5号靠左;
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
layout-grid-mode:char;
|
||
font-size:9.0pt;
|
||
font-family:宋体;}
|
||
p.926, li.926, div.926
|
||
{mso-style-name:"样式 代码程序 + 左侧\: 9\.26 厘米";
|
||
margin:0cm;
|
||
margin-bottom:.0001pt;
|
||
layout-grid-mode:char;
|
||
font-size:10.0pt;
|
||
font-family:宋体;}
|
||
span.5Char4
|
||
{mso-style-name:"标题 5 Char";
|
||
mso-style-link:"标题 5";
|
||
font-weight:bold;}
|
||
span.6Char0
|
||
{mso-style-name:"标题 6 Char";
|
||
mso-style-link:"标题 6";
|
||
font-family:"Arial","sans-serif";
|
||
font-weight:bold;}
|
||
span.7Char
|
||
{mso-style-name:"标题 7 Char";
|
||
mso-style-link:"标题 7";
|
||
font-weight:bold;}
|
||
span.8Char
|
||
{mso-style-name:"标题 8 Char";
|
||
mso-style-link:"标题 8";
|
||
font-family:"Arial","sans-serif";}
|
||
span.9Char
|
||
{mso-style-name:"标题 9 Char";
|
||
mso-style-link:"标题 9";
|
||
font-family:"Arial","sans-serif";}
|
||
span.Chara
|
||
{mso-style-name:"脚注文本 Char";
|
||
mso-style-link:脚注文本;
|
||
font-family:宋体;}
|
||
span.Charb
|
||
{mso-style-name:"批注文字 Char";
|
||
mso-style-link:批注文字;
|
||
font-family:宋体;}
|
||
span.Charc
|
||
{mso-style-name:"页眉 Char";
|
||
mso-style-link:页眉;
|
||
font-family:宋体;}
|
||
span.Chard
|
||
{mso-style-name:"页脚 Char";
|
||
mso-style-link:页脚;
|
||
font-family:宋体;}
|
||
span.Chare
|
||
{mso-style-name:"日期 Char";
|
||
mso-style-link:日期;
|
||
font-family:宋体;}
|
||
span.HTMLChar
|
||
{mso-style-name:"HTML 预设格式 Char\,HTML 预先格式化 Char\,HTML 预先格式化1 Char\,HTML 预先格式化2 Char\,HTML 预先格式化3 Char";
|
||
mso-style-link:"HTML 预设格式\,HTML 预先格式化\,HTML 预先格式化1\,HTML 预先格式化2\,HTML 预先格式化3";
|
||
font-family:宋体;}
|
||
span.Charf
|
||
{mso-style-name:"批注主题 Char";
|
||
mso-style-link:批注主题;
|
||
font-family:宋体;
|
||
font-weight:bold;}
|
||
span.Charf0
|
||
{mso-style-name:"批注框文本 Char";
|
||
mso-style-link:批注框文本;
|
||
font-family:宋体;}
|
||
span.3CharChar1
|
||
{mso-style-name:"图中文字3 Char Char1";
|
||
font-family:宋体;}
|
||
span.5CharCharChar0
|
||
{mso-style-name:"图中文字5号 Char Char Char";
|
||
font-family:宋体;}
|
||
span.5CharCharChar1
|
||
{mso-style-name:"图中文字小5号 Char Char Char1";
|
||
font-family:宋体;}
|
||
span.3CharChar3
|
||
{mso-style-name:"图中文字3 Char Char3";
|
||
font-family:宋体;}
|
||
span.5CharChar10
|
||
{mso-style-name:"图中文字5号 Char Char1";
|
||
font-family:宋体;}
|
||
span.3CharCharChar1
|
||
{mso-style-name:"图中文字3 Char Char Char1";
|
||
font-family:宋体;}
|
||
span.3CharChar11
|
||
{mso-style-name:"图中文字3 Char Char11";
|
||
font-family:宋体;}
|
||
span.3CharChar2
|
||
{mso-style-name:"图中文字3 Char Char2";
|
||
font-family:宋体;}
|
||
span.5CharCharCharChar
|
||
{mso-style-name:"图中文字小5号 Char Char Char Char";
|
||
font-family:宋体;}
|
||
.MsoChpDefault
|
||
{font-size:10.0pt;}
|
||
/* Page Definitions */
|
||
@page WordSection1
|
||
{size:595.3pt 841.9pt;
|
||
margin:72.0pt 54.0pt 72.0pt 54.0pt;
|
||
layout-grid:15.6pt;}
|
||
div.WordSection1
|
||
{page:WordSection1;}
|
||
/* List Definitions */
|
||
ol
|
||
{margin-bottom:0cm;}
|
||
ul
|
||
{margin-bottom:0cm;}
|
||
-->
|
||
</style>
|
||
|
||
</head>
|
||
|
||
<body lang=ZH-CN link=blue vlink=purple style='text-justify-trim:punctuation'>
|
||
|
||
<div class=WordSection1 style='layout-grid:15.6pt'>
|
||
|
||
<p class=ab><a name="_Toc53320628"><span style='font-family:黑体'>程序</span><span
|
||
lang=EN-US>10-1 linux/kernel/chr_drv/keyboard.S</span></a></p>
|
||
|
||
<div class=a align=center style='text-align:center'><span lang=EN-US>
|
||
|
||
<hr size=4 width="100%" align=center>
|
||
|
||
</span></div>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>1</span></u> /*</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>2</span></u>
|
||
* linux/kernel/keyboard.S</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>3</span></u>
|
||
*</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>4</span></u>
|
||
* (C) 1991 Linus Torvalds</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>5</span></u>
|
||
*/</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>6</span></u> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>7</span></u> /*</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>8</span></u>
|
||
* Thanks to Alfred Leung for US keyboard patches</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>9</span></u>
|
||
*
|
||
Wolfgang Thiel for German keyboard patches</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>10</span></u>
|
||
*
|
||
Marc Corsini for the French keyboard</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>11</span></u>
|
||
*/</span></p>
|
||
|
||
<p class=a><span lang=EN-US> /*</span></p>
|
||
|
||
<p class=a><span lang=EN-US> * </span>感谢<span
|
||
lang=EN-US>Alfred Leung</span>添加了<span lang=EN-US>US</span>键盘补丁程序;</p>
|
||
|
||
<p class=a><span lang=EN-US> * Wolfgang
|
||
Thiel</span>添加了德语键盘补丁程序;</p>
|
||
|
||
<p class=a><span lang=EN-US> * Marc
|
||
Corsini</span>添加了法文键盘补丁程序。</p>
|
||
|
||
<p class=a><span lang=EN-US> */</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>12</span></u> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>13</span></u> /*
|
||
KBD_FINNISH for Finnish keyboards</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>14</span></u>
|
||
* KBD_US for US-type</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>15</span></u>
|
||
* KBD_GR for German keyboards</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>16</span></u>
|
||
* KBD_FR for Frech keyboard</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>17</span></u>
|
||
*/</span></p>
|
||
|
||
<p class=a><span lang=EN-US> /*</span></p>
|
||
|
||
<p class=a><span lang=EN-US> * KBD_FINNISH </span>是芬兰键盘。</p>
|
||
|
||
<p class=a><span lang=EN-US> * KBD_US </span>是美式键盘。</p>
|
||
|
||
<p class=a><span lang=EN-US> * KBD_GR </span>是德式键盘。</p>
|
||
|
||
<p class=a><span lang=EN-US> * KBD_FR </span>是法式键盘。</p>
|
||
|
||
<p class=a><span lang=EN-US> */</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>18</span></u>
|
||
#define KBD_FINNISH // </span>定义使用的键盘类型。用于后面选择采用的字符映射码表。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>19</span></u> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>20</span></u>
|
||
.text</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>21</span></u>
|
||
.globl _keyboard_interrupt // </span>申明为全局变量,用于在初始化时设置键盘中断描述符。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>22</span></u> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>23</span></u> /*</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>24</span></u>
|
||
* these are for the keyboard read functions</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>25</span></u>
|
||
*/</span></p>
|
||
|
||
<p class=a><span lang=EN-US> /*</span></p>
|
||
|
||
<p class=a><span lang=EN-US> * </span>以下这些用于读键盘操作。</p>
|
||
|
||
<p class=a><span lang=EN-US> */</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // size</span>是键盘缓冲区(缓冲队列)长度(字节数)。</p>
|
||
|
||
<p class=a><span lang=EN-US> /* </span>值必须是<span lang=EN-US>2</span>的次方!并且与<span
|
||
lang=EN-US>tty_io.c</span>中的值匹配<span lang=EN-US>!!!! */</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>26</span></u>
|
||
size =
|
||
1024 /* must be a power
|
||
of two ! And MUST be the same</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>27</span></u>
|
||
as in tty_io.c !!!! */</span></p>
|
||
|
||
<p class=a><span lang=EN-US> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>以下是键盘缓冲队列数据结构<span
|
||
lang=EN-US>tty_queue</span>中的偏移量(<span lang=EN-US>include/linux/tty.h</span>,第<span
|
||
lang=EN-US>16</span>行)。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>28</span></u>
|
||
head = 4
|
||
// </span>缓冲区头指针字段在<span lang=EN-US>tty_queue</span>结构中的偏移。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>29</span></u>
|
||
tail = 8
|
||
// </span>缓冲区尾指针字段偏移。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>30</span></u>
|
||
proc_list = 12 // </span>等待该缓冲队列的进程字段偏移。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>31</span></u> buf
|
||
= 16
|
||
// </span>缓冲区字段偏移。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>32</span></u> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>在本程序中使用了<span
|
||
lang=EN-US>3</span>个标志字节。<span lang=EN-US>mode</span>是键盘特殊键(<span lang=EN-US>ctrl</span>、<span
|
||
lang=EN-US>alt</span>或<span lang=EN-US>caps</span>)的按下状态标志;</p>
|
||
|
||
<p class=a><span lang=EN-US> // leds </span>是用于表示键盘指示灯的状态标志。 <span
|
||
lang=EN-US>e0</span>是当收到扫描码 <span lang=EN-US>0xe0 </span>或 <span lang=EN-US>0xe1
|
||
</span>时设置的标志。</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>每个字节标志中各位的含义见如下说明:</p>
|
||
|
||
<p class=a><span lang=EN-US> // (1) mode</span>是键盘特殊键的按下状态标志。</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>表示大小写转换键<span
|
||
lang=EN-US>(caps)</span>、交换键<span lang=EN-US>(alt)</span>、控制键<span lang=EN-US>(ctrl)</span>和换档键<span
|
||
lang=EN-US>(shift)</span>的状态。</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>位<span
|
||
lang=EN-US>7 caps</span>键按下;</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>位<span
|
||
lang=EN-US>6 caps</span>键的状态(应该与<span lang=EN-US>leds</span>中对应<span
|
||
lang=EN-US>caps</span>的标志位一样);</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>位<span
|
||
lang=EN-US>5 </span>右<span lang=EN-US>alt</span>键按下;</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>位<span
|
||
lang=EN-US>4 </span>左<span lang=EN-US>alt</span>键按下;</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>位<span
|
||
lang=EN-US>3 </span>右<span lang=EN-US>ctrl</span>键按下;</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>位<span
|
||
lang=EN-US>2 </span>左<span lang=EN-US>ctrl</span>键按下;</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>位<span
|
||
lang=EN-US>1 </span>右<span lang=EN-US>shift</span>键按下;</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>位<span
|
||
lang=EN-US>0 </span>左<span lang=EN-US>shift</span>键按下。</p>
|
||
|
||
<p class=a><span lang=EN-US> // (2) leds</span>是用于表示键盘指示灯的状态标志。即表示数字锁定键(<span
|
||
lang=EN-US>num-lock</span>)、大小写转换</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>键(<span lang=EN-US>caps-lock</span>)和滚动锁定键(<span
|
||
lang=EN-US>scroll-lock</span>)的<span lang=EN-US>LED</span>发光管状态。</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>位<span
|
||
lang=EN-US>7-3 </span>全<span lang=EN-US>0</span>不用;</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>位<span
|
||
lang=EN-US>2 caps-lock</span>;</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>位<span
|
||
lang=EN-US>1 num-lock</span>(初始置<span lang=EN-US>1</span>,也即设置数字锁定键<span
|
||
lang=EN-US>(num-lock)</span>发光管为亮);</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>位<span
|
||
lang=EN-US>0 scroll-lock</span>。</p>
|
||
|
||
<p class=a><span lang=EN-US> // (3) </span>当扫描码是<span
|
||
lang=EN-US>0xe0</span>或<span lang=EN-US>0xe1</span>时,置该标志。表示其后还跟随着<span
|
||
lang=EN-US>1</span>个或<span lang=EN-US>2</span>个字符扫描码。通</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>常若收到扫描码<span
|
||
lang=EN-US>0xe0</span>则意味着还有一个字符跟随其后;若收到扫描码<span lang=EN-US>0xe1</span>则表示后面还跟</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>随着<span lang=EN-US>2</span>个字符。参见程序列表后说明。</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>位<span
|
||
lang=EN-US>1 =1 </span>收到<span lang=EN-US>0xe1</span>标志;</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>位<span
|
||
lang=EN-US>0 =1 </span>收到<span lang=EN-US>0xe0</span>标志。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>33</span></u>
|
||
mode: .byte 0 /*
|
||
caps, alt, ctrl and shift mode */</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>34</span></u>
|
||
leds: .byte 2 /*
|
||
num-lock, caps, scroll-lock mode (nom-lock on) */</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>35</span></u>
|
||
e0: .byte 0</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>36</span></u> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>37</span></u> /*</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>38</span></u>
|
||
* con_int is the real interrupt routine that reads the</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>39</span></u>
|
||
* keyboard scan-code and converts it into the appropriate</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>40</span></u>
|
||
* ascii character(s).</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>41</span></u>
|
||
*/</span></p>
|
||
|
||
<p class=a><span lang=EN-US> /*</span></p>
|
||
|
||
<p class=a><span lang=EN-US> * con_int</span>是实际的中断处理子程序,用于读键盘扫描码并将其转换</p>
|
||
|
||
<p class=a><span lang=EN-US> * </span>成相应的<span
|
||
lang=EN-US>ascii</span>字符。<span lang=EN-US>[ </span>注:这段英文注释已过时。<span
|
||
lang=EN-US>]</span></p>
|
||
|
||
<p class=a><span lang=EN-US> */</span></p>
|
||
|
||
<p class=a><span lang=EN-US> //// </span>键盘中断处理程序入口点。</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>当键盘控制器接收到用户的一个按键操作时,就会向中断控制器发出一个键盘中断请求信号</p>
|
||
|
||
<p class=a><span lang=EN-US> // IRQ1</span>。当<span
|
||
lang=EN-US>CPU</span>响应该请求时就会执行键盘中断处理程序。该中断处理程序会从键盘控制器相</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>应端口(<span lang=EN-US>0x60</span>)读入按键扫描码,并调用对应的扫描码子程序进行处理。</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>首先从端口<span lang=EN-US>0x60</span>读取当前按键的扫描码。然后判断该扫描码是否是<span
|
||
lang=EN-US>0xe0 </span>或 <span lang=EN-US>0xe1</span>,如果是</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>的话就立刻对键盘控制器作出应答,并向中断控制器发送中断结束(<span
|
||
lang=EN-US>EOI</span>)信号,以允许键</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>盘控制器能继续产生中断信号,从而让我们来接收后续的字符。
|
||
如果接收到的扫描码不是</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>这两个特殊扫描码,我们就根据扫描码值调用按键跳转表<span
|
||
lang=EN-US> key_table </span>中相应按键处理子程</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>序,把扫描码对应的字符放入读字符缓冲队列<span
|
||
lang=EN-US>read_q</span>中。然后,在对键盘控制器作出应答</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>并发送<span lang=EN-US>EOI</span>信号之后,调用函数<span
|
||
lang=EN-US>do_tty_interrupt()</span>(实际上是调用 <span lang=EN-US>copy_to_cooked()</span>)</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>把<span lang=EN-US>read_q</span>中的字符经过处理后放到<span
|
||
lang=EN-US>secondary</span>辅助队列中。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>42</span></u>
|
||
_keyboard_interrupt:</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>43</span></u>
|
||
pushl %eax</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>44</span></u>
|
||
pushl %ebx</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>45</span></u>
|
||
pushl %ecx</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>46</span></u>
|
||
pushl %edx</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>47</span></u>
|
||
push %ds</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>48</span></u>
|
||
push %es</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>49</span></u>
|
||
movl $0x10,%eax // </span>将<span
|
||
lang=EN-US>ds</span>、<span lang=EN-US>es</span>段寄存器置为内核数据段。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>50</span></u>
|
||
mov %ax,%ds</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>51</span></u>
|
||
mov %ax,%es</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>52</span></u>
|
||
movl _blankinterval,%eax</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>53</span></u>
|
||
movl %eax,_blankcount // </span>预置黑屏时间计数值为<span lang=EN-US>blankinterval</span>(滴答数)。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>54</span></u>
|
||
xorl %eax,%eax /* %eax is
|
||
scan code */ /* eax</span>中是扫描码<span lang=EN-US> */</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>55</span></u>
|
||
inb $0x60,%al // </span>读取扫描码<span
|
||
lang=EN-US style='font-family:Wingdings'>è</span><span lang=EN-US>al</span>。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>56</span></u>
|
||
cmpb $0xe0,%al // </span>扫描码是<span
|
||
lang=EN-US>0xe0</span>吗?若是则跳转到设置<span lang=EN-US>e0</span>标志代码处。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>57</span></u>
|
||
je set_e0</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>58</span></u>
|
||
cmpb $0xe1,%al // </span>扫描码是<span
|
||
lang=EN-US>0xe1</span>吗?若是则跳转到设置<span lang=EN-US>e1</span>标志代码处。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>59</span></u>
|
||
je set_e1</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>60</span></u>
|
||
call key_table(,%eax,4) // </span>调用键处理程序<span lang=EN-US> key_table + eax*4</span>(参见<span
|
||
lang=EN-US>502</span>行)。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>61</span></u>
|
||
movb $0,e0
|
||
// </span>返回之后复位<span lang=EN-US>e0</span>标志。</p>
|
||
|
||
<p class=a><span lang=EN-US> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>下面这段代码(<span
|
||
lang=EN-US>55-65</span>行)针对使用<span
|
||
lang=EN-US>8255A</span>的<span lang=EN-US>PC</span>标准键盘电路进行硬件复位处理。端口<span
|
||
lang=EN-US>0x61</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>是<span
|
||
lang=EN-US>8255A</span><span lang=EN-US> </span>输出口<span lang=EN-US>B </span>的地址,该输出端口的第<span
|
||
lang=EN-US>7</span>位(<span lang=EN-US>PB7</span>)用于禁止和允许对键盘数据的处理。</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>这段程序用于对收到的扫描码做出应答。方法是首先禁止键盘,然后立刻重新允许键盘工作。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>62</span></u>
|
||
e0_e1: inb $0x61,%al
|
||
// </span>取<span lang=EN-US>PPI</span>端口<span lang=EN-US>B</span>状态,其位<span
|
||
lang=EN-US>7</span>用于允许<span lang=EN-US>/</span>禁止(<span lang=EN-US>0/1</span>)键盘。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>63</span></u>
|
||
jmp 1f // </span>延迟一会。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>64</span></u>
|
||
1: jmp 1f</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>65</span></u>
|
||
1: orb $0x80,%al
|
||
// al</span>位<span lang=EN-US>7</span>置位(禁止键盘工作)。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>66</span></u>
|
||
jmp 1f</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>67</span></u>
|
||
1: jmp 1f</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>68</span></u>
|
||
1: outb %al,$0x61
|
||
// </span>使<span lang=EN-US>PPI PB7</span>位置位。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>69</span></u>
|
||
jmp 1f</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>70</span></u>
|
||
1: jmp 1f</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>71</span></u>
|
||
1: andb $0x7F,%al // al</span>位<span lang=EN-US>7</span>复位。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>72</span></u>
|
||
outb %al,$0x61 // </span>使<span
|
||
lang=EN-US>PPI PB7</span>位复位(允许键盘工作)。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>73</span></u>
|
||
movb $0x20,%al // </span>向<span
|
||
lang=EN-US>8259</span>中断芯片发送<span lang=EN-US>EOI(</span>中断结束<span lang=EN-US>)</span>信号。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>74</span></u>
|
||
outb %al,$0x20</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>75</span></u>
|
||
pushl $0
|
||
// </span>控制台<span lang=EN-US>tty</span>号<span lang=EN-US>=0</span>,作为参数入栈。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>76</span></u>
|
||
call _do_tty_interrupt // </span>将收到数据转换成规范模式并存放在规范字符缓冲队列中。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>77</span></u>
|
||
addl $4,%esp
|
||
// </span>丢弃入栈的参数,弹出保留的寄存器,并中断返回。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>78</span></u>
|
||
pop %es</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>79</span></u>
|
||
pop %ds</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>80</span></u>
|
||
popl %edx</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>81</span></u>
|
||
popl %ecx</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>82</span></u>
|
||
popl %ebx</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>83</span></u>
|
||
popl %eax</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>84</span></u>
|
||
iret</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>85</span></u>
|
||
set_e0: movb $1,e0
|
||
// </span>收到扫描前导码<span lang=EN-US>0xe0</span>时,设置<span lang=EN-US>e0</span>标志(位<span
|
||
lang=EN-US>0</span>)。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>86</span></u>
|
||
jmp e0_e1</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>87</span></u>
|
||
set_e1: movb $2,e0
|
||
// </span>收到扫描前导码<span lang=EN-US>0xe1</span>时,设置<span lang=EN-US>e1</span>标志(位<span
|
||
lang=EN-US>1</span>)。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>88</span></u>
|
||
jmp e0_e1</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>89</span></u> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>90</span></u> /*</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>91</span></u>
|
||
* This routine fills the buffer with max 8 bytes, taken from</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>92</span></u>
|
||
* %ebx:%eax. (%edx is high). The bytes are written in the</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>93</span></u>
|
||
* order %al,%ah,%eal,%eah,%bl,%bh ... until %eax is zero.</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>94</span></u>
|
||
*/</span></p>
|
||
|
||
<p class=a><span lang=EN-US> /*</span></p>
|
||
|
||
<p class=a><span lang=EN-US> * </span>下面该子程序把<span
|
||
lang=EN-US>ebx:eax</span>中的最多<span lang=EN-US>8</span>个字符添入缓冲队列中。(<span
|
||
lang=EN-US>ebx</span>是</p>
|
||
|
||
<p class=a><span lang=EN-US> * </span>高字)所写入字符的顺序是<span
|
||
lang=EN-US>al,ah,eal,eah,bl,bh...</span>直到<span lang=EN-US>eax</span>等于<span
|
||
lang=EN-US>0</span>。</p>
|
||
|
||
<p class=a><span lang=EN-US> */</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>首先从缓冲队列地址表<span
|
||
lang=EN-US>table_list</span>(<span lang=EN-US>tty_io.c</span>,<span lang=EN-US>99</span>行)取控制台的读缓冲队列<span
|
||
lang=EN-US>read_q</span>地址。</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>然后把<span lang=EN-US>al</span>寄存器中的字符复制到读队列头指针处并把头指针前移<span
|
||
lang=EN-US>1</span>字节位置。若头指针移出</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>读缓冲区的末端,就让其回绕到缓冲区开始处。 然后再看看此时缓冲队列是否已满,即比较</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>一下队列头指针是否与尾指针相等(相等表示满)。
|
||
如果已满,就把<span lang=EN-US>ebx:eax</span>中可能还有的</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>其余字符全部抛弃掉。如果缓冲区还未满,就把<span
|
||
lang=EN-US>ebx:eax</span>中数据联合右移<span lang=EN-US>8</span>个比特(即把<span
|
||
lang=EN-US>ah</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>值移到<span lang=EN-US>al</span>、<span
|
||
lang=EN-US>bl</span><span lang=EN-US style='font-family:Wingdings'>à</span><span
|
||
lang=EN-US>ah</span>、<span lang=EN-US>bh</span><span lang=EN-US
|
||
style='font-family:Wingdings'>à</span><span lang=EN-US>bl</span>),然后重复上面对<span
|
||
lang=EN-US>al</span>的处理过程。直到所有字符都处理完后,</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>就保存当前头指针值,再检查一下是否有进程等待着读队列,如果有救唤醒之。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>95</span></u>
|
||
put_queue:</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>96</span></u>
|
||
pushl %ecx</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>97</span></u>
|
||
pushl %edx
|
||
// </span>下句取控制台<span lang=EN-US>tty</span>结构中读缓冲队列指针。</p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>98</span></u>
|
||
movl _table_list,%edx #
|
||
read-queue for console</span></p>
|
||
|
||
<p class=a><span lang=EN-US> <u><span style='color:blue'>99</span></u>
|
||
movl head(%edx),%ecx // </span>取队列头指针<span
|
||
lang=EN-US style='font-family:Wingdings'>è</span><span lang=EN-US>ecx</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>100</span></u><span
|
||
lang=EN-US> 1: movb %al,buf(%edx,%ecx)
|
||
// </span>将<span lang=EN-US>al</span>中的字符放入头指针位置处。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>101</span></u><span
|
||
lang=EN-US> incl %ecx
|
||
// </span>头指针前移<span lang=EN-US>1</span>字节。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>102</span></u><span
|
||
lang=EN-US> andl $size-1,%ecx
|
||
// </span>调整头指针。若超出缓冲区末端则绕回开始处。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>103</span></u><span
|
||
lang=EN-US> cmpl
|
||
tail(%edx),%ecx # buffer
|
||
full - discard everything</span></p>
|
||
|
||
<p class=a><span lang=EN-US>
|
||
// </span>头指针<span lang=EN-US>==</span>尾指针吗?(即缓冲队列满了吗?)</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>104</span></u><span
|
||
lang=EN-US> je 3f // </span>如果已满,则后面未放入的字符全抛弃。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>105</span></u><span
|
||
lang=EN-US> shrdl $8,%ebx,%eax
|
||
// </span>将<span lang=EN-US>ebx</span>中<span lang=EN-US>8</span>个比特右移<span
|
||
lang=EN-US>8</span>位到<span lang=EN-US>eax</span>中,<span lang=EN-US>ebx</span>不变。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>106</span></u><span
|
||
lang=EN-US> je 2f // </span>还有字符吗?若没有(等于<span
|
||
lang=EN-US>0</span>)则跳转。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>107</span></u><span
|
||
lang=EN-US> shrl $8,%ebx
|
||
// </span>将<span lang=EN-US>ebx</span>值右移<span lang=EN-US>8</span>位,并跳转到标号<span
|
||
lang=EN-US>1</span>继续操作。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>108</span></u><span
|
||
lang=EN-US> jmp 1b</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>109</span></u><span
|
||
lang=EN-US> 2: movl %ecx,head(%edx)
|
||
// </span>若已将所有字符都放入队列,则保存头指针。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>110</span></u><span
|
||
lang=EN-US> movl
|
||
proc_list(%edx),%ecx // </span>该队列的等待进程指针?</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>111</span></u><span
|
||
lang=EN-US> testl %ecx,%ecx
|
||
// </span>检测是否有等待该队列的进程。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>112</span></u><span
|
||
lang=EN-US> je 3f // </span>无,则跳转;</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>113</span></u><span
|
||
lang=EN-US> movl $0,(%ecx)
|
||
// </span>有,则唤醒进程(置该进程为就绪状态)。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>114</span></u><span
|
||
lang=EN-US> 3: popl %edx</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>115</span></u><span
|
||
lang=EN-US> popl %ecx</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>116</span></u><span
|
||
lang=EN-US> ret</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>117</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>从这里开始是键跳转表<span
|
||
lang=EN-US>key_table</span>中指针对应的各个按键(或松键)处理子程序。供上面第</p>
|
||
|
||
<p class=a><span lang=EN-US> // 53</span>行语句调用。键跳转表<span
|
||
lang=EN-US>key_table</span>在第<span lang=EN-US>513</span>行开始。</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>下面这段代码根据<span
|
||
lang=EN-US>ctrl</span>或<span lang=EN-US>alt</span>的扫描码,分别设置模式标志<span
|
||
lang=EN-US>mode</span>中相应位。如果在该扫描</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>码之前收到过<span
|
||
lang=EN-US>0xe0</span>扫描码(<span lang=EN-US>e0</span>标志置位),则说明按下的是键盘右边的<span
|
||
lang=EN-US>ctrl</span>或<span lang=EN-US>alt</span>键,则</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>对应设置<span lang=EN-US>ctrl</span>或<span
|
||
lang=EN-US>alt</span>在模式标志<span lang=EN-US>mode</span>中的比特位。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>118</span></u><span
|
||
lang=EN-US> ctrl: movb $0x04,%al
|
||
// 0x4</span>是<span lang=EN-US>mode</span>中左<span lang=EN-US>ctrl</span>键对应的比特位(位<span
|
||
lang=EN-US>2</span>)。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>119</span></u><span
|
||
lang=EN-US> jmp 1f</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>120</span></u><span
|
||
lang=EN-US> alt: movb $0x10,%al
|
||
// 0x10</span>是<span lang=EN-US>mode</span>中左<span lang=EN-US>alt</span>键对应的比特位(位<span
|
||
lang=EN-US>4</span>)。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>121</span></u><span
|
||
lang=EN-US> 1: cmpb $0,e0
|
||
// e0</span>置位了吗(按下的是右边的<span lang=EN-US>ctrl/alt</span>键吗)?</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>122</span></u><span
|
||
lang=EN-US> je 2f // </span>不是则转。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>123</span></u><span
|
||
lang=EN-US> addb %al,%al
|
||
// </span>是,则改成置相应右键标志位(位<span lang=EN-US>3</span>或位<span lang=EN-US>5</span>)。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>124</span></u><span
|
||
lang=EN-US> 2: orb %al,mode
|
||
// </span>设置<span lang=EN-US>mode</span>标志中对应的比特位。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>125</span></u><span
|
||
lang=EN-US> ret</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>这段代码处理<span
|
||
lang=EN-US>ctrl</span>或<span lang=EN-US>alt</span>键松开时的扫描码,复位模式标志<span
|
||
lang=EN-US>mode</span>中的对应比特位。在处理</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>时要根据<span lang=EN-US>e0</span>标志是否置位来判断是否是键盘右边的<span
|
||
lang=EN-US>ctrl</span>或<span lang=EN-US>alt</span>键。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>126</span></u><span
|
||
lang=EN-US> unctrl: movb $0x04,%al
|
||
// mode</span>中左<span lang=EN-US>ctrl</span>键对应的比特位(位<span lang=EN-US>2</span>)。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>127</span></u><span
|
||
lang=EN-US> jmp 1f</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>128</span></u><span
|
||
lang=EN-US> unalt: movb $0x10,%al
|
||
// 0x10</span>是<span lang=EN-US>mode</span>中左<span lang=EN-US>alt</span>键对应的比特位(位<span
|
||
lang=EN-US>4</span>)。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>129</span></u><span
|
||
lang=EN-US> 1: cmpb $0,e0
|
||
// e0</span>置位了吗(释放的是右边的<span lang=EN-US>ctrl/alt</span>键吗)?</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>130</span></u><span
|
||
lang=EN-US> je 2f // </span>不是,则转。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>131</span></u><span
|
||
lang=EN-US> addb %al,%al
|
||
// </span>是,则改成复位相应右键的标志位(位<span lang=EN-US>3</span>或位<span lang=EN-US>5</span>)。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>132</span></u><span
|
||
lang=EN-US> 2: notb %al
|
||
// </span>复位<span lang=EN-US>mode</span>标志中对应的比特位。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>133</span></u><span
|
||
lang=EN-US> andb %al,mode</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>134</span></u><span
|
||
lang=EN-US> ret</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>135</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>这段代码处理左、右<span
|
||
lang=EN-US>shift</span>键按下和松开时的扫描码,分别设置和复位<span lang=EN-US>mode</span>中的相应位。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>136</span></u><span
|
||
lang=EN-US> lshift:</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>137</span></u><span
|
||
lang=EN-US> orb $0x01,mode
|
||
// </span>是左<span lang=EN-US>shift</span>键按下,设置<span lang=EN-US>mode</span>中位<span
|
||
lang=EN-US>0</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>138</span></u><span
|
||
lang=EN-US> ret</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>139</span></u><span
|
||
lang=EN-US> unlshift:</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>140</span></u><span
|
||
lang=EN-US> andb $0xfe,mode
|
||
// </span>是左<span lang=EN-US>shift</span>键松开,复位<span lang=EN-US>mode</span>中位<span
|
||
lang=EN-US>0</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>141</span></u><span
|
||
lang=EN-US> ret</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>142</span></u><span
|
||
lang=EN-US> rshift:</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>143</span></u><span
|
||
lang=EN-US> orb $0x02,mode
|
||
// </span>是右<span lang=EN-US>shift</span>键按下,设置<span lang=EN-US>mode</span>中位<span
|
||
lang=EN-US>1</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>144</span></u><span
|
||
lang=EN-US> ret</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>145</span></u><span
|
||
lang=EN-US> unrshift:</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>146</span></u><span
|
||
lang=EN-US> andb $0xfd,mode
|
||
// </span>是右<span lang=EN-US>shift</span>键松开,复位<span lang=EN-US>mode</span>中位<span
|
||
lang=EN-US>1</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>147</span></u><span
|
||
lang=EN-US> ret</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>148</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>这段代码对收到<span
|
||
lang=EN-US>caps</span>键扫描码进行处理。通过<span lang=EN-US>mode</span>中位<span
|
||
lang=EN-US>7</span>可以知道<span lang=EN-US>caps</span>键当前是否正处于</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>在按下状态。若是则返回,否则就翻转<span
|
||
lang=EN-US>mode</span>标志中<span lang=EN-US>caps</span>键按下的比特位(位<span lang=EN-US>6</span>)和<span
|
||
lang=EN-US>leds</span>标</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>志中<span lang=EN-US>caps-lock</span>比特位(位<span
|
||
lang=EN-US>2</span>),设置<span lang=EN-US>mode</span>标志中<span lang=EN-US>caps</span>键已按下标志位(位<span
|
||
lang=EN-US>7</span>)。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>149</span></u><span
|
||
lang=EN-US> caps: testb $0x80,mode
|
||
// </span>测试<span lang=EN-US>mode</span>中位<span lang=EN-US>7</span>是否已置位(即在按下状态)。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>150</span></u><span
|
||
lang=EN-US> jne 1f // </span>如果已处于按下状态,则返回(<span
|
||
lang=EN-US>186</span>行)。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>151</span></u><span
|
||
lang=EN-US> xorb $4,leds
|
||
// </span>翻转<span lang=EN-US>leds</span>标志中<span lang=EN-US>caps-lock</span>比特位(位<span
|
||
lang=EN-US>2</span>)。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>152</span></u><span
|
||
lang=EN-US> xorb $0x40,mode
|
||
// </span>翻转<span lang=EN-US>mode</span>标志中<span lang=EN-US>caps</span>键按下的比特位(位<span
|
||
lang=EN-US>6</span>)。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>153</span></u><span
|
||
lang=EN-US> orb $0x80,mode
|
||
// </span>设置<span lang=EN-US>mode</span>标志中<span lang=EN-US>caps</span>键已按下标志位(位<span
|
||
lang=EN-US>7</span>)。</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>这段代码根据<span
|
||
lang=EN-US>leds</span>标志,开启或关闭<span lang=EN-US>LED</span>指示器。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>154</span></u><span
|
||
lang=EN-US> set_leds:</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>155</span></u><span
|
||
lang=EN-US> call kb_wait
|
||
// </span>等待键盘控制器输入缓冲空。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>156</span></u><span
|
||
lang=EN-US> movb
|
||
$0xed,%al /*
|
||
set leds command */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>157</span></u><span
|
||
lang=EN-US> outb %al,$0x60
|
||
// </span>发送键盘命令<span lang=EN-US>0xed</span>到<span lang=EN-US>0x60</span>端口。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>158</span></u><span
|
||
lang=EN-US> call kb_wait</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>159</span></u><span
|
||
lang=EN-US> movb leds,%al
|
||
// </span>取<span lang=EN-US>leds</span>标志,作为参数。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>160</span></u><span
|
||
lang=EN-US> outb %al,$0x60
|
||
// </span>发送该参数。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>161</span></u><span
|
||
lang=EN-US> ret</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>162</span></u><span
|
||
lang=EN-US> uncaps: andb $0x7f,mode // caps</span>键松开,则复位<span
|
||
lang=EN-US>mode</span>中的对应位(位<span lang=EN-US>7</span>)。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>163</span></u><span
|
||
lang=EN-US> ret</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>164</span></u><span
|
||
lang=EN-US> scroll:</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>165</span></u><span
|
||
lang=EN-US> testb $0x03,mode
|
||
// </span>若此时<span lang=EN-US>ctrl</span>键也同时按下,则</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>166</span></u><span
|
||
lang=EN-US> je 1f</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>167</span></u><span
|
||
lang=EN-US> call _show_mem
|
||
// </span>显示内存状态信息(<span lang=EN-US>mm/memory.c</span>,<span lang=EN-US>457</span>行)。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>168</span></u><span
|
||
lang=EN-US> jmp 2f</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>169</span></u><span
|
||
lang=EN-US> 1: call _show_state
|
||
// </span>否则显示进程状态信息(<span lang=EN-US>kernel/sched.c</span>,<span lang=EN-US>45</span>行)。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>170</span></u><span
|
||
lang=EN-US> 2: xorb $1,leds
|
||
// scroll</span>键按下,则翻转<span lang=EN-US>leds</span>中对应位(位<span lang=EN-US>0</span>)。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>171</span></u><span
|
||
lang=EN-US> jmp set_leds
|
||
// </span>根据<span lang=EN-US>leds</span>标志重新开启或关闭<span lang=EN-US>LED</span>指示器。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>172</span></u><span
|
||
lang=EN-US> num: xorb $2,leds
|
||
// num</span>键按下,则翻转<span lang=EN-US>leds</span>中的对应位(位<span lang=EN-US>1</span>)。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>173</span></u><span
|
||
lang=EN-US> jmp set_leds
|
||
// </span>根据<span lang=EN-US>leds</span>标志重新开启或关闭<span lang=EN-US>LED</span>指示器。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>174</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>175</span></u><span
|
||
lang=EN-US> /*</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>176</span></u><span
|
||
lang=EN-US> * curosr-key/numeric keypad cursor keys are handled
|
||
here.</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>177</span></u><span
|
||
lang=EN-US> * checking for numeric keypad etc.</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>178</span></u><span
|
||
lang=EN-US> */</span></p>
|
||
|
||
<p class=a><span lang=EN-US> /*</span></p>
|
||
|
||
<p class=a><span lang=EN-US> * </span>这里处理方向键<span
|
||
lang=EN-US>/</span>数字小键盘方向键,检测数字小键盘等。</p>
|
||
|
||
<p class=a><span lang=EN-US> */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>179</span></u><span
|
||
lang=EN-US> cursor:</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>180</span></u><span
|
||
lang=EN-US> subb $0x47,%al
|
||
// </span>扫描码是数字键盘上的键(其扫描码<span lang=EN-US>>=0x47</span>)发出的?</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>181</span></u><span
|
||
lang=EN-US> jb 1f // </span>如果小于则不处理,返回(<span lang=EN-US>198</span>行)。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>182</span></u><span
|
||
lang=EN-US> cmpb $12,%al
|
||
// </span>如果扫描码 <span lang=EN-US>> 0x53</span>(<span lang=EN-US>0x53 - 0x47 =
|
||
12</span>),则</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>183</span></u><span
|
||
lang=EN-US> ja 1f // </span>表示扫描码值超过<span lang=EN-US>83</span>(<span
|
||
lang=EN-US>0x53</span>),不处理,返回。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>184</span></u><span
|
||
lang=EN-US> jne
|
||
cur2
|
||
/* check for ctrl-alt-del */ /* </span>检测<span lang=EN-US>ctrl-alt-del</span>键<span
|
||
lang=EN-US>*/</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>若等于<span lang=EN-US>12</span>,说明<span
|
||
lang=EN-US>del</span>键已被按下,则继续判断<span lang=EN-US>ctrl</span>和<span lang=EN-US>alt</span>是否也被同时按下。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>185</span></u><span
|
||
lang=EN-US> testb $0x0c,mode // </span>有<span
|
||
lang=EN-US>ctrl</span>键按下了吗?无,则跳转。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>186</span></u><span
|
||
lang=EN-US> je cur2</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>187</span></u><span
|
||
lang=EN-US> testb $0x30,mode
|
||
// </span>有<span lang=EN-US>alt</span>键按下吗?</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>188</span></u><span
|
||
lang=EN-US> jne reboot
|
||
// </span>有,则跳转到重启动处理(<span lang=EN-US>594</span>行)。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>189</span></u><span
|
||
lang=EN-US> cur2: cmpb
|
||
$0x01,e0 /* e0
|
||
forces cursor movement */ /* e0</span>置位指光标移动<span lang=EN-US>*/</span></p>
|
||
|
||
<p class=a><span lang=EN-US>
|
||
// e0</span>标志置位了吗?</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>190</span></u><span
|
||
lang=EN-US> je cur
|
||
// </span>置位了,则跳转光标移动处理处<span lang=EN-US>cur</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>191</span></u><span
|
||
lang=EN-US> testb
|
||
$0x02,leds /* not num-lock forces
|
||
cursor */ /* num-lock</span>键则不许<span lang=EN-US>*/</span></p>
|
||
|
||
<p class=a><span lang=EN-US>
|
||
// </span>测试<span lang=EN-US>leds</span>中标志<span lang=EN-US>num-lock</span>键标志是否置位。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>192</span></u><span
|
||
lang=EN-US> je cur
|
||
// </span>若没有置位(<span lang=EN-US>num</span>的<span lang=EN-US>LED</span>不亮),则也处理光标移动。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>193</span></u><span
|
||
lang=EN-US> testb
|
||
$0x03,mode /* shift forces cursor */ /*
|
||
shift</span>键也使光标移动<span lang=EN-US> */</span></p>
|
||
|
||
<p class=a><span lang=EN-US>
|
||
// </span>测试模式标志<span
|
||
lang=EN-US>mode</span>中<span lang=EN-US>shift</span>按下标志。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>194</span></u><span
|
||
lang=EN-US> jne cur
|
||
// </span>如果有<span lang=EN-US>shift</span>键按下,则也进行光标移动处理。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>195</span></u><span
|
||
lang=EN-US> xorl %ebx,%ebx
|
||
// </span>否则查询小数字表(<span lang=EN-US>199</span>行),取键的数字<span lang=EN-US>ASCII</span>码。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>196</span></u><span
|
||
lang=EN-US> movb
|
||
num_table(%eax),%al // </span>以<span lang=EN-US>eax</span>作为索引值,取对应数字字符<span
|
||
lang=EN-US style='font-family:Wingdings'>è</span><span lang=EN-US>al</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>197</span></u><span
|
||
lang=EN-US> jmp put_queue
|
||
// </span>字符放入缓冲队列中。由于要放入队列的字符数<span lang=EN-US><=4</span>,因此</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>198</span></u><span
|
||
lang=EN-US> 1: ret
|
||
// </span>在执行<span lang=EN-US>put_queue</span>前需把<span lang=EN-US>ebx</span>清零,见<span
|
||
lang=EN-US>87</span>行上的注释。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>199</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>这段代码处理光标移动或插入删除按键。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>200</span></u><span
|
||
lang=EN-US> cur: movb cur_table(%eax),%al //
|
||
</span>取光标字符表中相应键的代表字符<span lang=EN-US style='font-family:Wingdings'>è</span><span
|
||
lang=EN-US>al</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>201</span></u><span
|
||
lang=EN-US> cmpb $'9,%al //
|
||
</span>若字符<span lang=EN-US><='9'</span>(<span lang=EN-US>5</span>、<span
|
||
lang=EN-US>6</span>、<span lang=EN-US>2</span>或<span lang=EN-US>3</span>),说明是上一页、下一页、</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>202</span></u><span
|
||
lang=EN-US> ja ok_cur
|
||
// </span>插入或删除键,则功能字符序列中要添入字符<span lang=EN-US>'~'</span>。不过</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>203</span></u><span
|
||
lang=EN-US> movb $'~,%ah
|
||
// </span>本内核并没有对它们进行识别和处理。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>204</span></u><span
|
||
lang=EN-US> ok_cur: shll $16,%eax
|
||
// </span>将<span lang=EN-US>ax</span>中内容移到<span lang=EN-US>eax</span>高字中。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>205</span></u><span
|
||
lang=EN-US> movw $0x5b1b,%ax
|
||
// </span>把<span lang=EN-US>'esc ['</span>放入<span lang=EN-US>ax</span>,与<span
|
||
lang=EN-US>eax</span>高字中字符组成移动序列。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>206</span></u><span
|
||
lang=EN-US> xorl %ebx,%ebx
|
||
// </span>由于只需把<span lang=EN-US>eax</span>中字符放入队列,因此需要把<span lang=EN-US>ebx</span>清零。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>207</span></u><span
|
||
lang=EN-US> jmp put_queue
|
||
// </span>将该字符放入缓冲队列中。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>208</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>209</span></u><span
|
||
lang=EN-US> #if defined(KBD_FR)</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>210</span></u><span
|
||
lang=EN-US> num_table:</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>211</span></u><span
|
||
lang=EN-US> .ascii "789
|
||
456 1230." // </span>数字小键盘上键对应的数字<span lang=EN-US>ASCII</span>码表。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>212</span></u><span
|
||
lang=EN-US> #else</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>213</span></u><span
|
||
lang=EN-US> num_table:</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>214</span></u><span
|
||
lang=EN-US> .ascii "789
|
||
456 1230,"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>215</span></u><span
|
||
lang=EN-US> #endif</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>216</span></u><span
|
||
lang=EN-US> cur_table:</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>217</span></u><span
|
||
lang=EN-US> .ascii "HA5
|
||
DGC YB623" // </span>小键盘上方向键或插入删除键对应的移动表示字符表。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>218</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>219</span></u><span
|
||
lang=EN-US> /*</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>220</span></u><span
|
||
lang=EN-US> * this routine handles function keys</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>221</span></u><span
|
||
lang=EN-US> */</span></p>
|
||
|
||
<p class=a><span lang=EN-US> /*</span></p>
|
||
|
||
<p class=a><span lang=EN-US> * </span>下面子程序处理功能键。</p>
|
||
|
||
<p class=a><span lang=EN-US> */</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>把功能键扫描码变换成转义字符序列并存放到读队列中。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>222</span></u><span
|
||
lang=EN-US> func:</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>223</span></u><span
|
||
lang=EN-US> subb $0x3B,%al
|
||
// </span>键<span lang=EN-US>'F1'</span>的扫描码是<span lang=EN-US>0x3B</span>,因此<span
|
||
lang=EN-US>al</span>中是功能键索引号。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>224</span></u><span
|
||
lang=EN-US> jb end_func
|
||
// </span>如果扫描码小于<span lang=EN-US>0x3b</span>,则不处理,返回。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>225</span></u><span
|
||
lang=EN-US> cmpb $9,%al
|
||
// </span>功能键是<span lang=EN-US>F1--F10</span>?</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>226</span></u><span
|
||
lang=EN-US> jbe ok_func //
|
||
</span>是,则跳转。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>227</span></u><span
|
||
lang=EN-US> subb $18,%al
|
||
// </span>是功能键<span lang=EN-US>F11</span>,<span lang=EN-US>F12</span>吗?<span
|
||
lang=EN-US>F11</span>、<span lang=EN-US>F12</span>扫描码是<span lang=EN-US>0x57</span>、<span
|
||
lang=EN-US>0x58</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>228</span></u><span
|
||
lang=EN-US> cmpb $10,%al
|
||
// </span>是功能键<span lang=EN-US>F11</span>?</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>229</span></u><span
|
||
lang=EN-US> jb end_func
|
||
// </span>不是,则不处理,返回。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>230</span></u><span
|
||
lang=EN-US> cmpb $11,%al
|
||
// </span>是功能键<span lang=EN-US>F12</span>?</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>231</span></u><span
|
||
lang=EN-US> ja end_func
|
||
// </span>不是,则不处理,返回。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>232</span></u><span
|
||
lang=EN-US> ok_func:</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>233</span></u><span
|
||
lang=EN-US> testb $0x10,mode
|
||
// </span>左<span lang=EN-US>alt</span>键也同时按下了吗?</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>234</span></u><span
|
||
lang=EN-US> jne alt_func
|
||
// </span>是则跳转处理更换虚拟控制终端。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>235</span></u><span
|
||
lang=EN-US> cmpl
|
||
$4,%ecx /*
|
||
check that there is enough room */ /*</span>检查空间<span lang=EN-US>*/</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>236</span></u><span
|
||
lang=EN-US> jl end_func
|
||
// [??]</span>需要放入<span lang=EN-US>4</span>个字符,如果放不下,则返回。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>237</span></u><span
|
||
lang=EN-US> movl
|
||
func_table(,%eax,4),%eax // </span>取功能键对应字符序列。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>238</span></u><span
|
||
lang=EN-US> xorl %ebx,%ebx
|
||
// </span>因要放入队列字符数<span lang=EN-US>=4</span>,因此执行<span
|
||
lang=EN-US>put_queue</span>之前</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>239</span></u><span
|
||
lang=EN-US> jmp put_queue
|
||
// </span>需把<span lang=EN-US>ebx</span>清零。</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>处理 <span lang=EN-US>alt
|
||
+ Fn </span>组合键,改变虚拟控制终端。此时<span lang=EN-US>eax</span>中是功能键索引号(<span
|
||
lang=EN-US>F1 -- 0</span>),对应</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>虚拟控制终端号。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>240</span></u><span
|
||
lang=EN-US> alt_func:</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>241</span></u><span
|
||
lang=EN-US> pushl %eax
|
||
// </span>虚拟控制终端号入栈,作为参数。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>242</span></u><span
|
||
lang=EN-US> call
|
||
_change_console // </span>更改当前虚拟控制终端(<span
|
||
lang=EN-US>chr_dev/tty_io.c</span>,<span lang=EN-US>87</span>行)。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>243</span></u><span
|
||
lang=EN-US> popl %eax
|
||
// </span>丢弃参数。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>244</span></u><span
|
||
lang=EN-US> end_func:</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>245</span></u><span
|
||
lang=EN-US> ret</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>246</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>247</span></u><span
|
||
lang=EN-US> /*</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>248</span></u><span
|
||
lang=EN-US> * function keys send F1:'esc [ [ A' F2:'esc [ [ B' etc.</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>249</span></u><span
|
||
lang=EN-US> */</span></p>
|
||
|
||
<p class=a><span lang=EN-US> /*</span></p>
|
||
|
||
<p class=a><span lang=EN-US> * </span>功能键发送的扫描码,<span
|
||
lang=EN-US>F1</span>键为:<span lang=EN-US>'esc [ [ A'</span>,<span lang=EN-US> F2</span>键为:<span
|
||
lang=EN-US>'esc [ [ B'</span>等。</p>
|
||
|
||
<p class=a><span lang=EN-US> */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>250</span></u><span
|
||
lang=EN-US> func_table:</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>251</span></u><span
|
||
lang=EN-US> .long
|
||
0x415b5b1b,0x425b5b1b,0x435b5b1b,0x445b5b1b</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>252</span></u><span
|
||
lang=EN-US> .long
|
||
0x455b5b1b,0x465b5b1b,0x475b5b1b,0x485b5b1b</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>253</span></u><span
|
||
lang=EN-US> .long 0x495b5b1b,0x4a5b5b1b,0x4b5b5b1b,0x4c5b5b1b</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>254</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>扫描码<span lang=EN-US>-ASCII</span>字符映射表。</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>根据前面定义的键盘类型<span
|
||
lang=EN-US>(FINNISH</span>,<span lang=EN-US>US</span>,<span lang=EN-US>GERMEN</span>,<span
|
||
lang=EN-US>FRANCH)</span>,将相应键的扫描码映射到</p>
|
||
|
||
<p class=a><span lang=EN-US> // ASCII</span>字符。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>255</span></u><span
|
||
lang=EN-US> #if defined(KBD_FINNISH)
|
||
// </span>以下是芬兰语键盘的扫描码映射表。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>256</span></u><span
|
||
lang=EN-US> key_map:</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>257</span></u><span
|
||
lang=EN-US> .byte 0,27
|
||
// </span>扫描码<span lang=EN-US>0x00,0x01</span>对应的<span lang=EN-US>ASCII</span>码;</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>258</span></u><span
|
||
lang=EN-US> .ascii
|
||
"1234567890+'" // </span>扫描码<span lang=EN-US>0x02,...0x0c,0x0d</span>对应的<span
|
||
lang=EN-US>ASCII</span>码,以下类似。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>259</span></u><span
|
||
lang=EN-US> .byte 127,9</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>260</span></u><span
|
||
lang=EN-US> .ascii
|
||
"qwertyuiop}"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>261</span></u><span
|
||
lang=EN-US> .byte 0,13,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>262</span></u><span
|
||
lang=EN-US> .ascii
|
||
"asdfghjkl|{"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>263</span></u><span
|
||
lang=EN-US> .byte 0,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>264</span></u><span
|
||
lang=EN-US> .ascii
|
||
"'zxcvbnm,.-"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>265</span></u><span
|
||
lang=EN-US> .byte
|
||
0,'*,0,32 /* 36-39 */
|
||
/* </span>扫描码<span lang=EN-US>0x36-0x39</span>对应的<span lang=EN-US>ASCII</span>码<span
|
||
lang=EN-US> */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>266</span></u><span
|
||
lang=EN-US> .fill
|
||
16,1,0 /* 3A-49 */ /* </span>扫描码<span
|
||
lang=EN-US>0x3A-0x49</span>对应的<span
|
||
lang=EN-US>ASCII</span>码<span lang=EN-US> */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>267</span></u><span
|
||
lang=EN-US> .byte
|
||
'-,0,0,0,'+ /* 4A-4E */ /* </span>扫描码<span
|
||
lang=EN-US>0x4A-0x4E</span>对应的<span
|
||
lang=EN-US>ASCII</span>码<span lang=EN-US> */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>268</span></u><span
|
||
lang=EN-US> .byte
|
||
0,0,0,0,0,0,0 /* 4F-55 */ /* </span>扫描码<span lang=EN-US>0x4F-0x55</span>对应的<span
|
||
lang=EN-US>ASCII</span>码<span lang=EN-US> */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>269</span></u><span
|
||
lang=EN-US> .byte '<</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>270</span></u><span
|
||
lang=EN-US> .fill 10,1,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>271</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>272</span></u><span
|
||
lang=EN-US> shift_map:
|
||
// shift</span>键同时按下时的映射表。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>273</span></u><span
|
||
lang=EN-US> .byte 0,27</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>274</span></u><span
|
||
lang=EN-US> .ascii
|
||
"!\"#$%&/()=?`"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>275</span></u><span
|
||
lang=EN-US> .byte 127,9</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>276</span></u><span
|
||
lang=EN-US> .ascii
|
||
"QWERTYUIOP]^"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>277</span></u><span
|
||
lang=EN-US> .byte 13,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>278</span></u><span
|
||
lang=EN-US> .ascii
|
||
"ASDFGHJKL\\["</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>279</span></u><span
|
||
lang=EN-US> .byte 0,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>280</span></u><span
|
||
lang=EN-US> .ascii
|
||
"*ZXCVBNM;:_"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>281</span></u><span
|
||
lang=EN-US> .byte
|
||
0,'*,0,32 /* 36-39 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>282</span></u><span
|
||
lang=EN-US> .fill
|
||
16,1,0 /* 3A-49 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>283</span></u><span
|
||
lang=EN-US> .byte
|
||
'-,0,0,0,'+ /* 4A-4E */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>284</span></u><span
|
||
lang=EN-US> .byte
|
||
0,0,0,0,0,0,0 /* 4F-55 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>285</span></u><span
|
||
lang=EN-US> .byte '></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>286</span></u><span
|
||
lang=EN-US> .fill 10,1,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>287</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>288</span></u><span
|
||
lang=EN-US> alt_map:
|
||
// alt</span>键同时按下时的映射表。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>289</span></u><span
|
||
lang=EN-US> .byte 0,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>290</span></u><span
|
||
lang=EN-US> .ascii
|
||
"\0@\0$\0\0{[]}\\\0"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>291</span></u><span
|
||
lang=EN-US> .byte 0,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>292</span></u><span
|
||
lang=EN-US> .byte
|
||
0,0,0,0,0,0,0,0,0,0,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>293</span></u><span
|
||
lang=EN-US> .byte '~,13,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>294</span></u><span
|
||
lang=EN-US> .byte
|
||
0,0,0,0,0,0,0,0,0,0,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>295</span></u><span
|
||
lang=EN-US> .byte 0,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>296</span></u><span
|
||
lang=EN-US> .byte
|
||
0,0,0,0,0,0,0,0,0,0,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>297</span></u><span
|
||
lang=EN-US> .byte
|
||
0,0,0,0 /* 36-39 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>298</span></u><span
|
||
lang=EN-US> .fill
|
||
16,1,0 /* 3A-49 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>299</span></u><span
|
||
lang=EN-US> .byte
|
||
0,0,0,0,0 /* 4A-4E */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>300</span></u><span
|
||
lang=EN-US> .byte
|
||
0,0,0,0,0,0,0 /* 4F-55 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>301</span></u><span
|
||
lang=EN-US> .byte '|</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>302</span></u><span
|
||
lang=EN-US> .fill 10,1,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>303</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>304</span></u><span
|
||
lang=EN-US> #elif defined(KBD_US) //
|
||
</span>以下是美式键盘的扫描码映射表。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>305</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>306</span></u><span
|
||
lang=EN-US> key_map:</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>307</span></u><span
|
||
lang=EN-US> .byte 0,27</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>308</span></u><span
|
||
lang=EN-US> .ascii
|
||
"1234567890-="</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>309</span></u><span
|
||
lang=EN-US> .byte 127,9</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>310</span></u><span
|
||
lang=EN-US> .ascii
|
||
"qwertyuiop[]"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>311</span></u><span
|
||
lang=EN-US> .byte 13,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>312</span></u><span
|
||
lang=EN-US> .ascii
|
||
"asdfghjkl;'"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>313</span></u><span
|
||
lang=EN-US> .byte '`,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>314</span></u><span
|
||
lang=EN-US> .ascii
|
||
"\\zxcvbnm,./"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>315</span></u><span
|
||
lang=EN-US> .byte
|
||
0,'*,0,32 /* 36-39 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>316</span></u><span
|
||
lang=EN-US> .fill
|
||
16,1,0 /* 3A-49 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>317</span></u><span
|
||
lang=EN-US> .byte
|
||
'-,0,0,0,'+ /* 4A-4E */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>318</span></u><span
|
||
lang=EN-US> .byte
|
||
0,0,0,0,0,0,0 /* 4F-55 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>319</span></u><span
|
||
lang=EN-US> .byte '<</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>320</span></u><span
|
||
lang=EN-US> .fill 10,1,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>321</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>322</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>323</span></u><span
|
||
lang=EN-US> shift_map:</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>324</span></u><span
|
||
lang=EN-US> .byte 0,27</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>325</span></u><span
|
||
lang=EN-US> .ascii
|
||
"!@#$%^&*()_+"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>326</span></u><span
|
||
lang=EN-US> .byte 127,9</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>327</span></u><span
|
||
lang=EN-US> .ascii
|
||
"QWERTYUIOP{}"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>328</span></u><span
|
||
lang=EN-US> .byte 13,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>329</span></u><span
|
||
lang=EN-US> .ascii
|
||
"ASDFGHJKL:\""</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>330</span></u><span
|
||
lang=EN-US> .byte '~,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>331</span></u><span
|
||
lang=EN-US> .ascii
|
||
"|ZXCVBNM<>?"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>332</span></u><span
|
||
lang=EN-US> .byte
|
||
0,'*,0,32 /* 36-39 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>333</span></u><span
|
||
lang=EN-US> .fill
|
||
16,1,0 /* 3A-49 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>334</span></u><span
|
||
lang=EN-US> .byte
|
||
'-,0,0,0,'+ /* 4A-4E */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>335</span></u><span
|
||
lang=EN-US> .byte 0,0,0,0,0,0,0
|
||
/* 4F-55 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>336</span></u><span
|
||
lang=EN-US> .byte '></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>337</span></u><span
|
||
lang=EN-US> .fill 10,1,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>338</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>339</span></u><span
|
||
lang=EN-US> alt_map:</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>340</span></u><span
|
||
lang=EN-US> .byte 0,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>341</span></u><span
|
||
lang=EN-US> .ascii
|
||
"\0@\0$\0\0{[]}\\\0"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>342</span></u><span
|
||
lang=EN-US> .byte 0,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>343</span></u><span
|
||
lang=EN-US> .byte
|
||
0,0,0,0,0,0,0,0,0,0,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>344</span></u><span
|
||
lang=EN-US> .byte '~,13,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>345</span></u><span
|
||
lang=EN-US> .byte
|
||
0,0,0,0,0,0,0,0,0,0,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>346</span></u><span
|
||
lang=EN-US> .byte 0,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>347</span></u><span
|
||
lang=EN-US> .byte
|
||
0,0,0,0,0,0,0,0,0,0,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>348</span></u><span
|
||
lang=EN-US> .byte
|
||
0,0,0,0 /* 36-39 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>349</span></u><span
|
||
lang=EN-US> .fill
|
||
16,1,0 /* 3A-49 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>350</span></u><span
|
||
lang=EN-US> .byte
|
||
0,0,0,0,0 /* 4A-4E */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>351</span></u><span
|
||
lang=EN-US> .byte
|
||
0,0,0,0,0,0,0 /* 4F-55 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>352</span></u><span
|
||
lang=EN-US> .byte '|</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>353</span></u><span
|
||
lang=EN-US> .fill 10,1,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>354</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>355</span></u><span
|
||
lang=EN-US> #elif defined(KBD_GR) //
|
||
</span>以下是德语键盘的扫描码映射表。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>356</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>357</span></u><span
|
||
lang=EN-US> key_map:</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>358</span></u><span
|
||
lang=EN-US> .byte 0,27</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>359</span></u><span
|
||
lang=EN-US> .ascii
|
||
"1234567890\\'"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>360</span></u><span
|
||
lang=EN-US> .byte 127,9</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>361</span></u><span
|
||
lang=EN-US> .ascii
|
||
"qwertzuiop@+"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>362</span></u><span
|
||
lang=EN-US> .byte 13,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>363</span></u><span
|
||
lang=EN-US> .ascii
|
||
"asdfghjkl[]^"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>364</span></u><span
|
||
lang=EN-US> .byte 0,'#</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>365</span></u><span
|
||
lang=EN-US> .ascii
|
||
"yxcvbnm,.-"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>366</span></u><span
|
||
lang=EN-US> .byte
|
||
0,'*,0,32 /* 36-39 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>367</span></u><span
|
||
lang=EN-US> .fill
|
||
16,1,0 /* 3A-49 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>368</span></u><span
|
||
lang=EN-US> .byte
|
||
'-,0,0,0,'+ /* 4A-4E */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>369</span></u><span
|
||
lang=EN-US> .byte
|
||
0,0,0,0,0,0,0 /* 4F-55 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>370</span></u><span
|
||
lang=EN-US> .byte '<</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>371</span></u><span
|
||
lang=EN-US> .fill 10,1,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>372</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>373</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>374</span></u><span
|
||
lang=EN-US> shift_map:</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>375</span></u><span
|
||
lang=EN-US> .byte 0,27</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>376</span></u><span
|
||
lang=EN-US> .ascii
|
||
"!\"#$%&/()=?`"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>377</span></u><span
|
||
lang=EN-US> .byte 127,9</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>378</span></u><span
|
||
lang=EN-US> .ascii "QWERTZUIOP\\*"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>379</span></u><span
|
||
lang=EN-US> .byte 13,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>380</span></u><span
|
||
lang=EN-US> .ascii
|
||
"ASDFGHJKL{}~"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>381</span></u><span
|
||
lang=EN-US> .byte 0,''</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>382</span></u><span
|
||
lang=EN-US> .ascii
|
||
"YXCVBNM;:_"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>383</span></u><span
|
||
lang=EN-US> .byte
|
||
0,'*,0,32 /* 36-39 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>384</span></u><span
|
||
lang=EN-US> .fill
|
||
16,1,0 /* 3A-49 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>385</span></u><span
|
||
lang=EN-US> .byte '-,0,0,0,'+
|
||
/* 4A-4E */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>386</span></u><span
|
||
lang=EN-US> .byte
|
||
0,0,0,0,0,0,0 /* 4F-55 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>387</span></u><span
|
||
lang=EN-US> .byte '></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>388</span></u><span
|
||
lang=EN-US> .fill 10,1,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>389</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>390</span></u><span
|
||
lang=EN-US> alt_map:</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>391</span></u><span
|
||
lang=EN-US> .byte 0,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>392</span></u><span
|
||
lang=EN-US> .ascii
|
||
"\0@\0$\0\0{[]}\\\0"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>393</span></u><span
|
||
lang=EN-US> .byte 0,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>394</span></u><span
|
||
lang=EN-US> .byte
|
||
'@,0,0,0,0,0,0,0,0,0,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>395</span></u><span
|
||
lang=EN-US> .byte '~,13,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>396</span></u><span
|
||
lang=EN-US> .byte
|
||
0,0,0,0,0,0,0,0,0,0,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>397</span></u><span
|
||
lang=EN-US> .byte 0,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>398</span></u><span
|
||
lang=EN-US> .byte
|
||
0,0,0,0,0,0,0,0,0,0,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>399</span></u><span
|
||
lang=EN-US> .byte
|
||
0,0,0,0 /* 36-39 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>400</span></u><span
|
||
lang=EN-US> .fill
|
||
16,1,0 /* 3A-49 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>401</span></u><span
|
||
lang=EN-US> .byte
|
||
0,0,0,0,0 /* 4A-4E */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>402</span></u><span
|
||
lang=EN-US> .byte
|
||
0,0,0,0,0,0,0 /* 4F-55 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>403</span></u><span
|
||
lang=EN-US> .byte '|</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>404</span></u><span
|
||
lang=EN-US> .fill 10,1,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>405</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>406</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>407</span></u><span
|
||
lang=EN-US> #elif defined(KBD_FR) //
|
||
</span>以下是法语键盘的扫描码映射表。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>408</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>409</span></u><span
|
||
lang=EN-US> key_map:</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>410</span></u><span
|
||
lang=EN-US> .byte 0,27</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>411</span></u><span
|
||
lang=EN-US> .ascii
|
||
"&{\"'(-}_/@)="</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>412</span></u><span
|
||
lang=EN-US> .byte 127,9</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>413</span></u><span
|
||
lang=EN-US> .ascii
|
||
"azertyuiop^$"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>414</span></u><span
|
||
lang=EN-US> .byte 13,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>415</span></u><span
|
||
lang=EN-US> .ascii
|
||
"qsdfghjklm|"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>416</span></u><span
|
||
lang=EN-US> .byte
|
||
'`,0,42 /* coin sup
|
||
gauche, don't know, [*|mu] */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>417</span></u><span
|
||
lang=EN-US> .ascii
|
||
"wxcvbn,;:!"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>418</span></u><span
|
||
lang=EN-US> .byte
|
||
0,'*,0,32 /* 36-39 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>419</span></u><span
|
||
lang=EN-US> .fill
|
||
16,1,0 /* 3A-49 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>420</span></u><span
|
||
lang=EN-US> .byte
|
||
'-,0,0,0,'+ /* 4A-4E */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>421</span></u><span
|
||
lang=EN-US> .byte
|
||
0,0,0,0,0,0,0 /* 4F-55 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>422</span></u><span
|
||
lang=EN-US> .byte '<</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>423</span></u><span
|
||
lang=EN-US> .fill 10,1,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>424</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>425</span></u><span
|
||
lang=EN-US> shift_map:</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>426</span></u><span
|
||
lang=EN-US> .byte 0,27</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>427</span></u><span
|
||
lang=EN-US> .ascii
|
||
"1234567890]+"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>428</span></u><span
|
||
lang=EN-US> .byte 127,9</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>429</span></u><span
|
||
lang=EN-US> .ascii
|
||
"AZERTYUIOP<>"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>430</span></u><span
|
||
lang=EN-US> .byte 13,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>431</span></u><span
|
||
lang=EN-US> .ascii
|
||
"QSDFGHJKLM%"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>432</span></u><span
|
||
lang=EN-US> .byte '~,0,'#</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>433</span></u><span
|
||
lang=EN-US> .ascii
|
||
"WXCVBN?./\\"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>434</span></u><span
|
||
lang=EN-US> .byte 0,'*,0,32
|
||
/* 36-39 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>435</span></u><span
|
||
lang=EN-US> .fill
|
||
16,1,0 /* 3A-49 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>436</span></u><span
|
||
lang=EN-US> .byte
|
||
'-,0,0,0,'+ /* 4A-4E */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>437</span></u><span
|
||
lang=EN-US> .byte
|
||
0,0,0,0,0,0,0 /* 4F-55 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>438</span></u><span
|
||
lang=EN-US> .byte '></span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>439</span></u><span
|
||
lang=EN-US> .fill 10,1,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>440</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>441</span></u><span
|
||
lang=EN-US> alt_map:</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>442</span></u><span
|
||
lang=EN-US> .byte 0,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>443</span></u><span
|
||
lang=EN-US> .ascii
|
||
"\0~#{[|`\\^@]}"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>444</span></u><span
|
||
lang=EN-US> .byte 0,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>445</span></u><span
|
||
lang=EN-US> .byte
|
||
'@,0,0,0,0,0,0,0,0,0,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>446</span></u><span
|
||
lang=EN-US> .byte '~,13,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>447</span></u><span
|
||
lang=EN-US> .byte
|
||
0,0,0,0,0,0,0,0,0,0,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>448</span></u><span
|
||
lang=EN-US> .byte 0,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>449</span></u><span
|
||
lang=EN-US> .byte
|
||
0,0,0,0,0,0,0,0,0,0,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>450</span></u><span
|
||
lang=EN-US> .byte
|
||
0,0,0,0 /* 36-39 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>451</span></u><span
|
||
lang=EN-US> .fill
|
||
16,1,0 /* 3A-49 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>452</span></u><span
|
||
lang=EN-US> .byte
|
||
0,0,0,0,0 /* 4A-4E */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>453</span></u><span
|
||
lang=EN-US> .byte
|
||
0,0,0,0,0,0,0 /* 4F-55 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>454</span></u><span
|
||
lang=EN-US> .byte '|</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>455</span></u><span
|
||
lang=EN-US> .fill 10,1,0</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>456</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>457</span></u><span
|
||
lang=EN-US> #else</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>458</span></u><span
|
||
lang=EN-US> #error "KBD-type not defined"</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>459</span></u><span
|
||
lang=EN-US> #endif</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>460</span></u><span
|
||
lang=EN-US> /*</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>461</span></u><span
|
||
lang=EN-US> * do_self handles "normal" keys, ie keys that don't
|
||
change meaning</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>462</span></u><span
|
||
lang=EN-US> * and which have just one character returns.</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>463</span></u><span
|
||
lang=EN-US> */</span></p>
|
||
|
||
<p class=a><span lang=EN-US> /*</span></p>
|
||
|
||
<p class=a><span lang=EN-US> * do_self</span>用于处理“普通”键,也即含义没有变化并且只有一个字符返回的键。</p>
|
||
|
||
<p class=a><span lang=EN-US> */</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>首先根据<span lang=EN-US>mode</span>标志选择<span
|
||
lang=EN-US>alt_map</span>、<span lang=EN-US>shift_map</span>或<span lang=EN-US>key_map</span>映射表之一。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>464</span></u><span
|
||
lang=EN-US> do_self:</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>465</span></u><span
|
||
lang=EN-US> lea alt_map,%ebx
|
||
// </span>取<span lang=EN-US>alt</span>键同时按下时的映射表基址<span lang=EN-US>alt_map</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>466</span></u><span
|
||
lang=EN-US> testb
|
||
$0x20,mode
|
||
/* alt-gr */ /* </span>右<span lang=EN-US>alt</span>键同时按下了<span
|
||
lang=EN-US>? */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>467</span></u><span
|
||
lang=EN-US> jne 1f // </span>是,则向前跳转到标号<span
|
||
lang=EN-US>1</span>处。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>468</span></u><span
|
||
lang=EN-US> lea shift_map,%ebx
|
||
// </span>取<span lang=EN-US>shift</span>键同时按下时的映射表基址<span lang=EN-US>shift_map</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>469</span></u><span
|
||
lang=EN-US> testb $0x03,mode
|
||
// </span>有<span lang=EN-US>shift</span>键同时按下了吗?</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>470</span></u><span
|
||
lang=EN-US> jne 1f // </span>有,则向前跳转到标号<span
|
||
lang=EN-US>1</span>处去映射字符。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>471</span></u><span
|
||
lang=EN-US> lea key_map,%ebx
|
||
// </span>否则使用普通映射表<span lang=EN-US>key_map</span>。</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>然后根据扫描码取映射表中对应的<span
|
||
lang=EN-US>ASCII</span>字符。若没有对应字符,则返回(转<span lang=EN-US>none</span>)。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>472</span></u><span
|
||
lang=EN-US> 1: movb (%ebx,%eax),%al
|
||
// </span>将扫描码作为索引值,取对应的<span lang=EN-US>ASCII</span>码<span lang=EN-US
|
||
style='font-family:Wingdings'>è</span><span lang=EN-US>al</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>473</span></u><span
|
||
lang=EN-US> orb %al,%al
|
||
// </span>检测看是否有对应的<span lang=EN-US>ASCII</span>码。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>474</span></u><span
|
||
lang=EN-US> je none
|
||
// </span>若没有<span lang=EN-US>(</span>对应的<span lang=EN-US>ASCII</span>码<span
|
||
lang=EN-US>=0)</span>,则返回。</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>若<span lang=EN-US>ctrl</span>键已按下或<span
|
||
lang=EN-US>caps</span>键锁定,并且字符在 <span lang=EN-US>'a'--'}'</span>(<span
|
||
lang=EN-US>0x61--0x7D</span>)范围内,则将其转成</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>大写字符(<span lang=EN-US>0x41--0x5D</span>)。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>475</span></u><span
|
||
lang=EN-US> testb $0x4c,mode /* ctrl or caps */ /* </span>控制键已按下或<span lang=EN-US>caps</span>亮?<span lang=EN-US>*/</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>476</span></u><span
|
||
lang=EN-US> je 2f // </span>没有,则向前跳转标号<span
|
||
lang=EN-US>2</span>处。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>477</span></u><span
|
||
lang=EN-US> cmpb $'a,%al
|
||
// </span>将<span lang=EN-US>al</span>中的字符与<span lang=EN-US>'a'</span>比较。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>478</span></u><span
|
||
lang=EN-US> jb 2f // </span>若<span lang=EN-US>al</span>值<span
|
||
lang=EN-US><'a'</span>,则转标号<span lang=EN-US>2</span>处。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>479</span></u><span
|
||
lang=EN-US> cmpb $'},%al
|
||
// </span>将<span lang=EN-US>al</span>中的字符与<span lang=EN-US>'}'</span>比较。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>480</span></u><span
|
||
lang=EN-US> ja 2f // </span>若<span lang=EN-US>al</span>值<span
|
||
lang=EN-US>>'}'</span>,则转标号<span lang=EN-US>2</span>处。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>481</span></u><span
|
||
lang=EN-US> subb $32,%al
|
||
// </span>将<span lang=EN-US>al</span>转换为大写字符(减<span lang=EN-US>0x20</span>)。</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>若<span lang=EN-US>ctrl</span>键已按下,并且字符在
|
||
<span lang=EN-US>'`'--'_'</span>(<span lang=EN-US>0x40--0x5F</span>)之间,即是大写字符,则将其转换为</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>控制字符(<span lang=EN-US>0x00--0x1F</span>)。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>482</span></u><span
|
||
lang=EN-US> 2: testb $0x0c,mode /* ctrl */ /* ctrl</span>键同时按下了吗?<span lang=EN-US>*/</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>483</span></u><span
|
||
lang=EN-US> je 3f // </span>若没有则转标号<span
|
||
lang=EN-US>3</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>484</span></u><span
|
||
lang=EN-US> cmpb $64,%al
|
||
// </span>将<span lang=EN-US>al</span>与<span lang=EN-US>'@'</span>(<span
|
||
lang=EN-US>64</span>)字符比较,即判断字符所属范围。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>485</span></u><span
|
||
lang=EN-US> jb 3f // </span>若值<span
|
||
lang=EN-US><'@'</span>,则转标号<span lang=EN-US>3</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>486</span></u><span
|
||
lang=EN-US> cmpb $64+32,%al
|
||
// </span>将<span lang=EN-US>al</span>与<span lang=EN-US>'`'</span>(<span
|
||
lang=EN-US>96</span>)字符比较,即判断字符所属范围。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>487</span></u><span
|
||
lang=EN-US> jae 3f // </span>若值<span lang=EN-US>>='`'</span>,则转标号<span
|
||
lang=EN-US>3</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>488</span></u><span
|
||
lang=EN-US> subb $64,%al
|
||
// </span>否则<span lang=EN-US>al</span>减<span lang=EN-US>0x40</span>,转换为<span
|
||
lang=EN-US>0x00--0x1f</span>的控制字符。</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>若左<span lang=EN-US>alt</span>键同时按下,则将字符的位<span
|
||
lang=EN-US>7</span>置位。即此时生成值大于<span lang=EN-US>0x7f</span>的扩展字符集中的字符。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>489</span></u><span
|
||
lang=EN-US> 3: testb
|
||
$0x10,mode
|
||
/* left alt */ /* </span>左<span lang=EN-US>alt</span>键同时按下?<span
|
||
lang=EN-US>*/</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>490</span></u><span
|
||
lang=EN-US> je 4f // </span>没有,则转标号<span
|
||
lang=EN-US>4</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>491</span></u><span
|
||
lang=EN-US> orb $0x80,%al
|
||
// </span>字符的位<span lang=EN-US>7</span>置位。</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>将<span lang=EN-US>al</span>中的字符放入读缓冲队列中。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>492</span></u><span
|
||
lang=EN-US> 4: andl $0xff,%eax
|
||
// </span>清<span lang=EN-US>eax</span>的高字和<span lang=EN-US>ah</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>493</span></u><span
|
||
lang=EN-US> xorl %ebx,%ebx
|
||
// </span>由于放入队列字符数<span lang=EN-US><=4</span>,因此需把<span
|
||
lang=EN-US>ebx</span>清零。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>494</span></u><span
|
||
lang=EN-US> call put_queue
|
||
// </span>将字符放入缓冲队列中。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>495</span></u><span
|
||
lang=EN-US> none: ret</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>496</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>497</span></u><span
|
||
lang=EN-US> /*</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>498</span></u><span
|
||
lang=EN-US> * minus has a routine of it's own, as a 'E0h' before</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>499</span></u><span
|
||
lang=EN-US> * the scan code for minus means that the numeric keypad</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>500</span></u><span
|
||
lang=EN-US> * slash was pushed.</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>501</span></u><span
|
||
lang=EN-US> */</span></p>
|
||
|
||
<p class=a><span lang=EN-US> /*</span></p>
|
||
|
||
<p class=a><span lang=EN-US> * </span>减号有它自己的处理子程序,因为在减号扫描码之前的<span
|
||
lang=EN-US>0xe0</span></p>
|
||
|
||
<p class=a><span lang=EN-US> * </span>意味着按下了数字小键盘上的斜杠键。</p>
|
||
|
||
<p class=a><span lang=EN-US> */</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>注意,对于芬兰语和德语键盘,扫描码<span
|
||
lang=EN-US>0x35</span>对应的是<span lang=EN-US>'-'</span>键。参见第<span lang=EN-US>264</span>和<span
|
||
lang=EN-US>365</span>行。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>502</span></u><span
|
||
lang=EN-US> minus: cmpb $1,e0
|
||
// e0</span>标志置位了吗?</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>503</span></u><span
|
||
lang=EN-US> jne do_self
|
||
// </span>没有,则调用<span lang=EN-US>do_self</span>对减号符进行普通处理。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>504</span></u><span
|
||
lang=EN-US> movl $'/,%eax
|
||
// </span>否则用<span lang=EN-US>'/'</span>替换减号<span lang=EN-US>'-'</span><span
|
||
lang=EN-US style='font-family:Wingdings'>è</span><span lang=EN-US>al</span>。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>505</span></u><span
|
||
lang=EN-US> xorl %ebx,%ebx
|
||
// </span>由于放入队列字符数<span lang=EN-US><=4</span>,因此需把<span
|
||
lang=EN-US>ebx</span>清零。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>506</span></u><span
|
||
lang=EN-US> jmp put_queue
|
||
// </span>并将字符放入缓冲队列中。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>507</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>508</span></u><span
|
||
lang=EN-US> /*</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>509</span></u><span
|
||
lang=EN-US> * This table decides which routine to call when a scan-code
|
||
has been</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>510</span></u><span
|
||
lang=EN-US> * gotten. Most routines just call do_self, or none, depending
|
||
if</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>511</span></u><span
|
||
lang=EN-US> * they are make or break.</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>512</span></u><span
|
||
lang=EN-US> */</span></p>
|
||
|
||
<p class=a><span lang=EN-US> /* </span></p>
|
||
|
||
<p class=a><span lang=EN-US> * </span>下面是一张子程序地址跳转表。当取得扫描码后就根据此表调用相应的扫描码</p>
|
||
|
||
<p class=a><span lang=EN-US> * </span>处理子程序。大多数调用的子程序是<span
|
||
lang=EN-US>do_self</span>,或者是<span lang=EN-US>none</span>,这起决于是按键</p>
|
||
|
||
<p class=a><span lang=EN-US> * </span>(<span
|
||
lang=EN-US>make</span>)还是释放键<span lang=EN-US>(break)</span>。</p>
|
||
|
||
<p class=a><span lang=EN-US> */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>513</span></u><span
|
||
lang=EN-US> key_table:</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>514</span></u><span
|
||
lang=EN-US> .long
|
||
none,do_self,do_self,do_self /* 00-03 s0 esc 1 2
|
||
*/</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>515</span></u><span
|
||
lang=EN-US> .long do_self,do_self,do_self,do_self
|
||
/* 04-07 3 4 5 6 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>516</span></u><span
|
||
lang=EN-US> .long
|
||
do_self,do_self,do_self,do_self /* 08-0B 7 8 9 0 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>517</span></u><span
|
||
lang=EN-US> .long
|
||
do_self,do_self,do_self,do_self /* 0C-0F + ' bs tab */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>518</span></u><span
|
||
lang=EN-US> .long
|
||
do_self,do_self,do_self,do_self /* 10-13 q w e r */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>519</span></u><span
|
||
lang=EN-US> .long
|
||
do_self,do_self,do_self,do_self /* 14-17 t y u i */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>520</span></u><span
|
||
lang=EN-US> .long
|
||
do_self,do_self,do_self,do_self /* 18-1B o p } ^ */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>521</span></u><span
|
||
lang=EN-US> .long
|
||
do_self,ctrl,do_self,do_self /* 1C-1F enter ctrl a s */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>522</span></u><span
|
||
lang=EN-US> .long do_self,do_self,do_self,do_self
|
||
/* 20-23 d f g h */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>523</span></u><span
|
||
lang=EN-US> .long
|
||
do_self,do_self,do_self,do_self /* 24-27 j k l | */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>524</span></u><span
|
||
lang=EN-US> .long
|
||
do_self,do_self,lshift,do_self /* 28-2B { para lshift , */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>525</span></u><span
|
||
lang=EN-US> .long
|
||
do_self,do_self,do_self,do_self /* 2C-2F z x c v */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>526</span></u><span
|
||
lang=EN-US> .long
|
||
do_self,do_self,do_self,do_self /* 30-33 b n m , */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>527</span></u><span
|
||
lang=EN-US> .long
|
||
do_self,minus,rshift,do_self /* 34-37 . - rshift
|
||
* */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>528</span></u><span
|
||
lang=EN-US> .long
|
||
alt,do_self,caps,func
|
||
/* 38-3B alt sp caps f1 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>529</span></u><span
|
||
lang=EN-US> .long
|
||
func,func,func,func
|
||
/* 3C-3F f2 f3 f4 f5 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>530</span></u><span
|
||
lang=EN-US> .long
|
||
func,func,func,func
|
||
/* 40-43 f6 f7 f8 f9 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>531</span></u><span
|
||
lang=EN-US> .long
|
||
func,num,scroll,cursor
|
||
/* 44-47 f10 num scr home */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>532</span></u><span
|
||
lang=EN-US> .long
|
||
cursor,cursor,do_self,cursor /* 48-4B up pgup -
|
||
left */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>533</span></u><span
|
||
lang=EN-US> .long
|
||
cursor,cursor,do_self,cursor /* 4C-4F n5 right + end */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>534</span></u><span
|
||
lang=EN-US> .long
|
||
cursor,cursor,cursor,cursor /* 50-53 dn
|
||
pgdn ins del */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>535</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,do_self,func
|
||
/* 54-57 sysreq ? < f11 */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>536</span></u><span
|
||
lang=EN-US> .long
|
||
func,none,none,none
|
||
/* 58-5B f12 ? ? ? */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>537</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* 5C-5F ? ? ? ? */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>538</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* 60-63 ? ? ? ? */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>539</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* 64-67 ? ? ? ? */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>540</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* 68-6B ? ? ? ? */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>541</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* 6C-6F ? ? ? ? */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>542</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none /*
|
||
70-73 ? ? ? ? */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>543</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* 74-77 ? ? ? ? */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>544</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* 78-7B ? ? ? ? */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>545</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* 7C-7F ? ? ? ? */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>546</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* 80-83 ? br br br */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>547</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* 84-87 br br br br */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>548</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* 88-8B br br br br */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>549</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* 8C-8F br br br br */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>550</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* 90-93 br br br br */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>551</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* 94-97 br br br br */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>552</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* 98-9B br br br br */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>553</span></u><span
|
||
lang=EN-US> .long
|
||
none,unctrl,none,none
|
||
/* 9C-9F br unctrl br br */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>554</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* A0-A3 br br br br */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>555</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* A4-A7 br br br br */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>556</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,unlshift,none
|
||
/* A8-AB br br unlshift br */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>557</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* AC-AF br br br br */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>558</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* B0-B3 br br br br */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>559</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,unrshift,none
|
||
/* B4-B7 br br unrshift br */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>560</span></u><span
|
||
lang=EN-US> .long
|
||
unalt,none,uncaps,none
|
||
/* B8-BB unalt br uncaps br */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>561</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* BC-BF br br br br */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>562</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* C0-C3 br br br br */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>563</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* C4-C7 br br br br */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>564</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* C8-CB br br br br */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>565</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* CC-CF br br br br */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>566</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* D0-D3 br br br br */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>567</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* D4-D7 br br br br */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>568</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* D8-DB br ? ? ? */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>569</span></u><span
|
||
lang=EN-US> .long none,none,none,none
|
||
/* DC-DF ? ? ? ? */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>570</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* E0-E3 e0 e1 ? ? */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>571</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* E4-E7 ? ? ? ? */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>572</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* E8-EB ? ? ? ? */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>573</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* EC-EF ? ? ? ? */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>574</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* F0-F3 ? ? ? ? */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>575</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* F4-F7 ? ? ? ? */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>576</span></u><span
|
||
lang=EN-US> .long none,none,none,none
|
||
/* F8-FB ? ? ? ? */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>577</span></u><span
|
||
lang=EN-US> .long
|
||
none,none,none,none
|
||
/* FC-FF ? ? ? ? */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>578</span></u><span
|
||
lang=EN-US> </span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>579</span></u><span
|
||
lang=EN-US> /*</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>580</span></u><span
|
||
lang=EN-US> * kb_wait waits for the keyboard controller buffer to empty.</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>581</span></u><span
|
||
lang=EN-US> * there is no timeout - if the buffer doesn't empty, we hang.</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>582</span></u><span
|
||
lang=EN-US> */</span></p>
|
||
|
||
<p class=a><span lang=EN-US> /*</span></p>
|
||
|
||
<p class=a><span lang=EN-US> * </span>子程序<span
|
||
lang=EN-US>kb_wait</span>用于等待键盘控制器缓冲空。不存在超时处理<span lang=EN-US> - </span>如果</p>
|
||
|
||
<p class=a><span lang=EN-US> * </span>缓冲永远不空的话,程序就会永远等待<span
|
||
lang=EN-US>(</span>死掉<span lang=EN-US>)</span>。</p>
|
||
|
||
<p class=a><span lang=EN-US> */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>583</span></u><span
|
||
lang=EN-US> kb_wait:</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>584</span></u><span
|
||
lang=EN-US> pushl %eax</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>585</span></u><span
|
||
lang=EN-US> 1: inb $0x64,%al
|
||
// </span>读键盘控制器状态。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>586</span></u><span
|
||
lang=EN-US> testb $0x02,%al
|
||
// </span>测试输入缓冲器是否为空(等于<span lang=EN-US>0</span>)。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>587</span></u><span
|
||
lang=EN-US> jne 1b
|
||
// </span>若不空,则跳转循环等待。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>588</span></u><span
|
||
lang=EN-US> popl %eax</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>589</span></u><span
|
||
lang=EN-US> ret</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>590</span></u><span
|
||
lang=EN-US> /*</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>591</span></u><span
|
||
lang=EN-US> * This routine reboots the machine by asking the keyboard</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>592</span></u><span
|
||
lang=EN-US> * controller to pulse the reset-line low.</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>593</span></u><span
|
||
lang=EN-US> */</span></p>
|
||
|
||
<p class=a><span lang=EN-US> /*</span></p>
|
||
|
||
<p class=a><span lang=EN-US> * </span>该子程序通过设置键盘控制器,向复位线输出负脉冲,使系统复</p>
|
||
|
||
<p class=a><span lang=EN-US> * </span>位重启(<span
|
||
lang=EN-US>reboot</span>)。</p>
|
||
|
||
<p class=a><span lang=EN-US> */</span></p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>该子程序往物理内存地址<span
|
||
lang=EN-US>0x472</span>处写值<span lang=EN-US>0x1234</span>。该位置是启动模式(<span
|
||
lang=EN-US>reboot_mode</span>)标志字。</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>在启动过程中<span
|
||
lang=EN-US>ROM BIOS</span>会读取该启动模式标志值并根据其值来指导下一步的执行。 如果该</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>值是<span lang=EN-US>0x1234</span>,则<span
|
||
lang=EN-US>BIOS </span>就会跳过内存检测过程而执行热启动(<span lang=EN-US>Warm-boot</span>)过程。 如果若该</p>
|
||
|
||
<p class=a><span lang=EN-US> // </span>值为<span lang=EN-US>0</span>,则执行冷启动(<span
|
||
lang=EN-US>Cold-boot</span>)过程。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>594</span></u><span
|
||
lang=EN-US> reboot:</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>595</span></u><span
|
||
lang=EN-US> call kb_wait
|
||
// </span>首先等待键盘控制器输入缓冲器空。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>596</span></u><span
|
||
lang=EN-US> movw
|
||
$0x1234,0x472 /*
|
||
don't do memory check */ /* </span>不检测内存 <span lang=EN-US>*/</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>597</span></u><span
|
||
lang=EN-US> movb $0xfc,%al /*
|
||
pulse reset and A20 low */</span></p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>598</span></u><span
|
||
lang=EN-US> outb %al,$0x64
|
||
// </span>向系统复位引脚和<span lang=EN-US>A20</span>线输出负脉冲。</p>
|
||
|
||
<p class=a><u><span lang=EN-US style='color:blue'>599</span></u><span
|
||
lang=EN-US> die: jmp die
|
||
// </span>停机。</p>
|
||
|
||
<div class=a align=center style='text-align:center'><span lang=EN-US>
|
||
|
||
<hr size=4 width="100%" align=center>
|
||
|
||
</span></div>
|
||
|
||
<p class=MsoNormal><span lang=EN-US> </span></p>
|
||
|
||
</div>
|
||
|
||
</body>
|
||
|
||
</html>
|