diff --git a/monitor.c b/monitor.c index c3ef099bda..e38c86e1a3 100644 --- a/monitor.c +++ b/monitor.c @@ -1185,6 +1185,25 @@ static void do_ioport_read(Monitor *mon, int count, int format, int size, suffix, addr, size * 2, val); } +static void do_ioport_write(Monitor *mon, int count, int format, int size, + int addr, int val) +{ + addr &= IOPORTS_MASK; + + switch (size) { + default: + case 1: + cpu_outb(NULL, addr, val); + break; + case 2: + cpu_outw(NULL, addr, val); + break; + case 4: + cpu_outl(NULL, addr, val); + break; + } +} + static void do_boot_set(Monitor *mon, const char *bootdevice) { int res; diff --git a/qemu-monitor.hx b/qemu-monitor.hx index 62edbcde75..70e24758cc 100644 --- a/qemu-monitor.hx +++ b/qemu-monitor.hx @@ -306,6 +306,11 @@ STEXI Read I/O port. ETEXI + { "o", "/ii", do_ioport_write, + "/fmt addr value", "I/O port write" }, +STEXI +Write to I/O port. +ETEXI { "sendkey", "si?", do_sendkey, "keys [hold_ms]", "send keys to the VM (e.g. 'sendkey ctrl-alt-f1', default hold time=100 ms)" },