display hardware not properly decoded
ricknun opened this issue · 3 comments
The ET-3400 manual, page 87, "Memory Decoding", "DISPLAY" shows address $C1GS (diGit nibble, Segment nibble) controls the 6 7-segment displays with address bits 3 and 7 "don't care". That means an emulator must decode either 0 or 1 on either of those addresses as addressing the LED. This emulator doesn't do that, as shown in the attached display_test.lst(.txt for GitHub) and display_tst.s19(.txt for GitHub) files. When run on real ET-3400 hardware the program always shows a single segment lit (with no all-blank display ever) as it writes to each possible address. More details are in the listing file.
display_test.txt
display_tst.txt
Edit after initial post: Error in display_test.asm(.txt) -- Change "digit 000 (right) to 110 (left)" to "digit 001 (right) to 110 (left)".
In an extreme coincidence, last night (the day after filing this issue) I stumbled on this web page.
http://www.science.smith.edu/~jfrankli/270s02/labs/lab11.htm
The "Mystery Program" at the bottom of the page won't run on v0.2 Beta because it writes to display addresses "C1 68 ... C1 58 ... C1 48 ... C1 38 ... C1 28". It counts on the "don't care" segment bit being a 1 (the MS bit of the "8" values). Changing those "8" nibbles to "0" makes the program work on the emulator, but that shouldn't be necessary.
Yes that is what the output of "Mystery Program" should be. (I emailed the author asking her what the intended message was because it is such an odd display. Also I got a different image in my GitHub notification email and assume it got edited later here on the GitHub website.) But be sure to try display_tst.txt (after changing the name to .s19). It tries all 4 ways the 2 "don't care" bits should be recognized and should always be displaying a single LED on somewhere and never an all-off display. By the way, your older C# emulator works fine with the "Mystery Program" but fails display_tst.s19. So all 4 decode possibilities need to be verified.