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 diff or merge anything on its own. look forward to more hand-merging and nonsense diffs