Major refactor, split logic into separate classes, cleaned up a bit, added some functionality.  You must include the program.asm file in the same directory you are running from or write your own file.