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

使用 INT 15 中断

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

使用0x92端口

/*
 * 打开
 */
inb $0x92
andb    $(~0x03), %al
orb $0x02, %al
outb    $0x92
/*
 * 关闭
 */
inb $0x92
andb    $(~$0x02), %al
outb    $0x92

操作键盘控制器

    call    gate_a20_flush_keyboard_buffer

    movb    $0xd1, %al
    outb    $0x64
4:
    inb $0x64
    andb    $0x02, %al
    jnz 4b

    movb    $0xdd, %al
    testb   %dl, %dl
    jz  5f
    orb $0x02, %al
5:  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_buffer

gate_a20_flush_keyboard_buffer:
    inb $0x64
    andb    $0x02, %al
    jnz gate_a20_flush_keyboard_buffer
2:
    inb $0x64
    andb    $0x01, %al
    jz  3f
    inb $0x60
    jmp 2b
3:
    ret
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值