.include "c64-1.oph" .outfile "hello.prg" .data .org $C000 .text .macro print ldx #0 _loop: lda _1, x beq _done jsr chrout inx bne _loop _done: .macend .macro greet lda #30 jsr delay `print hello1 `print _1 `print hello2 .macend lda #147 jsr chrout `greet target1 `greet target2 `greet target3 `greet target4 `greet target5 `greet target6 `greet target7 `greet target8 `greet target9 `greet target10 rts hello1: .byte "HELLO, ",0 hello2: .byte "!", 13, 0 target1: .byte "PROGRAMMER", 0 target2: .byte "ROOM", 0 target3: .byte "BUILDING", 0 target4: .byte "NEIGHBORHOOD", 0 target5: .byte "CITY", 0 target6: .byte "NATION", 0 target7: .byte "WORLD", 0 target8: .byte "SOLAR SYSTEM", 0 target9: .byte "GALAXY", 0 target10: .byte "UNIVERSE", 0 ; DELAY routine. Takes values from the Accumulator and pauses ; for that many jiffies (1/60th of a second). .scope .data .space _tmp 1 .space _target 1 .text delay: sta _tmp ; save argument (rdtim destroys it) jsr rdtim clc adc _tmp ; add current time to get target sta _target * jsr rdtim cmp _target bmi - ; Buzz until target reached rts .scend .checkpc $A000 .data .checkpc $D000