Other than the display, it seems to be working. RAM[0F:08] holds the displayed digits, with 0A=blank, 0B=E, 0C=+, 0D=-, OE=X and 0F=/. Digit 6 cycles through X / + - until you hit one of those keys, then a problem is shown using that operator. If you type in a wrong answer it shows E in the rightmost digit and gives you another chance. If you get it wrong again, it shows the correct answer in the last 2 digits. After 10 problems, it shows how many you got right, then goes back to cycling X / + -.
I put a breakpoint on LQID and D and G and Q all look OK. It looks like the segment data for each digit is being or'ed with the segment data for the previous digit, and the segment data for the rightmost digit is being or'ed with the segment data for the leftmost digit.
Other than whatever's not working with the display, the 3rd digit from the left should be the "operator" digit instead of a normal 7-segment digit, and the equals sign at the 3rd from the right should be masked with 0x41 since the physical display only has segments A and G connected, but they are illuminating it with the data for "3", since there wasn't any more room in the output PLA. And the green "right" LED doesn't light.