[体系架构][x86]A20地址线的操作

来源:互联网 发布:ipad绘图软件 编辑:程序博客网 时间:2024/05/16 00:25

使用 INT 15 中断

/* * 关闭A20 * 返回结果: *    成功:CF=0 *         AH=0 *    失败:CF=1 *         AH=01   键盘控制器处于secur模式 *           =86H  功能不支持 */movw    $0x2400, %axint 0x15
/* * 打开A20 * 返回结果: *    成功:CF=0 *         AH=0 *    失败:CF=1 *         AH=01   键盘控制器处于secur模式 *           =86H  功能不支持 */movw    $0x2401, %axint 0x15
/* * 获取A20状态 * 返回结果: *    成功:CF=0 *         AH=0 *         AL=0    已关闭 *           =1    已打开 *    失败:CF=1 *         AH=01   键盘控制器处于secur模式 *           =86H  功能不支持 */movw    $0x2402, %axint 0x15

使用0x92端口

/* * 打开 */inb $0x92andb    $(~0x03), %alorb $0x02, %aloutb    $0x92
/* * 关闭 */inb $0x92andb    $(~$0x02), %aloutb    $0x92

操作键盘控制器

    call    gate_a20_flush_keyboard_buffer    movb    $0xd1, %al    outb    $0x644:    inb $0x64    andb    $0x02, %al    jnz 4b    movb    $0xdd, %al    testb   %dl, %dl    jz  5f    orb $0x02, %al5:  outb    $0x60    call    gate_a20_flush_keyboard_buffer    /* output a dummy command (USB keyboard hack) */    movb    $0xff, %al    outb    $0x64    call    gate_a20_flush_keyboard_buffergate_a20_flush_keyboard_buffer:    inb $0x64    andb    $0x02, %al    jnz gate_a20_flush_keyboard_buffer2:    inb $0x64    andb    $0x01, %al    jz  3f    inb $0x60    jmp 2b3:    ret
0 0
原创粉丝点击