Log inRegister an accountBrowse CSDbHelp & documentationFacts & StatisticsThe forumsAvailable RSS-feeds on CSDbSupport CSDb Commodore 64 Scene Database
You are not logged in - nap
CSDb User Forums


Forums > C64 Coding > question about triggered raster line in raster interrupt
2007-04-01 23:54
Trifox
Account closed

Registered: Mar 2006
Posts: 108
question about triggered raster line in raster interrupt

i am using this code
to initialise my interrupt
this should look fairly common:
(pasted from somewhere ... )



; Initialise Music Interrupt
sei ; turn off interrupts
lda #$7f
ldx #$01
sta $dc0d ; Turn off CIA 1 interrupts
sta $dd0d ; Turn off CIA 2 interrupts
stx $d01a ; Turn on raster interrupts

lda $d011
;ldx #%1000
;ldy #$14
and #%01111111
sta $d011 ; Clear high bit of $d012, set text mode
;stx $d016 ; single-colour
;sty $d018 ; screen at $0400, charset at $2000

lda #<int ; low part of address of interrupt handler code
ldx #>int ; high part of address of interrupt handler code
ldy #0 ; line to trigger interrupt
sta $0314 ; store in interrupt vector
stx $0315
sty $d012

lda $dc0d ; ACK CIA 1 interrupts
lda $dd0d ; ACK CIA 2 interrupts
asl $d019 ; ACK VIC interrupts
cli



to init my interrrupt, i encountered that this interrupt is triggered in row 256 :( what must i do to let it trigger on exactly line 0 ? and only there, not on line 0 AND 256 ... know what i mean ?


i am leaving the interrupt with following fragment:
; Initialise Music Interrupt
sei ; turn off interrupts
lda #$7f
ldx #$01
sta $dc0d ; Turn off CIA 1 interrupts
sta $dd0d ; Turn off CIA 2 interrupts
stx $d01a ; Turn on raster interrupts

lda $d011
;ldx #%1000
;ldy #$14
and #%01111111
sta $d011 ; Clear high bit of $d012, set text mode
;stx $d016 ; single-colour
;sty $d018 ; screen at $0400, charset at $2000

lda #<int ; low part of address of interrupt handler code
ldx #>int ; high part of address of interrupt handler code
ldy #0 ; line to trigger interrupt
sta $0314 ; store in interrupt vector
stx $0315
sty $d012

lda $dc0d ; ACK CIA 1 interrupts
lda $dd0d ; ACK CIA 2 interrupts
asl $d019 ; ACK VIC interrupts
cli

 
... 13 posts hidden. Click here to view all posts....
 
2007-04-02 09:39
JackAsser

Registered: Jun 2002
Posts: 2014
Funny how all these IRQ-stuff always get's copied and pasted instead of simply learn why and how it works... It's not THAT tricky.

; Disable IRQs
sei

; Swap out bitch
lda #$35
sta $01

; write 0 to all CIA IRQ-masks
lda #$7f
sta $dc0d
sta $dd0d

; Acknowledge pending CIA-interrupts
bit $dc0d
bit $dd0d

; Enable raster IRQs
lda #$01
sta $d01a

; Acknowledge pending Raster-IRQ
dec $d019

; Set raster compare + standard textmode
lda #$80
sta $d012
lda #$1b
sta $d011

; Set IRQ pointers
lda #<irq
sta $fffe
lda #>irq
sta $ffff

; Init-music
lda #$00
tax
tay
jsr music

; Re-enable irqs and stall
cli
jmp *

irq:
; Save regs
sta _AREG+1
stx _XREG+1
sty _YREG+1

; Call music
inc $d020
jsr music+3
dec $d020

; Restore registers
_AREG: lda #$00
_XREG: ldx #$00
_YREG: ldy #$00

; Acknowledge raster IRQ with favorite RMW-instruction of choice
dec $d019
rti


It's really not more tricky than that.
2007-04-02 09:41
ChristopherJam

Registered: Aug 2004
Posts: 1409
I'd go as far as advising against an SEI before killing the CIA interrupt, else there's a chance that the first interrupt you get will be from the CIA at some random raster position.

I had a bug at one stage from doing an lda$d011:and#248:ora#0n:sta $d011 - my intention was to avoid touching bits I didn't need to, but the result was whenever my music routine pushed the execution of that code past line 255, the next raster interrupt would never happen,as it would be set for some time after line 312! (Thanks Magervalp for suggesting I test in an emu and look at the raster position of the IRQ).

ETA: JackAsser wrote
; Acknowledge pending CIA-interrupts
bit $dc0d
bit $dd0d


Well yes, that works too.
2007-04-02 09:43
JackAsser

Registered: Jun 2002
Posts: 2014
Quote: I'd go as far as advising against an SEI before killing the CIA interrupt, else there's a chance that the first interrupt you get will be from the CIA at some random raster position.

I had a bug at one stage from doing an lda$d011:and#248:ora#0n:sta $d011 - my intention was to avoid touching bits I didn't need to, but the result was whenever my music routine pushed the execution of that code past line 255, the next raster interrupt would never happen,as it would be set for some time after line 312! (Thanks Magervalp for suggesting I test in an emu and look at the raster position of the IRQ).

ETA: JackAsser wrote
; Acknowledge pending CIA-interrupts
bit $dc0d
bit $dd0d


Well yes, that works too.


"I'd go as far as advising against an SEI before killing the CIA interrupt, else there's a chance that the first interrupt you get will be from the CIA at some random raster position"

That's why you should acknowledge them within the SEI/CLI pair.


Edit: So u figured it out. :D Sorry
2007-04-02 09:45
ChristopherJam

Registered: Aug 2004
Posts: 1409
We should stop posting comments simultaneously!

Anyone feel like implementing a semaphore? ;-)
2007-04-02 09:45
tlr

