### Site Tools

base:making_a_counter

# Differences

This shows you the differences between two versions of the page.

 — base:making_a_counter [2015-04-17 04:32] (current) Line 1: Line 1: + A quite nifty example of how to make an increasing decimal counter with a flexible amount of digits. + It's possible to create a counter with up to 255 digits. + Useful for counting scores in games, for example. + + <​code>​ + ; Counter code + ; [c]2007 Scout/​Silicon Ltd. + + numdigits = 6 + + + *=\$c000 + + ldx #0 + txa         ; A=X=0 + - + sta tellertabel,​x ​  ; erase the countertable + inx + cpx #​numdigits ​     ; for the amount of desired digits + bne - + + loop + + ldx #0 + - + lda tellertabel+1,​x ​  ; read the contents of the countertable + clc + adc #\$30      ; add 48(decimal) -> in petscii, 48=0, 49=1 etc + sta \$0400,​x ​     ; poke them in the upperleft of the screen (address 1024) + inx + cpx #numdigits + bne - + + jsr teller ​     ; do the counter + + jmp loop      ; do the loop + + ;​---------------------------------------------------------------- + + teller + ldx #​numdigits ​     ; go from back to front in the table + - + lda tellertabel,​x ​ + cmp #9         ; is the current digit 9? + beq +         ; yes, jump to the + branch ​ + inc tellertabel,​x ​  ; no, keep on counting + rts         ; back to the mainroutine + + + lda #0         ; put current digit to 0 + sta tellertabel,​x ​  ; in the countertable + dex         ; go 1 back in the table + bne -         ; and do the rest of the remaining digits + rts         ; back to the main routine + ;​------------------------------------------------------------------- + + .align 256 + tellertabel ​  ; 256 bytes reserved for the countertable ​ +