diff options
author | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2005-06-04 20:15:57 +0000 |
---|---|---|
committer | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2005-06-04 20:15:57 +0000 |
commit | e4cf1adc806f24d26756fa828e0d7b515a06752d (patch) | |
tree | 693bab6068c9927e64a22f131af5f0b107712613 /monitor.c | |
parent | 72cc6cfeef616f443761365c294a86057950f9bd (diff) |
added sum command
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1434 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'monitor.c')
-rw-r--r-- | monitor.c | 18 |
1 files changed, 18 insertions, 0 deletions
@@ -562,6 +562,22 @@ static void do_print(int count, int format, int size, unsigned int valh, unsigne term_printf("\n"); } +static void do_sum(uint32_t start, uint32_t size) +{ + uint32_t addr; + uint8_t buf[1]; + uint16_t sum; + + sum = 0; + for(addr = start; addr < (start + size); addr++) { + cpu_physical_memory_rw(addr, buf, 1, 0); + /* BSD sum algorithm ('sum' Unix command) */ + sum = (sum >> 1) | (sum << 15); + sum += buf[0]; + } + term_printf("%05d\n", sum); +} + typedef struct { int keycode; const char *name; @@ -906,6 +922,8 @@ static term_cmd_t term_cmds[] = { "keys", "send keys to the VM (e.g. 'sendkey ctrl-alt-f1')" }, { "system_reset", "", do_system_reset, "", "reset the system" }, + { "sum", "ii", do_sum, + "addr size", "compute the checksum of a memory region" }, { NULL, NULL, }, }; |