| |
FillmoreC Account closed
Registered: Dec 2008 Posts: 7 |
how to delay a routine from starting?
Lets say I turned the screen black then started music, but i have scroller that I want to delay starting until a certain part of the music. how can I do that.
sort of like
lda #$00
sta $d020
sta $d021
jsr $1000
sei
then set the interupt up and all that
then
irq asl $d019
jsr $1003
jsr scroll
jmp $ea82
scroll
wait until into of the music is done
then scroll
rts
|
|
... 6 posts hidden. Click here to view all posts.... |
| |
Stainless Steel
Registered: Mar 2003 Posts: 966 |
Or what i like to do is to make the jsr $scrollroutine be a bit $scrollroutine initially.
When the delay routine hits its value it sets the bit to jsr on the scroller and a bit to the delay routine.
|
| |
Hate Bush
Registered: Jul 2002 Posts: 465 |
use timingmarks if your musicplayer supports them. if not, let's have one more |
| |
FillmoreC Account closed
Registered: Dec 2008 Posts: 7 |
Quote: delay .byte 7
init
lda #7 (delay)
sta delay
rts
interrupt routine
jsr not-every-frame-routine
rts
not-every-frame-routine
dec delay
beq go-on
rts
go-on
lda #7
sta delay
(routine to run at x frames, go here)
rts
This only slows the scroll down in speed. I need the scroll not to go for like maybe 5 -10 seconds then start scrolling for the rest of the demo. |
| |
JackAsser
Registered: Jun 2002 Posts: 2014 |
frameCount: .word 0
startScroller: .byte 0
frameTrigger = 7*50 ; 7 seconds
frameCountLo = frameCount+0
frameCountHi = frameCount+1
irq_handler:
jsr doMusic
; Update frameCount
inc frameCountLo
bne :+
inc frameCountHi
:
; If frameCount == frameTrigger then startScroller=1
lda frameCountHi
cmp #>frameTrigger
bne :+
lda frameCountLo
cmp #<frameTrigger
bne :+
inc startScroller
:
; If startScroller !=0 then doScroller
lda startScroller
beq :+
jsr doScroll
:
; exit IRQ
|
| |
Oswald
Registered: Apr 2002 Posts: 5094 |
oh no what have you done.. looked like c at first glance.. I have to stab my eyes... ;) |
| |
JackAsser
Registered: Jun 2002 Posts: 2014 |
Quote: oh no what have you done.. looked like c at first glance.. I have to stab my eyes... ;)
Sorry for that Ozzie but that's how I write c64 assembly. :) |
| |
iopop
Registered: Dec 2001 Posts: 317 |
JackAssers code will stall the scroller 7 sec every 21.845 minute. Based on the previous code I would prevent it by using JSR/BIT as on/off markers in the code.
frameCount: .word 0
startScroller: .byte 0
frameTrigger = 7*50 ; 7 seconds
frameCountLo = frameCount+0
frameCountHi = frameCount+1
irq_handler:
jsr doMusic
dly: jsr doDelay
dsc: bit doScroll
; exit IRQ
doDelay:
; Update frameCount
inc frameCountLo
bne :+
inc frameCountHi
:
; If frameCount == frameTrigger then startScroller=1
lda frameCountHi
cmp #>frameTrigger
bne :+
lda frameCountLo
cmp #<frameTrigger
bne :+
lda #$20 ;$20 is JSR ie. turn on the scroller.
sta dsc
lda #$2c ;$2c is BIT $abcd ie. disable the delay routine.
sta dly
:
rts
|
| |
JackAsser
Registered: Jun 2002 Posts: 2014 |
:) |
| |
FillmoreC Account closed
Registered: Dec 2008 Posts: 7 |
Quote: JackAssers code will stall the scroller 7 sec every 21.845 minute. Based on the previous code I would prevent it by using JSR/BIT as on/off markers in the code.
frameCount: .word 0
startScroller: .byte 0
frameTrigger = 7*50 ; 7 seconds
frameCountLo = frameCount+0
frameCountHi = frameCount+1
irq_handler:
jsr doMusic
dly: jsr doDelay
dsc: bit doScroll
; exit IRQ
doDelay:
; Update frameCount
inc frameCountLo
bne :+
inc frameCountHi
:
; If frameCount == frameTrigger then startScroller=1
lda frameCountHi
cmp #>frameTrigger
bne :+
lda frameCountLo
cmp #<frameTrigger
bne :+
lda #$20 ;$20 is JSR ie. turn on the scroller.
sta dsc
lda #$2c ;$2c is BIT $abcd ie. disable the delay routine.
sta dly
:
rts
i understand this but I have bit of a syntax question. I don't understand
bne :+
i understand say
bne *-2
or
bne lable
but I've never seen bne :+ where is that branching too? Is it branching to the : right before the rts? |
| |
JackAsser
Registered: Jun 2002 Posts: 2014 |
:+ refers to the next colon.
:- refers to the previous colon.
They're called anonymous labels iirc.
You can also use many + or minus to jump several colons back or forward (just to make stuff more unreadable :) ) |
Previous - 1 | 2 - Next |