📄 keyboard.s
字号:
<a name=L128 href="source/kernel/chr_drv/keyboard.S#L128">128</a> <a name=L129 href="source/kernel/chr_drv/keyboard.S#L129">129</a> lshift:<a name=L130 href="source/kernel/chr_drv/keyboard.S#L130">130</a> orb $0x01,mode<a name=L131 href="source/kernel/chr_drv/keyboard.S#L131">131</a> ret<a name=L132 href="source/kernel/chr_drv/keyboard.S#L132">132</a> unlshift:<a name=L133 href="source/kernel/chr_drv/keyboard.S#L133">133</a> andb $0xfe,mode<a name=L134 href="source/kernel/chr_drv/keyboard.S#L134">134</a> ret<a name=L135 href="source/kernel/chr_drv/keyboard.S#L135">135</a> rshift:<a name=L136 href="source/kernel/chr_drv/keyboard.S#L136">136</a> orb $0x02,mode<a name=L137 href="source/kernel/chr_drv/keyboard.S#L137">137</a> ret<a name=L138 href="source/kernel/chr_drv/keyboard.S#L138">138</a> unrshift:<a name=L139 href="source/kernel/chr_drv/keyboard.S#L139">139</a> andb $0xfd,mode<a name=L140 href="source/kernel/chr_drv/keyboard.S#L140">140</a> ret<a name=L141 href="source/kernel/chr_drv/keyboard.S#L141">141</a> <a name=L142 href="source/kernel/chr_drv/keyboard.S#L142">142</a> caps: testb $0x80,mode<a name=L143 href="source/kernel/chr_drv/keyboard.S#L143">143</a> jne 1f<a name=L144 href="source/kernel/chr_drv/keyboard.S#L144">144</a> xorb $4,leds<a name=L145 href="source/kernel/chr_drv/keyboard.S#L145">145</a> xorb $0x40,mode<a name=L146 href="source/kernel/chr_drv/keyboard.S#L146">146</a> orb $0x80,mode<a name=L147 href="source/kernel/chr_drv/keyboard.S#L147">147</a> set_leds:<a name=L148 href="source/kernel/chr_drv/keyboard.S#L148">148</a> call kb_wait<a name=L149 href="source/kernel/chr_drv/keyboard.S#L149">149</a> movb $0xed,%al /* set leds command */<a name=L150 href="source/kernel/chr_drv/keyboard.S#L150">150</a> outb %al,$0x60<a name=L151 href="source/kernel/chr_drv/keyboard.S#L151">151</a> call kb_wait<a name=L152 href="source/kernel/chr_drv/keyboard.S#L152">152</a> movb leds,%al<a name=L153 href="source/kernel/chr_drv/keyboard.S#L153">153</a> outb %al,$0x60<a name=L154 href="source/kernel/chr_drv/keyboard.S#L154">154</a> ret<a name=L155 href="source/kernel/chr_drv/keyboard.S#L155">155</a> uncaps: andb $0x7f,mode<a name=L156 href="source/kernel/chr_drv/keyboard.S#L156">156</a> ret<a name=L157 href="source/kernel/chr_drv/keyboard.S#L157">157</a> scroll:<a name=L158 href="source/kernel/chr_drv/keyboard.S#L158">158</a> xorb $1,leds<a name=L159 href="source/kernel/chr_drv/keyboard.S#L159">159</a> jmp set_leds<a name=L160 href="source/kernel/chr_drv/keyboard.S#L160">160</a> num: xorb $2,leds<a name=L161 href="source/kernel/chr_drv/keyboard.S#L161">161</a> jmp set_leds<a name=L162 href="source/kernel/chr_drv/keyboard.S#L162">162</a> <a name=L163 href="source/kernel/chr_drv/keyboard.S#L163">163</a> /*<a name=L164 href="source/kernel/chr_drv/keyboard.S#L164">164</a> * curosr-key/numeric keypad cursor keys are handled here.<a name=L165 href="source/kernel/chr_drv/keyboard.S#L165">165</a> * checking for numeric keypad etc.<a name=L166 href="source/kernel/chr_drv/keyboard.S#L166">166</a> */<a name=L167 href="source/kernel/chr_drv/keyboard.S#L167">167</a> cursor:<a name=L168 href="source/kernel/chr_drv/keyboard.S#L168">168</a> subb $0x47,%al<a name=L169 href="source/kernel/chr_drv/keyboard.S#L169">169</a> jb 1f<a name=L170 href="source/kernel/chr_drv/keyboard.S#L170">170</a> cmpb $12,%al<a name=L171 href="source/kernel/chr_drv/keyboard.S#L171">171</a> ja 1f<a name=L172 href="source/kernel/chr_drv/keyboard.S#L172">172</a> jne cur2 /* check for ctrl-alt-del */<a name=L173 href="source/kernel/chr_drv/keyboard.S#L173">173</a> testb $0x0c,mode<a name=L174 href="source/kernel/chr_drv/keyboard.S#L174">174</a> je cur2<a name=L175 href="source/kernel/chr_drv/keyboard.S#L175">175</a> testb $0x30,mode<a name=L176 href="source/kernel/chr_drv/keyboard.S#L176">176</a> jne reboot<a name=L177 href="source/kernel/chr_drv/keyboard.S#L177">177</a> cur2: cmpb $0x01,e0 /* e0 forces cursor movement */<a name=L178 href="source/kernel/chr_drv/keyboard.S#L178">178</a> je cur<a name=L179 href="source/kernel/chr_drv/keyboard.S#L179">179</a> testb $0x02,leds /* not num-lock forces cursor */<a name=L180 href="source/kernel/chr_drv/keyboard.S#L180">180</a> je cur<a name=L181 href="source/kernel/chr_drv/keyboard.S#L181">181</a> testb $0x03,mode /* shift forces cursor */<a name=L182 href="source/kernel/chr_drv/keyboard.S#L182">182</a> jne cur<a name=L183 href="source/kernel/chr_drv/keyboard.S#L183">183</a> xorl %ebx,%ebx<a name=L184 href="source/kernel/chr_drv/keyboard.S#L184">184</a> movb num_table(%eax),%al<a name=L185 href="source/kernel/chr_drv/keyboard.S#L185">185</a> jmp put_queue<a name=L186 href="source/kernel/chr_drv/keyboard.S#L186">186</a> 1: ret<a name=L187 href="source/kernel/chr_drv/keyboard.S#L187">187</a> <a name=L188 href="source/kernel/chr_drv/keyboard.S#L188">188</a> cur: movb cur_table(%eax),%al<a name=L189 href="source/kernel/chr_drv/keyboard.S#L189">189</a> cmpb $'9,%al<a name=L190 href="source/kernel/chr_drv/keyboard.S#L190">190</a> ja ok_cur<a name=L191 href="source/kernel/chr_drv/keyboard.S#L191">191</a> movb $'~,%ah<a name=L192 href="source/kernel/chr_drv/keyboard.S#L192">192</a> ok_cur: shll $16,%eax<a name=L193 href="source/kernel/chr_drv/keyboard.S#L193">193</a> movw $0x5b1b,%ax<a name=L194 href="source/kernel/chr_drv/keyboard.S#L194">194</a> xorl %ebx,%ebx<a name=L195 href="source/kernel/chr_drv/keyboard.S#L195">195</a> jmp put_queue<a name=L196 href="source/kernel/chr_drv/keyboard.S#L196">196</a> <a name=L197 href="source/kernel/chr_drv/keyboard.S#L197">197</a> #if defined(KBD_FR)<a name=L198 href="source/kernel/chr_drv/keyboard.S#L198">198</a> num_table:<a name=L199 href="source/kernel/chr_drv/keyboard.S#L199">199</a> .ascii "789 456 1230."<a name=L200 href="source/kernel/chr_drv/keyboard.S#L200">200</a> #else<a name=L201 href="source/kernel/chr_drv/keyboard.S#L201">201</a> num_table:<a name=L202 href="source/kernel/chr_drv/keyboard.S#L202">202</a> .ascii "789 456 1230,"<a name=L203 href="source/kernel/chr_drv/keyboard.S#L203">203</a> #endif<a name=L204 href="source/kernel/chr_drv/keyboard.S#L204">204</a> cur_table:<a name=L205 href="source/kernel/chr_drv/keyboard.S#L205">205</a> .ascii "HA5 DGC YB623"<a name=L206 href="source/kernel/chr_drv/keyboard.S#L206">206</a> <a name=L207 href="source/kernel/chr_drv/keyboard.S#L207">207</a> /*<a name=L208 href="source/kernel/chr_drv/keyboard.S#L208">208</a> * this routine handles function keys<a name=L209 href="source/kernel/chr_drv/keyboard.S#L209">209</a> */<a name=L210 href="source/kernel/chr_drv/keyboard.S#L210">210</a> func:<a name=L211 href="source/kernel/chr_drv/keyboard.S#L211">211</a> pushl %eax<a name=L212 href="source/kernel/chr_drv/keyboard.S#L212">212</a> pushl %ecx<a name=L213 href="source/kernel/chr_drv/keyboard.S#L213">213</a> pushl %edx<a name=L214 href="source/kernel/chr_drv/keyboard.S#L214">214</a> call _show_stat<a name=L215 href="source/kernel/chr_drv/keyboard.S#L215">215</a> popl %edx<a name=L216 href="source/kernel/chr_drv/keyboard.S#L216">216</a> popl %ecx<a name=L217 href="source/kernel/chr_drv/keyboard.S#L217">217</a> popl %eax<a name=L218 href="source/kernel/chr_drv/keyboard.S#L218">218</a> subb $0x3B,%al<a name=L219 href="source/kernel/chr_drv/keyboard.S#L219">219</a> jb end_func<a name=L220 href="source/kernel/chr_drv/keyboard.S#L220">220</a> cmpb $9,%al<a name=L221 href="source/kernel/chr_drv/keyboard.S#L221">221</a> jbe ok_func<a name=L222 href="source/kernel/chr_drv/keyboard.S#L222">222</a> subb $18,%al<a name=L223 href="source/kernel/chr_drv/keyboard.S#L223">223</a> cmpb $10,%al<a name=L224 href="source/kernel/chr_drv/keyboard.S#L224">224</a> jb end_func<a name=L225 href="source/kernel/chr_drv/keyboard.S#L225">225</a> cmpb $11,%al<a name=L226 href="source/kernel/chr_drv/keyboard.S#L226">226</a> ja end_func<a name=L227 href="source/kernel/chr_drv/keyboard.S#L227">227</a> ok_func:<a name=L228 href="source/kernel/chr_drv/keyboard.S#L228">228</a> cmpl $4,%ecx /* check that there is enough room */<a name=L229 href="source/kernel/chr_drv/keyboard.S#L229">229</a> jl end_func<a name=L230 href="source/kernel/chr_drv/keyboard.S#L230">230</a> movl func_table(,%eax,4),%eax<a name=L231 href="source/kernel/chr_drv/keyboard.S#L231">231</a> xorl %ebx,%ebx<a name=L232 href="source/kernel/chr_drv/keyboard.S#L232">232</a> jmp put_queue<a name=L233 href="source/kernel/chr_drv/keyboard.S#L233">233</a> end_func:<a name=L234 href="source/kernel/chr_drv/keyboard.S#L234">234</a> ret<a name=L235 href="source/kernel/chr_drv/keyboard.S#L235">235</a> <a name=L236 href="source/kernel/chr_drv/keyboard.S#L236">236</a> /*<a name=L237 href="source/kernel/chr_drv/keyboard.S#L237">237</a> * function keys send F1:'esc [ [ A' F2:'esc [ [ B' etc.<a name=L238 href="source/kernel/chr_drv/keyboard.S#L238">238</a> */<a name=L239 href="source/kernel/chr_drv/keyboard.S#L239">239</a> func_table:<a name=L240 href="source/kernel/chr_drv/keyboard.S#L240">240</a> .long 0x415b5b1b,0x425b5b1b,0x435b5b1b,0x445b5b1b<a name=L241 href="source/kernel/chr_drv/keyboard.S#L241">241</a> .long 0x455b5b1b,0x465b5b1b,0x475b5b1b,0x485b5b1b<a name=L242 href="source/kernel/chr_drv/keyboard.S#L242">242</a> .long 0x495b5b1b,0x4a5b5b1b,0x4b5b5b1b,0x4c5b5b1b<a name=L243 href="source/kernel/chr_drv/keyboard.S#L243">243</a> <a name=L244 href="source/kernel/chr_drv/keyboard.S#L244">244</a> #if defined(KBD_FINNISH)<a name=L245 href="source/kernel/chr_drv/keyboard.S#L245">245</a> key_map:<a name=L246 href="source/kernel/chr_drv/keyboard.S#L246">246</a> .byte 0,27<a name=L247 href="source/kernel/chr_drv/keyboard.S#L247">247</a> .ascii "1234567890+'"<a name=L248 href="source/kernel/chr_drv/keyboard.S#L248">248</a> .byte 127,9<a name=L249 href="source/kernel/chr_drv/keyboard.S#L249">249</a> .ascii "qwertyuiop}"<a name=L250 href="source/kernel/chr_drv/keyboard.S#L250">250</a> .byte 0,13,0<a name=L251 href="source/kernel/chr_drv/keyboard.S#L251">251</a> .ascii "asdfghjkl|{"<a name=L252 href="source/kernel/chr_drv/keyboard.S#L252">252</a> .byte 0,0<a name=L253 href="source/kernel/chr_drv/keyboard.S#L253">253</a> .ascii "'zxcvbnm,.-"<a name=L254 href="source/kernel/chr_drv/keyboard.S#L254">254</a> .byte 0,'*,0,32 /* 36-39 */<a name=L255 href="source/kernel/chr_drv/keyboard.S#L255">255</a> .fill 16,1,0 /* 3A-49 */<a name=L256 href="source/kernel/chr_drv/keyboard.S#L256">256</a> .byte '-,0,0,0,'+ /* 4A-4E */<a name=L257 href="source/kernel/chr_drv/keyboard.S#L257">257</a> .byte 0,0,0,0,0,0,0 /* 4F-55 */<a name=L258 href="source/kernel/chr_drv/keyboard.S#L258">258</a> .byte '<<a name=L259 href="source/kernel/chr_drv/keyboard.S#L259">259</a> .fill 10,1,0<a name=L260 href="source/kernel/chr_drv/keyboard.S#L260">260</a> <a name=L261 href="source/kernel/chr_drv/keyboard.S#L261">261</a> shift_map:<a name=L262 href="source/kernel/chr_drv/keyboard.S#L262">262</a> .byte 0,27<a name=L263 href="source/kernel/chr_drv/keyboard.S#L263">263</a> .ascii "!\"#$%&/()=?`"<a name=L264 href="source/kernel/chr_drv/keyboard.S#L264">264</a> .byte 127,9<a name=L265 href="source/kernel/chr_drv/keyboard.S#L265">265</a> .ascii "QWERTYUIOP]^"<a name=L266 href="source/kernel/chr_drv/keyboard.S#L266">266</a> .byte 13,0<a name=L267 href="source/kernel/chr_drv/keyboard.S#L267">267</a> .ascii "ASDFGHJKL\\["<a name=L268 href="source/kernel/chr_drv/keyboard.S#L268">268</a> .byte 0,0<a name=L269 href="source/kernel/chr_drv/keyboard.S#L269">269</a> .ascii "*ZXCVBNM;:_"<a name=L270 href="source/kernel/chr_drv/keyboard.S#L270">270</a> .byte 0,'*,0,32 /* 36-39 */<a name=L271 href="source/kernel/chr_drv/keyboard.S#L271">271</a> .fill 16,1,0 /* 3A-49 */<a name=L272 href="source/kernel/chr_drv/keyboard.S#L272">272</a> .byte '-,0,0,0,'+ /* 4A-4E */<a name=L273 href="source/kernel/chr_drv/keyboard.S#L273">273</a> .byte 0,0,0,0,0,0,0 /* 4F-55 */<a name=L274 href="source/kernel/chr_drv/keyboard.S#L274">274</a> .byte '><a name=L275 href="source/kernel/chr_drv/keyboard.S#L275">275</a> .fill 10,1,0<a name=L276 href="source/kernel/chr_drv/keyboard.S#L276">276</a> <a name=L277 href="source/kernel/chr_drv/keyboard.S#L277">277</a> alt_map:<a name=L278 href="source/kernel/chr_drv/keyboard.S#L278">278</a> .byte 0,0<a name=L279 href="source/kernel/chr_drv/keyboard.S#L279">279</a> .ascii "\0@\0$\0\0{[]}\\\0"<a name=L280 href="source/kernel/chr_drv/keyboard.S#L280">280</a> .byte 0,0<a name=L281 href="source/kernel/chr_drv/keyboard.S#L281">281</a> .byte 0,0,0,0,0,0,0,0,0,0,0<a name=L282 href="source/kernel/chr_drv/keyboard.S#L282">282</a> .byte '~,13,0<a name=L283 href="source/kernel/chr_drv/keyboard.S#L283">283</a> .byte 0,0,0,0,0,0,0,0,0,0,0<a name=L284 href="source/kernel/chr_drv/keyboard.S#L284">284</a> .byte 0,0<a name=L285 href="source/kernel/chr_drv/keyboard.S#L285">285</a> .byte 0,0,0,0,0,0,0,0,0,0,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -