.include "../platform/c64_0.oph"
.require "../platform/c64kernal.oph"

.data
.org $C000
.text

.macro print
	lda #<_1
	ldx #>_1
	jsr printstr
.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

; PRINTSTR routine.  Accumulator stores the low byte of the address,
; X register stores the high byte.  Destroys the values of $10 and
; $11.

.scope
.data zp
.space _ptr 2
.text
printstr:
	sta _ptr
	stx _ptr+1
	ldy #$00
_lp:	lda (_ptr),y
	beq _done
	jsr chrout
	iny
	bne _lp
_done:	rts
.scend

.checkpc $A000

.data
.checkpc $D000

.data zp
.checkpc $80
