私はちょうど私の16ビットオペレーティングシステムを書き終えましたが、ユーザーが押したキーを知るためにint 0x16を使用しました。今では自分のキーボードドライバを書いていますが、割り込みを使用したくありません。 (私はロングモードに入ることができるように)。私は、ATとXTという2つのスキャンコードがあることに気付きました。 NASM x86アセンブリでコンピュータがどのキーボードを使用するかは、どのようにして決めることができますか?
OSを起動するときにキーを押して、ポート0x60のスキャンコードを使用することをユーザーに求める必要がありますか?
例:キー - ATと0x1eが表示のため0x1cに(作る)(作る)XT
ためのが、Linuxが.......
コンピューターにXT/ATキーボードが組み込まれているかどうかを確認する方法はありますか?
は、私は、次のコードを使用し、仮想ボックスを発見することを行いません。 XTキーボードを使用しています....
[org 0x2e00] mov bx, 0x1000 mov ds, bx ;The program is loaded at 0x12e00 or 1000:2e00 by the operating system xor ax, ax ;Set AX to zero mov bl, 0x0e ;Set text color loop: ;Main loop in al, 0x60 ;Read all ports and display them mov cx, ax call hex_print ;Print content of the port in hex in al, 0x61 mov cx, ax call hex_print in al, 0x62 mov cx, ax call hex_print in al, 0x63 mov cx, ax call hex_print in al, 0x64 call hex_print call com_cls ;Clear the screen after printing content jmp loop ;Jump to loop ;Print hex values;;;;;;;;;;;;;;;;; hex_print: push ax push cx mov ah, 0x0e mov al, ' ' int 0x10 mov al, '0' int 0x10 mov al, 'x' int 0x10 hex_print_start: mov al, ch and al, 0xf0 call hex_map int 0x10 shl cx, 0x04 mov al, ch and al, 0xf0 call hex_map int 0x10 shl cx, 0x04 mov al, ch and al, 0xf0 call hex_map int 0x10 shl cx, 0x04 mov al, ch and al, 0xf0 call hex_map int 0x10 hex_print_end: pop cx pop ax ret hex_map: cmp al, 0x00 jne zero_end mov al, '0' ret zero_end: cmp al, 0x10 jne one_end mov al, '1' ret one_end: cmp al, 0x20 jne two_end mov al, '2' ret two_end: cmp al, 0x30 jne three_end mov al, '3' ret three_end: cmp al, 0x40 jne four_end mov al, '4' ret four_end: cmp al, 0x50 jne five_end mov al, '5' ret five_end: cmp al, 0x60 jne six_end mov al, '6' ret six_end: cmp al, 0x70 jne seven_end mov al, '7' ret seven_end: cmp al, 0x80 jne eight_end mov al, '8' ret eight_end: cmp al, 0x90 jne nine_end mov al, '9' ret nine_end: cmp al, 0xa0 jne a_end mov al, 'A' ret a_end: cmp al, 0xb0 jne b_end mov al, 'B' ret b_end: cmp al, 0xc0 jne c_end mov al, 'C' ret c_end: cmp al, 0xd0 jne d_end mov al, 'D' ret d_end: cmp al, 0xe0 jne e_end mov al, 'E' ret e_end: cmp al, 0xf0 jne f_end mov al, 'F' ret f_end: ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;The "cls" command;;;;;;;;;;;;;;;;;;;;;;;;;;;; com_cls: push ax push bx push cx push dx mov ax, 0x0700 ; function 07, AL=0 means scroll whole window mov bh, 0x00 ; character attribute = black mov cx, 0x0000 ; row = 0, col = 0 mov dx, 0x1e54 ; row = 30 (0x1e), col = 79 (0x4f) int 0x10 ; call BIOS video interrupt mov ah, 0x02 ;function 02, set curser position mov dx, 0x00 int 0x10 pop dx pop cx pop bx pop ax ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ret
スキャンコード0x9E:XTキーボードで '' キーのブレイク!
ご協力いただきありがとうございます。
XTキーボードをテストするのはどうですか?それは時代遅れです! – Fifoernik
@FifoernikバーチャルボックスがXTキーボードを使用しているようです – RainingComputers
バーチャルボックスでキーボードを変更できるかどうかを確認します。キーボードは1種類しか扱わないほうがずっと簡単です。 – Fifoernik