#include "x16.h"
#include "mem.h"

TEXT e820(SB), $0
       MOVL bx+4(SP), BX
       MOVL p+8(SP), DI
       MOVL $0xE820, AX
       MOVL $0x534D4150, DX
       CALL rmode16(SB)
       LWI(24, rCX)
       BIOSCALL(0x15)
       JC _bad
       CALL16(pmode32(SB))
       CMPB CL, $24
       JZ _ret
       MOVL $1, AX
       MOVL p+8(SP), DI
       MOVL AX, 20(DI)
_ret:
       MOVL BX, AX
       RET
_bad:
       CALL16(pmode32(SB))
       XORL AX, AX
       MOVL p+8(SP), DI
       MOVL AX, 0(DI)
       MOVL AX, 4(DI)
       MOVL AX, 8(DI)
       MOVL AX, 12(DI)
       MOVL AX, 16(DI)
       MOVL AX, 20(DI)
       RET