⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 int16.c

📁 freedos32的源代码
💻 C
字号:
/* DPMI Driver for FD32: int 0x16 services * by Luca Abeni * * This is free software; see GPL.txt */#include <ll/i386/hw-data.h>#include <ll/i386/hw-instr.h>#include <ll/i386/hw-func.h>#include <ll/i386/mem.h>#include <ll/i386/string.h>#include <ll/i386/error.h>#include <ll/i386/cons.h>#include <logger.h>#include <devices.h>#include <kernel.h>#include "rmint.h"#define BIOSKEY_NON_BLOCKING 0#define BIOSKEY_BLOCKING     1/* Keyboard driver handle and ID */static void *kbddev_id = NULL;static fd32_request_t *kbdreq = NULL;static WORD get_keycode(int mode){  int res;  fd32_read_t R;  WORD c;  R.Size = sizeof(fd32_read_t);  R.DeviceId = kbddev_id;  R.Buffer = &c;  if (mode == BIOSKEY_NON_BLOCKING) {    R.BufferBytes = 0;      /* 0 is non-blocking read BIOS keycode */  } else if (mode == BIOSKEY_BLOCKING) {    R.BufferBytes = -1;     /* -1 is blocking read BIOS keycode */  }  /* Note: Directly get the keycode ... */  res = kbdreq(FD32_READ, &R);  if (res == 0) {    return 0;  }  return c;}int keybbios_int(union rmregs *r){  WORD keycode;    if (kbdreq == NULL) {    int res = fd32_dev_search("kbd");    if (res < 0) {      RMREGS_SET_CARRY;      return 1;    }    fd32_dev_get(res, &kbdreq, &kbddev_id, NULL, 0);  }  switch (r->h.ah) {    case 0x00:    case 0x10:      keycode = get_keycode(BIOSKEY_BLOCKING);      if (keycode == 0) {        r->x.flags |= 0x40;      } else {        r->x.flags &= ~0x40;        r->x.ax = keycode;      }      RMREGS_CLEAR_CARRY;      return 0;    case 0x01:    case 0x11:      keycode = get_keycode(BIOSKEY_NON_BLOCKING);      if (keycode == 0) {        r->x.flags |= 0x40;      } else {        r->x.flags &= ~0x40;        r->x.ax = keycode;      }      RMREGS_CLEAR_CARRY;      return 0;    case 0x02:    case 0x12:      /* TODO: Should define new keyboard function number */      r->x.ax = kbdreq(FD32_GETATTR, NULL);      RMREGS_CLEAR_CARRY;      return 0;    default:      error("Unimplemeted INT!!!\n");      message("INT 16, AX = 0x%x\n", r->x.ax);      fd32_abort();  }  return 1;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -