Question about which tools to use, bugs, the best way to implement a function, etc should go here. Don't forget to see if your question is answered in the wiki first! When in doubt post here.
It gets stuck on "while( (inportw(fixedadt->PM1a_control_block) & 1) == 0);".
FADT is correct (I checked it in GDB).
outportb works (I didn't check it but my OS is quite a bit advanced already...).
sleep works with 1/100 second precision.
What may go wrong?
I will add that I use qemu and ACPI implemented in it is in version 1.
Did you try printing the SMI_command_port, acpi_enable, and PM1a_control_block values to see if you're reading them correctly? (In my version of QEMU, they are 0xB2, 0xF1, and 0x604 respectively.)
You didn't mention if your inportw() function works.