summaryrefslogtreecommitdiff
path: root/test/hello-world.s
diff options
context:
space:
mode:
Diffstat (limited to 'test/hello-world.s')
-rw-r--r--test/hello-world.s56
1 files changed, 56 insertions, 0 deletions
diff --git a/test/hello-world.s b/test/hello-world.s
new file mode 100644
index 0000000..fef5a46
--- /dev/null
+++ b/test/hello-world.s
@@ -0,0 +1,56 @@
+; Hello world.
+; Writen in Sux assembly by mr b0nk 500 <b0nk@b0nk.xyz>
+
+; Initialize, and declare variables.
+.org $8000
+string:
+ .byte "Hello, world!\n"
+
+; Get CPU into a known state.
+.org $0
+reset:
+ cps ; Reset the processor status.
+ ldx.w #$FFFF ; Set up the stack pointer.
+ txs ; Reset the stack pointer.
+
+; Start of main program.
+start:
+ ldx.w #$0 ; Reset x.
+ jmp print
+
+line_count:
+ iny ; Increment the line count.
+ cpy #$32
+ beq spin ; Have we printed 50 lines?
+ jmp start ; Keep looping until we have printed 50 lines.
+
+; Printing sub routine.
+print:
+ lda string, x ; Get character at offset x.
+ beq line_count ; Did we find a null terminator?
+ sta $C001 ; Print character.
+ inx ; Increment offset.
+ jmp print ; Keep printing more characters.
+
+; The other threads would clash, if we're running the same code.
+; So, have them spin instead, please?
+.org $1000
+spin:
+ nop
+ nop
+ nop
+ jmp spin
+
+.org $FFC0
+.qword reset
+
+.org $FF50
+.qword spin
+.qword spin
+.qword spin
+.qword spin
+.qword spin
+.qword spin
+.qword spin
+done
+