I’ve been trying to figure out how to do this nearly since the beginning. This program represents a huge milestone for me. It’s the first program that I have created from scratch that does something sort of useful.
It’s amazing how much debugging can go into something so simple as a hex counter. At first I had to press “I” three times for the counter to start moving upward. Turns out I had a few commands out of order. Also, I had a bug where the counter location in memory would not have been properly reset to zero if R2 didn’t have a residual value in it. Then I had some other misplaced bytes that were confusing me a bit. I think I have all the kinks worked out now so I’d like to present my hex counter:
0000 6400 OUT 4 clear hex display
0002 90 GHI R0 zero the accumulator
0003 B2 PHI R2 Set hi byte to zero
0004 B3 PHI R3 Set hi byte to zero
0005 A3 PLO R3 Set lo byte to zero
0006 F820 LDI Set D to 20
0008 A2 PLO R2 Set R2 to 20
0009 52 STR Clear 0020 byte
000A E2 SEX R2 Set X to R2
000B 3F0B BN4 Wait for “I” to be pushed
000D 13 INC R3 Count up
000E 83 GLO R3 Set D to the current count
000F 52 STR R2 Store counter value in 0020
0010 64 OUT 4 Put contents of 0020 on display
0011 22 DEC R2 Keep X pointing at 0020
0012 3712 B4 Wait for “I” to be lifted
0014 300B BR Loop back to wait for “I”
Please excuse the formatting, it’s late. Anyhow, the program sets itself up by clearing the display, zeroing R3, setting R2 to 20, clearing the byte at memory location 20 and of course setting X to R2. R2 does double duty in this program. It points X at byte 0020 in memory and it also tells the STR instruction where to store the value of D.
After the initial setup, we jump into the loop. First we increment R3(the counter). Next we stick the counter value in D so we can then store D at memory location 0020. Then we display the value of 0020 since that is where R2 is pointing. The 64 OUT 4 instruction incremented the value in R2 so we decrement it immediately so R2 still points at the correct location and doesn’t leak memory. If you want a good demo of a memory leak, change the value of 0011 from 22 to C4 and then run the program.
I know this program isn’t rocket science but give me a break, I’m still in chapter 4. Looks like I still have a LONG ways to go to program in “hello world” even…
If you like the content on this site, please support it by using this link to order from Amazon. You know you were going to go there and buy stuff anyhow so why not help me pay the hosting bill.