+ mov $memdet_e820_msg, %esi
+ call putstr
+ call detect_mem_e820
+ jnc memdet_done
+ mov $rdfail_msg, %esi
+ call putstr
+
+ mov $memdet_e801_msg, %esi
+ call putstr
+ call detect_mem_e801
+ jnc memdet_done
+ mov $rdfail_msg, %esi
+ call putstr
+
+ mov $memdet_88_msg, %esi
+ call putstr
+ call detect_mem_88
+ jnc memdet_done
+ mov $rdfail_msg, %esi
+ call putstr
+
+ # just panic...
+ mov $memdet_fail_msg, %esi
+ call putstr
+0: hlt
+ jmp 0b
+
+memdet_done:
+ mov $rdok_msg, %esi
+ call putstr
+ ret
+
+memdet_fail_msg: .ascii "Failed to detect available memory!\n"
+ .ascii "Please file a bug report: https://github.com/jtsiomb/pcboot/issues\n"
+ .asciz " or contact me through email: nuclear@member.fsf.org\n"
+memdet_e820_msg: .asciz "Detecting RAM (BIOS 15h/0xe820)... "
+memdet_e801_msg: .asciz "Detecting RAM (BIOS 15h/0xe801)... "
+memdet_88_msg: .asciz "Detecting RAM (BIOS 15h/0x88, max 64mb)... "
+
+ # detect extended memory using BIOS call 15h/e820
+detect_mem_e820:
+ movl $0, boot_mem_map_size
+