mirror of
https://github.com/michaelcmartin/Ophis.git
synced 2024-12-22 18:30:49 +00:00
102 lines
1.5 KiB
Plaintext
102 lines
1.5 KiB
Plaintext
.include "c64-1.oph"
|
|
|
|
.data
|
|
.org $C000
|
|
.space cache 2
|
|
.text
|
|
|
|
.macro print
|
|
lda #<_1
|
|
ldx #>_1
|
|
jsr printstr
|
|
.macend
|
|
|
|
.macro greet
|
|
lda #30
|
|
jsr delay
|
|
`print hello1
|
|
`print _1
|
|
`print hello2
|
|
.macend
|
|
|
|
; Save the zero page locations that PRINTSTR uses.
|
|
lda $10
|
|
sta cache
|
|
lda $11
|
|
sta cache+1
|
|
|
|
lda #147
|
|
jsr chrout
|
|
`greet target1
|
|
`greet target2
|
|
`greet target3
|
|
`greet target4
|
|
`greet target5
|
|
`greet target6
|
|
`greet target7
|
|
`greet target8
|
|
`greet target9
|
|
`greet target10
|
|
|
|
; Restore the zero page values printstr uses.
|
|
lda cache
|
|
sta $10
|
|
lda cache+1
|
|
sta $11
|
|
|
|
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
|
|
printstr:
|
|
sta $10
|
|
stx $11
|
|
ldy #$00
|
|
_lp: lda ($10),y
|
|
beq _done
|
|
jsr chrout
|
|
iny
|
|
bne _lp
|
|
_done: rts
|
|
.scend
|
|
|
|
.checkpc $A000
|
|
.data
|
|
.checkpc $D000 |