Skip to main content

6502 Counting Loop Example

Here is a solution for part of the SPO600 64-bit Assembly Language Lab but implemented in 6502 Assembly language for use with the 6502 Emulator:

; ROM routines
define SCINIT $ff81
define CHROUT $ffd2

START:
LDX #$00 ; Loop index (0-9)

GO:
TXA ; Put loop index into A
CLC
ADC #$30 ; Add $30 (ASCII '0')
STA MSG_DIGIT ; Store into the string

LDY #$00 ; Character number to print
DO:
LDA MSG,Y ; Get a character
BEQ DONE ; Done if it's NULL
JSR CHROUT ; Print character
INY ; Increment char number
JMP DO ; Process next character

DONE:
INX ; Increment loop index
CPX #10 ; Is it 10?
BNE GO ; If not, branch to GO
BRK ; Stop

MSG:
DCB "L","o","o","p",$20
MSG_DIGIT:
DCB "#",$0D,$00

; Note that MSG_DIGIT is a position in
; the middle of the message - not a
; separate message.