Merge mrwint/master into kanzure/master

mrwint forked from 94d4c89e093b76a0964114bd7a370046e70e965e and never made a pull request. this fixes merge conflicts between mrwint/master and kanzure/master since then

main.asm is way too big for git to reasonably merge anything on its own. expect more of this