added sum command
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Sat, 4 Jun 2005 20:15:57 +0000 (20:15 +0000)
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Sat, 4 Jun 2005 20:15:57 +0000 (20:15 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1434 c046a42c-6fe2-441c-8c8c-71466251a162

monitor.c

index b9de029..285508e 100644 (file)
--- a/monitor.c
+++ b/monitor.c
@@ -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, }, 
 };