ref: e81c54ba2ecc673a4d5f8aed0e9b52841fe07b0d
dir: /os/boot/pc/apm.s/
#include "x16.h" #include "mem.h" TEXT apm(SB), $0 MOVL id+4(SP), BX CALL rmode16(SB) PUSHR(rBX) LWI(0x5300, rAX) BIOSCALL(0x15) POPR(rBX) JC noapm PUSHR(rBX) LWI(0x5304, rAX) BIOSCALL(0x15) POPR(rBX) CLC /* connect */ LWI(0x5303, rAX) BIOSCALL(0x15) JC noapm OPSIZE; PUSHR(rSI) OPSIZE; PUSHR(rBX) PUSHR(rDI) PUSHR(rDX) PUSHR(rCX) PUSHR(rAX) LWI(CONFADDR, rDI) /* * write APM data. first four bytes are APM\0. */ LWI(0x5041, rAX) STOSW LWI(0x004d, rAX) STOSW LWI(8, rCX) apmmove: POPR(rAX) STOSW LOOP apmmove noapm: CALL16(pmode32(SB)) RET