Commit 3440557b6d979e0dddddb8c2440d7bf4375e80a7

Authored by bellard
1 parent d329a6fb

ioport read command


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@912 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 51 additions and 5 deletions
monitor.c
... ... @@ -630,6 +630,35 @@ static void do_send_key(const char *string)
630 630 }
631 631 }
632 632  
  633 +static void do_ioport_read(int count, int format, int size, int addr, int has_index, int index)
  634 +{
  635 + uint32_t val;
  636 + int suffix;
  637 +
  638 + if (has_index) {
  639 + cpu_outb(NULL, addr & 0xffff, index & 0xff);
  640 + addr++;
  641 + }
  642 + addr &= 0xffff;
  643 +
  644 + switch(size) {
  645 + default:
  646 + case 1:
  647 + val = cpu_inb(NULL, addr);
  648 + suffix = 'b';
  649 + break;
  650 + case 2:
  651 + val = cpu_inw(NULL, addr);
  652 + suffix = 'w';
  653 + break;
  654 + case 4:
  655 + val = cpu_inl(NULL, addr);
  656 + suffix = 'l';
  657 + break;
  658 + }
  659 + term_printf("port%c[0x%04x] = %#0*x\n",
  660 + suffix, addr, size * 2, val);
  661 +}
633 662  
634 663 static term_cmd_t term_cmds[] = {
635 664 { "help|?", "s?", do_help,
... ... @@ -666,6 +695,9 @@ static term_cmd_t term_cmds[] = {
666 695 "/fmt addr", "physical memory dump starting at 'addr'", },
667 696 { "p|print", "/i", do_print,
668 697 "/fmt expr", "print expression value (use $reg for CPU register access)", },
  698 + { "i", "/ii.", do_ioport_read,
  699 + "/fmt addr", "I/O port read" },
  700 +
669 701 { "sendkey", "s", do_send_key,
670 702 "keys", "send keys to the VM (e.g. 'sendkey ctrl-alt-f1')" },
671 703 { NULL, NULL, },
... ... @@ -1285,12 +1317,23 @@ static void term_handle_command(const char *cmdline)
1285 1317 int val;
1286 1318 while (isspace(*p))
1287 1319 p++;
1288   - if (*typestr == '?') {
  1320 + if (*typestr == '?' || *typestr == '.') {
1289 1321 typestr++;
1290   - if (*p == '\0')
1291   - has_arg = 0;
1292   - else
1293   - has_arg = 1;
  1322 + if (*typestr == '?') {
  1323 + if (*p == '\0')
  1324 + has_arg = 0;
  1325 + else
  1326 + has_arg = 1;
  1327 + } else {
  1328 + if (*p == '.') {
  1329 + p++;
  1330 + while (isspace(*p))
  1331 + p++;
  1332 + has_arg = 1;
  1333 + } else {
  1334 + has_arg = 0;
  1335 + }
  1336 + }
1294 1337 if (nb_args >= MAX_ARGS)
1295 1338 goto error_args;
1296 1339 args[nb_args++] = (void *)has_arg;
... ... @@ -1369,6 +1412,9 @@ static void term_handle_command(const char *cmdline)
1369 1412 case 5:
1370 1413 cmd->handler(args[0], args[1], args[2], args[3], args[4]);
1371 1414 break;
  1415 + case 6:
  1416 + cmd->handler(args[0], args[1], args[2], args[3], args[4], args[5]);
  1417 + break;
1372 1418 default:
1373 1419 term_printf("unsupported number of arguments: %d\n", nb_args);
1374 1420 goto fail;
... ...