Even this slow old architecture is actually still really quick. You’ll often need to burn off some clock cycles between operations just so you can see the output. Here is a little subroutine I wrote for the 1802 that is adjustable and can be shoehorned into code you may have already written. You can hook it write into many of the early programs in Tom Pittman’s book “A Short Course in Programming“. Pretty much anything that has you pushing the “I” key for it to move forward.
0020 F81F LDI The second byte determines the delay amount
0022 B4 PHI R4 Puts the delay counter into R4
0023 32XX BZ XX Branch if D=0, second byte directs back.
0025 94 GHI R4 Puts the counter from R4 into D for comparison
0026 24 DEC R4 Decrements R4 by one
0027 3020 BR XX Branches back to check if D is zero.
Here is an example where I have hooked the delay back into my hex counter program so that you don’t have to push “I” for the counter to increment. I have left the old code structure in tact so you can see the differences. I also changed the counter location in memory to 0030 but this is arbitrary.
TinyELF Hex autocounter
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 F830 LDI Set D to 30
0008 A2 PLO R2 Set R2 to 30
0009 52 STR Clear 0030 byte
000A E2 SEX R2 Set X to R2
000B 3020 BR Instead of waiting for “I”, branch to delay
000D 13 INC R3 Count up
000E 83 GLO R3 Set D to the current count
000F 52 STR R2 Store counter value in 0030
0010 64 OUT 4 Put contents of 0030 on display
0011 22 DEC R2 Keep X pointing at 0030
0012 C4C4 NOP No need to wait for “i” to be lifted now
0014 300B BR Loop back to where wait for “I” wastimer routine;
0020 F85F LDI The second byte determines the delay amount
0022 B4 PHI R4 Puts the delay counter into R4
0023 320D BZ Branch when D=0 back to AFTER the branch to 0020
0024 94 GHI R4 Puts the counter from R4 into D for comparison
0025 24 DEC R4 Decrements R4 by one
0027 3023 BR Branches back to check if D is zero.