It looks sane to me. If you convert the values to hex it is a lot easier to see.
mmap->lengthLow = 654336
mmap->lengthHigh = 0
mmap->baseAddrLow = 0
mmap->baseAddrHigh = 0
BaseAddr in hex as a 64-bit value is 0x0000000000000000
Length in hex as a 64-bit value is 0x000000000009FC00
This makes sense since memory address 0x0 to 0x9FC00 represents the usable memory under 1MB. Video memory and BIOS starts from 0xA0000 to 0x100000. The area between 0x9FC00 and 0xA0000 is unusable because it is the Extended BIOS Data Area. That looks reasonable.
mmap->baseAddrLow = 1048576
mmap->baseAddrHigh = 0
mmap->lengthLow = 133038080
mmap->lengthHigh = 0
BaseAddr in hex as a 64-bit value is 0x0000000000100000
Length in hex as a 64-bit value is 0x0000000007EE0000
This means usable memory between 0x100000 and 7FE0000 (0x7EE0000+0x100000)
This looks reasonable for a system that probably has 128MB ram.
The
multiboot spec says this about the memory map entries:
+-------------------+
-4 | size |
+-------------------+
0 | base_addr |
8 | length |
16 | type |
+-------------------+
where ‘size’ is the size of the associated structure in bytes, which can be greater than the minimum of 20 bytes. ‘base_addr’ is the starting address. ‘length’ is the size of the memory region in bytes. ‘type’ is the variety of address range represented, where a value of 1 indicates available ram, value of 3 indicates usable memory holding ACPI information, value of 4 indicates reserved memory which needs to be preserved on hibernation, value of 5 indicates a memory which is occupied by defective RAM modules and all other values currently indicated a reserved area.