Registered: Sep 2003
Posts: 1790
Quote: We should stop posting comments simultaneously!

Anyone feel like implementing a semaphore? ;-)


Just to a SEI before you post and a CLI afterwards.
2007-04-02 09:47
ChristopherJam

Registered: Aug 2004
Posts: 1409
Alternately you could just temporarily disable the other poster before responding, then no SEI/CLI should be needed.
2007-04-02 09:49
JackAsser

Registered: Jun 2002
Posts: 2014
It's rather comical that we have pending posting problems speaking of pending IRQ problems. ;
2007-04-02 09:54
yago

Registered: May 2002
Posts: 333
While we are at it...
dont use dec $d019, or asl $d019 or similar..

Please use
lda $d019
sta $d019
makes sure to stay compatible with e.g. c65.

Thanks in Advance,
Zed

2007-04-02 09:58
tlr

Registered: Sep 2003
Posts: 1790
Quote: While we are at it...
dont use dec $d019, or asl $d019 or similar..

Please use
lda $d019
sta $d019
makes sure to stay compatible with e.g. c65.

Thanks in Advance,
Zed



I always used lda #$01/sta $d019 in my stuff, but I've never seen anybody use lda $d019/sta $d019.
2007-04-02 10:05
Trifox
Account closed

Registered: Mar 2006
Posts: 108
whao, thanks for so much information
Previous - 1 | 2 | 3 - Next
RefreshSubscribe to this thread:

You need to be logged in to post in the forum.

Search the forum:
Search   for   in  
All times are CET.
Search CSDb
Advanced
Users Online
Mike
Alakran_64
Honcho
Andy/AEG
Sande/Hokuto Force
goerp/F4CG/HF
Acidchild/Padua
sln.pixelrat
Pushead/Hokuto Force
Guests online: 124
Top Demos
1 Next Level  (9.7)
2 13:37  (9.7)
3 Mojo  (9.7)
4 Coma Light 13  (9.6)
5 Edge of Disgrace  (9.6)
6 What Is The Matrix 2  (9.6)
7 The Demo Coder  (9.6)
8 Uncensored  (9.6)
9 Comaland 100%  (9.6)
10 Wonderland XIV  (9.6)
Top onefile Demos
1 No Listen  (9.6)
2 Layers  (9.6)
3 Cubic Dream  (9.6)
4 Party Elk 2  (9.6)
5 Copper Booze  (9.6)
6 Dawnfall V1.1  (9.5)
7 Rainbow Connection  (9.5)
8 Onscreen 5k  (9.5)
9 Morph  (9.5)
10 Libertongo  (9.5)
Top Groups
1 Performers  (9.3)
2 Booze Design  (9.3)
3 Oxyron  (9.3)
4 Censor Design  (9.3)
5 Triad  (9.3)
Top Fullscreen Graphicians
1 Joe  (9.7)
2 Sulevi  (9.6)
3 The Sarge  (9.6)
4 Veto  (9.6)
5 Facet  (9.6)

Home - Disclaimer
Copyright © No Name 2001-2024
Page generated in: 0.049 sec.