PIC AVR H8統合スレ

このエントリーをはてなブックマークに追加
574774ワット発電中さん
ちなみにKBDの割り込み処理手順(リアルモード)を確認してみた。
C:\>debug
-d 0000:0024 0027//処理ルーチン先アドレス参照ベクタテーブル(IDT)アドレス。
0000:0020 65 00 5D D0
すなはち、KBD割り込みの処理はエンディアンして、D05D:0065から書かれてるってこと。この領域はメインメモリ領域でOSが記述してそうだけど、それだとC-MOSセットアップでキーボード使えなくなるから、おそらくこの領域はNV-RAMもしくはSUPERI/Oチップ。
-u D05D:0065
D05D:0065 1E PUSH DS
D05D:0066 50 PUSH AX
D05D:0067 53 PUSH BX
D05D:0068 51 PUSH CX
D05D:0069 31C0 XOR AX,AX
D05D:006B 8ED8 MOV DS,AX
D05D:006D 3E DS:
D05D:006E 8B1E1C04 MOV BX,[041C]
D05D:0072 9C PUSHF
D05D:0073 9A2607B60A CALL 0AB6:0726
CPUのレジスタをスタックに一斉退避してる(PUSH)。で、FarCALLで0AB6:0726へサブルーチン呼び。
-u 0AB6:0726 0729
0AB6:0726 EB01 JMP 0729//ただNEARCALL :0729へのジャンプ
以下続く↓
575つづき:04/02/08 16:39 ID:tnsqzK4u
-u 0AB6:0729
0AB6:0729 55 PUSH BP
0AB6:072A 50 PUSH AX
0AB6:072B 53 PUSH BX
0AB6:072C 51 PUSH CX
0AB6:072D 52 PUSH DX
0AB6:072E 56 PUSH SI
0AB6:072F 57 PUSH DI
0AB6:0730 1E PUSH DS
0AB6:0731 06 PUSH ES
0AB6:0732 FC CLD
0AB6:0733 BB4000 MOV BX,0040
0AB6:0736 8EDB MOV DS,BX
0AB6:0738 2E CS:
0AB6:0739 8B2E8212 MOV BP,[1282]
0AB6:073D B0AD MOV AL,AD
0AB6:073F E8E007 CALL 0F22
ここでも一斉退避。
-u 0AB6:0F22
0AB6:0F22 9C PUSHF
0AB6:0F23 FA CLI
0AB6:0F24 F7C50006 TEST BP,0600
0AB6:0F28 7412 JZ 0F3C
0AB6:0F2A 3CAE CMP AL,AE
0AB6:0F2C 7519 JNZ 0F47
0AB6:0F2E 50 PUSH AX
0AB6:0F2F E461 IN AL,61
0AB6:0F31 8AE0 MOV AH,AL
0AB6:0F33 0C80 OR AL,80
0AB6:0F33 0C80 OR AL,80
0AB6:0F35 E661 OUT 61,AL
0AB6:0F37 86E0 XCHG AH,AL
0AB6:0F39 E661 OUT 61,AL
0AB6:0F3B 58 POP AX
0AB6:0F3C F7C56000 TEST BP,0060
0AB6:0F40 7405 JZ 0F47
0AB6:0F42 E8CA00 CALL 100F
-u 0AB6:100F
0AB6:100F 50 PUSH AX
0AB6:1010 51 PUSH CX
0AB6:1011 B9E303 MOV CX,03E3
0AB6:1014 E461 IN AL,61
0AB6:1016 2410 AND AL,10
0AB6:1018 3AC4 CMP AL,AH
0AB6:101A 74F8 JZ 1014
0AB6:101C 8AE0 MOV AH,AL
0AB6:101E E464 IN AL,64
ここでやっとIN AL,64が出てきた。I/Oアドレス64hはATキーボードのステータスレジスタでその値を読み込んでる。
結局BIOSが割り込みルーチンの処理するんじゃなくNV-RAMもしくはSUPERI/Oチップがやってる。