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

2007-04-02 07:27
Mace

Registered: May 2002
Posts: 1799
Not sure if it matters, but I usually INC$d019 and set $D012 in the interrupt itself, not in the initialise routine.
2007-04-02 08:25
MagerValp

Registered: Dec 2001
Posts: 1078
This init routine correctly sets the irq to trigger on line 0. Perhaps you're setting the high bit of d011 later on?

Btw, there's no need for sei/cli. Just do

lda #$7f
sta $dc0d
sta $dd0d

and the irqs are disabled

then

lda #1
sta $d01a

at the end when you're ready to go.
2007-04-02 08:49
Krill

Registered: Apr 2002
Posts: 2980
Quote: Not sure if it matters, but I usually INC$d019 and set $D012 in the interrupt itself, not in the initialise routine.

BAD style. :) During the set-up period with SEI, interrupts can be requested but won't be fired until CLI. So if you skip the irq acks before the CLI, you'll get an interrupt right after the CLI, and this is what you want seldomly.
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. ;
 
... 13 posts hidden. Click here to view all posts....
 
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
Alakran_64
Knight Rider/TREX
Acidchild/Padua
Mike
psych
blitzed
REBEL 1/HF
Fulgore/Excess/TREX
Guests online: 134
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 Logo Graphicians
1 t0m3000  (10)
2 Sander  (9.8)
3 Mermaid  (9.5)
4 Facet  (9.4)
5 Shine  (9.4)

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