| | Iapetus/Algarbi/Wood
Registered: Dec 2004 Posts: 71 |
stable rasters (again...)
I have been playing with double irq for some time and I can't put the code to work, can someone please have a look
and tell me why I can't get my raster bars stable, thanks.
I use kickassembler and the code is an adaptation of the one here: http://codebase64.org/doku.php?id=base:fli_displayer
.pc = $0801 "Basic Program"
:BasicUpstart($1000)
.pc = $1000
jmp start
irq0:
dec $d019
inc $d012
lda #<irq1
sta $fffe // set up 2nd IRQ to get a stable IRQ
cli
// Following here: A bunch of NOPs which allow the 2nd IRQ
// to be triggered with either 0 or 1 clock cycle delay
// resulting in an "almost" stable IRQ.
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
irq1:
nop
nop
nop
nop
nop
nop
nop
nop
nop
bit $ea
lda #$2d
sta $d012
lda #<irq0
sta $fffe // switch IRQ back to first stabilizer IRQ
lda $d012
cmp $d012 // stabilize last jittering cycle
beq delay2 // if equal, 2 cycles delay. else 3 cycles delay
delay2:
ldx #$00 //2
v: lda rastercols,x //4
sta $d020 //4
// sta $d021 //4
//nop
//nop
bit $ea
ldy delay,x //4
dey //2
bne *-1 //2 or 3
inx //2
cpx #48 //2
bne v //2 or 3 = 30
bit $ea
/*
ldx #$10
wait: dex
bne wait
*/
// Following here is the main FLI loop which forces the VIC-II to read
// new color data each rasterline. The loop is exactly 23 clock cycles
// long so together with 40 cycles of color DMA this will result in
// 63 clock cycles which is exactly the length of a PAL C64 rasterline.
asl $d019
nmi:
rti
start:
sei
lda #$35
sta $01 // disable all ROMs
lda #$7f
sta $dc0d // no timer IRQs
lda $dc0d // clear timer IRQ flags
lda #$1b
sta $d011
lda #$2d
sta $d012
lda #$00 //Set Background
ldx #BLACK //and Border colors
sta $d020 //turn off sprites
stx $d021
lda #<irq0
sta $fffe
lda #>irq0
sta $ffff
lda #<nmi
sta $fffa
lda #>nmi
sta $fffb // dummy NMI to avoid crashing due to RESTORE
lda #$01
sta $d01a // enable raster IRQs
dec $d019 // clear raster IRQ flag
cli
jmp * // that's it, no more action needed
.pc = $0c00
rastercols: .byte BLUE, PURPLE, GREEN, LIGHT_RED, PURPLE, BLACK, WHITE, ORANGE
.byte BLUE, PURPLE, GREEN, LIGHT_RED, PURPLE, BLACK, WHITE, ORANGE
.byte BLUE, PURPLE, GREEN, LIGHT_RED, PURPLE, BLACK, WHITE, BLACK
.byte BLUE, PURPLE, GREEN, LIGHT_RED, PURPLE, BLACK, WHITE, ORANGE
.byte BLUE, PURPLE, GREEN, LIGHT_RED, PURPLE, BLACK, WHITE, ORANGE
.byte BLUE, PURPLE, GREEN, LIGHT_RED, PURPLE, BLACK, WHITE, BLACK
.pc = $0d00
delay: .byte $08,$01,$08,$08,$08,$08, $08, $08
.byte $08,$01,$08,$08,$08,$08, $08, $08
.byte $08,$01,$08,$08,$08,$08, $08, $08
.byte $08,$01,$08,$08,$08,$08, $08, $08
.byte $08,$01,$08,$08,$08,$08, $08, $08
.byte $08,$01,$08,$08,$08,$08, $08, $08
.byte $08,$01,$08,$08,$08,$08, $08, $08
.byte $08,$01,$08,$08,$08,$08, $08, $08
|
|
| | Slammer
Registered: Feb 2004 Posts: 416 |
It look like you havn't copied the whole code from the example you are using.. When you trigger the second Irq it will put 3 bytes on the stack and it seems like you are missing some pla's to pull them off the stack. (the 3 bytes from the first irq is moved by the rti) |
| | Iapetus/Algarbi/Wood
Registered: Dec 2004 Posts: 71 |
Thank you Slammer, I have added th epha and pla's but when I run it the result is the same as above |
| | tlr
Registered: Sep 2003 Posts: 1790 |
Post a binary of your non-working build please. |
| | Iapetus/Algarbi/Wood
Registered: Dec 2004 Posts: 71 |
Here tlr, http://rapidshare.com/files/49211708/doubleirq2.prg
Thank you |
| | tlr
Registered: Sep 2003 Posts: 1790 |
Quote: Here tlr, http://rapidshare.com/files/49211708/doubleirq2.prg
Thank you
POKE4138,234:RUN
You have miscalculated the timing somewhere. This replaces the bit $ea with two nops.
I think you want it to be 46 cycles in the second interrupt upto the lda $d012; cmp $d012.
(Had to check my old stable rasters for this so I hope I haven't mistaken myself.)
|
| | Iapetus/Algarbi/Wood
Registered: Dec 2004 Posts: 71 |
Thank tlr you but the result is just the same
here is the code again with the pha and pla's
.pc = $0801 "Basic Program"
:BasicUpstart($1000)
.pc = $1000
jmp start
irq0: pha
dec $d019
inc $d012
lda #<irq1
sta $fffe // set up 2nd IRQ to get a stable IRQ
cli
// Following here: A bunch of NOPs which allow the 2nd IRQ
// to be triggered with either 0 or 1 clock cycle delay
// resulting in an "almost" stable IRQ.
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
irq1:/*
pla
pla
pla
lda #$2d
sta $d012
lda #<irq0
sta $fffe // switch IRQ back to first stabilizer IRQ
lda $d012
lda $d012
sta $d020
//cmp $d012 // stabilize last jittering cycle
//beq delay2 // if equal, 2 cycles delay. else 3 cycles delay
delay2:
ldx #$00 //2
v: lda rastercols,x //4
sta $d020 //4
// sta $d021 //4
//nop
//nop
bit $ea
ldy delay,x //4
dey //2
bne *-1 //2 or 3
inx //2
cpx #48 //2
bne v //2 or 3 = 30
bit $ea
/*
ldx #$10
wait: dex
bne wait
*/
asl $d019
pla
nmi:
rti
start:
sei
lda #$35
sta $01 // disable all ROMs
lda #$7f
sta $dc0d // no timer IRQs
lda $dc0d // clear timer IRQ flags
lda #$1b
sta $d011
lda #$2d
sta $d012
lda #$00 //Set Background
ldx #BLACK //and Border colors
sta $d020 //turn off sprites
stx $d021
lda #<irq0
sta $fffe
lda #>irq0
sta $ffff
lda #<nmi
sta $fffa
lda #>nmi
sta $fffb // dummy NMI to avoid crashing due to RESTORE
lda #$01
sta $d01a // enable raster IRQs
dec $d019 // clear raster IRQ flag
cli
jmp * // that's it, no more action needed
.pc = $0c00
rastercols: .byte BLUE, PURPLE, GREEN, LIGHT_RED, PURPLE, BLACK, WHITE, ORANGE
.byte BLUE, PURPLE, GREEN, LIGHT_RED, PURPLE, BLACK, WHITE, ORANGE
.byte BLUE, PURPLE, GREEN, LIGHT_RED, PURPLE, BLACK, WHITE, BLACK
.byte BLUE, PURPLE, GREEN, LIGHT_RED, PURPLE, BLACK, WHITE, ORANGE
.byte BLUE, PURPLE, GREEN, LIGHT_RED, PURPLE, BLACK, WHITE, ORANGE
.byte BLUE, PURPLE, GREEN, LIGHT_RED, PURPLE, BLACK, WHITE, BLACK
.pc = $0d00
delay: .byte $08,$01,$08,$08,$08,$08, $08, $08
.byte $08,$01,$08,$08,$08,$08, $08, $08
.byte $08,$01,$08,$08,$08,$08, $08, $08
.byte $08,$01,$08,$08,$08,$08, $08, $08
.byte $08,$01,$08,$08,$08,$08, $08, $08
.byte $08,$01,$08,$08,$08,$08, $08, $08
.byte $08,$01,$08,$08,$08,$08, $08, $08
.byte $08,$01,$08,$08,$08,$08, $08, $08 |
| | tlr
Registered: Sep 2003 Posts: 1790 |
?
doubleirq2.prg works fine with the poke I gave you.
The code you posted now is very different from doubleirq2.prg. The actual stable-code has been commented out for instance. And the number of cycles from irq1 upto the lda $d012 is nowhere near 46 cycles. |
| | Iapetus/Algarbi/Wood
Registered: Dec 2004 Posts: 71 |
I tried the poke but didn't see it stables perhaps I messed something. I am going to copy the first code and use it again.
thanks |
| | JackAsser
Registered: Jun 2002 Posts: 2014 |
After request from Algarbi@#c-64 i post (converted to CA65 for your inconvinience):
.segment "CODE"
.define BLUE 6
.define PURPLE 4
.define GREEN 5
.define LIGHT_RED 10
.define BLACK 0
.define WHITE 1
.define ORANGE 8
jmp start
irq0: pha
dec $d019
inc $d012
lda #<irq1
sta $fffe ; set up 2nd IRQ to get a stable IRQ
cli
; Following here: A bunch of NOPs which allow the 2nd IRQ
; to be triggered with either 0 or 1 clock cycle delay
; resulting in an "almost" stable IRQ.
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
irq1:
pla
pla
pla
lda #$2d
sta $d012
lda #<irq0
sta $fffe ; switch IRQ back to first stabilizer IRQ
pha
pla
pha
pla
pha
pla
nop
bit $ff
lda $d012
cmp #$2f
bne :+
:
ldx #$00 ;2
v: lda rastercols,x ;4
sta $d020 ;4
; sta $d021 ;4
;nop
;nop
bit $ea
ldy delay,x ;4
dey ;2
bne *-1 ;2 or 3
inx ;2
cpx #48 ;2
bne v ;2 or 3 = 30
bit $ea
.if 0
ldx #$10
wait: dex
bne wait
.endif
asl $d019
pla
nmi:
rti
start:
sei
lda #$35
sta $01 ; disable all ROMs
lda #$7f
sta $dc0d ; no timer IRQs
lda $dc0d ; clear timer IRQ flags
lda #$1b
sta $d011
lda #$2d
sta $d012
lda #$00 ;Set Background
ldx #BLACK ;and Border colors
sta $d020 ;turn off sprites
stx $d021
lda #<irq0
sta $fffe
lda #>irq0
sta $ffff
lda #<nmi
sta $fffa
lda #>nmi
sta $fffb ; dummy NMI to avoid crashing due to RESTORE
lda #$01
sta $d01a ; enable raster IRQs
dec $d019 ; clear raster IRQ flag
cli
; Some silly loop to enforce unstable timing (hopefully)
:
lda #$00
ldx $40
lda $c000,x
lda $c0ff,x
inc $40
inc $c000,x
inc $c0ff,x
jmp :-
.align 256
rastercols:
.byte BLUE, PURPLE, GREEN, LIGHT_RED, PURPLE, BLACK, WHITE,ORANGE
.byte BLUE, PURPLE, GREEN, LIGHT_RED, PURPLE, BLACK, WHITE, ORANGE
.byte BLUE, PURPLE, GREEN, LIGHT_RED, PURPLE, BLACK, WHITE, BLACK
.byte BLUE, PURPLE, GREEN, LIGHT_RED, PURPLE, BLACK, WHITE, ORANGE
.byte BLUE, PURPLE, GREEN, LIGHT_RED, PURPLE, BLACK, WHITE, ORANGE
.byte BLUE, PURPLE, GREEN, LIGHT_RED, PURPLE, BLACK, WHITE, BLACK
.align 256
delay:
.byte $08,$01,$08,$08,$08,$08, $08, $08
.byte $08,$01,$08,$08,$08,$08, $08, $08
.byte $08,$01,$08,$08,$08,$08, $08, $08
.byte $08,$01,$08,$08,$08,$08, $08, $08
.byte $08,$01,$08,$08,$08,$08, $08, $08
.byte $08,$01,$08,$08,$08,$08, $08, $08
.byte $08,$01,$08,$08,$08,$08, $08, $08
.byte $08,$01,$08,$08,$08,$08, $08, $08
|
| | Zyron
Registered: Jan 2002 Posts: 2381 |
Quote:sta $d020 ;turn off sprites
Oh, that's how it's done! ;D |
| | Frantic
Registered: Mar 2003 Posts: 1648 |
hä hä hä |
| | Iapetus/Algarbi/Wood
Registered: Dec 2004 Posts: 71 |
very funny hehehe |
| | Slammer
Registered: Feb 2004 Posts: 416 |
A little tip. I find it very usefull to put the stable raster routine in a library so you dont have to rewrite it every time. In my library it looks like the code below.
It uses some small pseudo commands from other libraries so you can't compile it directly, but I guess it's pretty intuitive what they do (:nop #8 does 8 nop commands, :mov16 moves a 16 bit value like lda, sta, lda, sta etc).
//---------------------------------------------------------------
// This is how you write your stable raster irq
//---------------------------------------------------------------
irq1:
:irqStart_stableRaster
// Do your rasterbars here
:irqEnd
//---------------------------------------------------------------
// Defining irq start and end
//---------------------------------------------------------------
.pseudocommand irqStart_stableRaster {
sta _ds_irqa
stx _ds_irqx
sty _ds_irqy
lsr $d019
inc $d012
:mov16 #irq2;$fffe
cli
:nop #8
irq2:
:nop #14
:pla #3
lsr $d019
lda $d012
cmp $d012
beq *+2
}
.pseudocommand irqEnd nextIrqYpos ; nextIrq {
.if (nextIrqYpos.getType()!=AT_NONE) {
:mov nextIrqYpos ; $d012
}
.if (nextIrq.getType()!=AT_NONE) {
:mov16 nextIrq ; $fffe
}
lda _ds_irqa
ldx _ds_irqx
ldy _ds_irqy
rti
}
|
| | Richard
Registered: Dec 2001 Posts: |
I'm using DASM for my Sub Hunter project. I'm on to the bug fixing phase, but I'm experiencing difficulties to get the rasterline $c2 to stay still when sprites go over this area. Here is my source for inside the IRQ. (Game loops are outside the IRQ as usual). Temp 1 to temp 8 are all smooth scroll values for the parallax.
SEI
LDA #$35
STA $01
LDA #<STAGE1_IRQ1
STA $FFFE
LDA #>STAGE1_IRQ1
STA $FFFF
LDA #$30
STA $D012
LDA #$7F
STA $DC0D
LDA #$1B
STA $D011
LDA #$01
STA $D01A
LDA $DC0D
LSR $D019
CLI
LOOP LDA #0
STA SYNC
WAITSYNC CMP SYNC
BEQ SYNCWAIT
JSR GAMELOOP
JMP LOOP
STAGE1_IRQ1: PHA
TXA
PHA
TYA
PHA
LSR $D019
LDA #$01
STA SYNC
; LDA #$35
; STA $01
JSR $E003
LDA #$47
STA $D012
LDA #$18
STA $D016
LDA #$0f
STA $D021
LDA #$01
STA $D022
LDA #$09
STA $D023
LDA #$00
STA $D015
;LDA #$01
;STA $D020
LDA #<STAGE1_IRQ2
STA $FFFE
LDA #>STAGE1_IRQ2
STA $FFFF
; LDA #$37
; STA $01
PLA
TAY
PLA
TAX
PLA
RTI
STAGE1_IRQ2: PHA
TXA
PHA
TYA
PHA
LSR $D019
LDA #$48
STA $D012
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDA #$0f
STA $D021
LDA #$09
STA $D022
LDA #$03
STA $D023
LDA #$10
STA $D016
LDA #$FF
STA $D015
;LDA #$02
;STA $D020
LDA #<STAGE1_IRQ3
STA $FFFE
LDA #>STAGE1_IRQ3
STA $FFFF
PLA
TAY
PLA
TAX
PLA
RTI
STAGE1_IRQ3: PHA
TXA
PHA
TYA
PHA
LSR $D019
LDA #$6A
STA $D012
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDA TEMP1
ORA #$10
STA $D016
;LDA #$03
;STA $D020
LDA #$0E
STA $D021
LDA #$01
STA $D022
LDA #$0E
STA $D023
LDA #<STAGE1_IRQ4
STA $FFFE
LDA #>STAGE1_IRQ4
STA $FFFF
PLA
TAY
PLA
TAX
PLA
RTI
STAGE1_IRQ4: PHA
TXA
PHA
TYA
PHA
LSR $D019
LDA #$7A
STA $D012
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDA TEMP2
ORA #$10
STA $D016
;LDA #$04
;STA $D020
LDA #$0E
STA $D021
LDA #<STAGE1_IRQ5
STA $FFFE
LDA #>STAGE1_IRQ5
STA $FFFF
PLA
TAY
PLA
TAX
PLA
RTI
;JMP $EA7E
STAGE1_IRQ5: PHA
TXA
PHA
TYA
PHA
LSR $D019
LDA #$84
STA $D012
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDA TEMP2
ORA #$10
STA $D016
;LDA #$06
;STA $D020
LDA #$00
STA $D022
LDA #$0B
STA $D021
LDA #$0B
STA $D023
LDA #<STAGE1_IRQ6
STA $FFFE
LDA #>STAGE1_IRQ6
STA $FFFF
PLA
TAY
PLA
TAX
PLA
RTI
;JMP $EA7E
;JMP $EA7E
STAGE1_IRQ6: PHA
TXA
PHA
TYA
PHA
LSR $D019
LDA #$98
STA $D012
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDA TEMP6
ORA #$10
STA $D016
;LDA #$07
;STA $D020
LDA #$0B
STA $D021
STA $D022
STA $D023
LDA #<STAGE1_IRQ7
STA $FFFE
LDA #>STAGE1_IRQ7
STA $FFFF
PLA
TAY
PLA
TAX
PLA
RTI
;JMP $EA7E
;JMP $EA7E
STAGE1_IRQ7: PHA
TXA
PHA
TYA
PHA
LSR $D019
LDA #$AA
STA $D012
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
;LDA #$08
;STA $D020
LDA TEMP6
ORA #$10
STA $D016
LDA #$0B
STA $D021
LDA #$0B
STA $D022
LDA #$0B
STA $D023
LDA #<STAGE1_IRQ8
STA $FFFE
LDA #>STAGE1_IRQ8
STA $FFFF
PLA
TAY
PLA
TAX
PLA
RTI
;JMP $EA7E
STAGE1_IRQ8: PHA
TXA
PHA
TYA
PHA
LSR $D019
LDA #$C2
STA $D012
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDA #$0E
STA $D021
LDA #$0B
STA $D023
LDA #$01
STA $D022
LDA TEMP7
ORA #$10
STA $D016
LDA #<STAGE1_IRQ9
STA $FFFE
LDA #>STAGE1_IRQ9
STA $FFFF
PLA
TAY
PLA
TAX
PLA
RTI
STAGE1_IRQ9: PHA
TXA
PHA
TYA
PHA
LSR $D019
LDA #$E3
STA $D012
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
;LDA #$0B
;STA $D020
LDA TEMP8
ORA #$10
STA $D016
LDA #<STAGE1_IRQ10
STA $FFFE
LDA #>STAGE1_IRQ10
STA $FFFF
PLA
TAY
PLA
TAX
PLA
NMI: RTI
STAGE1_IRQ10:
PHA
TXA
PHA
TYA
PHA
LSR $D019
LDA #$F2
STA $D012
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDA #$18
STA $D016
LDA #$09
STA $D023
LDA #$0F
STA $D021
LDA #$01
STA $D022
LDA #0
STA $D015
LDA #<STAGE1_IRQ1
STA $FFFE
LDA #>STAGE1_IRQ1
STA $FFFF
PLA
TAY
PLA
TAX
PLA
RTI
How do I tidy this routine so that there is no line flicker for when sprites go over raster line $C0 or is very close to it? |
| | chatGPZ
Registered: Dec 2001 Posts: 11386 |
the most obvious (and probably easiest) way would be to write 2 different routines, one thats timed for the case when there is no sprite, one thats timed for the case when there is a sprite, and switch between them accordingly. |
| | Oswald
Registered: Apr 2002 Posts: 5094 |
the speedup I see is that you save X&Y to the stack even when not destroying their value. you can do only one pha at the start and only one pla rti at the end when you destroy the val of A only.
edit, its also somewhat faster:
sta atemp+1
...dostuff
atemp lda #$00
rti
make sure your irq is not on a badline, also try to time the registerchanges so, that they happen in the previous rasterline, but already in the right sideborder ASAP. |
| | chatGPZ
Registered: Dec 2001 Posts: 11386 |
Quote:
you can do only one pha at the start and only one pla rti at the end when you destroy the val of A only
or better yet, don't use the stack at all, but use the magic of LDA and STA =P |
| | Richard
Registered: Dec 2001 Posts: |
You guys are great :)
I tried fixing the IRQ by putting the multiple irqs into good raster positions and the routine works successfully :)
Thanks for your help :)
|
| | Richard
Registered: Dec 2001 Posts: |
Damn I spoke too soon. At $C2 there is still a flicker when a sprite goes over it. :( I tried this for Sub Hunter, but it seems to cause me problems :(
STAGE1_IRQ1: STA I1+1
LSR $D019
LDA #$42
STA $D012
;TSX
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
;TSX
LDA #$00
STA $D015
LDA #$18
STA $D016
LDA #$0F
STA $D021
LDA #$01
STA $D022
LDA #$09
STA $D023
LDA #<STAGE1_IRQ2
STA $FFFE
LDA #>STAGE1_IRQ2
STA $FFFF
I1 LDA #0
NMI RTI
STAGE1_IRQ2 STA I2+1
LSR $D019
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDA #$4A
STA $D012
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDA #$FF
STA $D015
LDA #$10
STA $D016
LDA #$0F
STA $D021
LDA #$09
STA $D022
LDA #$03
STA $D023
LDA #<STAGE1_IRQ3
STA $FFFE
LDA #>STAGE1_IRQ3
STA $FFFF
I2 LDA #0
RTI
STAGE1_IRQ3 STA I3+1
LSR $D019
CLI
LDA #$6A
STA $D012
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDA TEMP1
ORA #$10
STA $D016
LDA #$0E
STA $D021
LDA #$01
STA $D022
LDA #$0E
STA $D023
LDA #<STAGE1_IRQ4
STA $FFFE
LDA #>STAGE1_IRQ4
STA $FFFF
I3 LDA #0
RTI
STAGE1_IRQ4 STA I4+1
LSR $D019
CLI
LDA #$82
STA $D012
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDA TEMP2
ORA #$10
STA $D016
LDA #$0E
STA $D021
LDA #$01
STA $D022
LDA #$0b
STA $D023
LDA #<STAGE1_IRQ5
STA $FFFE
LDA #>STAGE1_IRQ5
STA $FFFF
I4 LDA #0
RTI
STAGE1_IRQ5 STA I5+1
LSR $D019
LDA #$8a
STA $D012
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDA TEMP3
ORA #$10
STA $D016
LDA #$0B
STA $D021
LDA #$00
STA $D022
LDA #$0B
STA $D023
LDA #<STAGE1_IRQ6
STA $FFFE
LDA #>STAGE1_IRQ6
STA $FFFF
I5 LDA #0
RTI
STAGE1_IRQ6 STA I6+1
LSR $D019
CLI
LDA #$98
STA $D012
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDA TEMP6
ORA #$10
STA $D016
LDA #$0B
STA $D021
LDA #$0B
STA $D022
LDA #$0B
STA $D023
LDA #<STAGE1_IRQ7
STA $FFFE
LDA #>STAGE1_IRQ7
STA $FFFF
I6 LDA #0
RTI
STAGE1_IRQ7 STA I7+1
LSR $D019
CLI
LDA #$aa
STA $D012
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDA TEMP6
ORA #$10
STA $D016
LDA #$0B
STA $D021
LDA #$0B
STA $D022
LDA #$0B
STA $D023
LDA #<STAGE1_IRQ8
STA $FFFE
LDA #>STAGE1_IRQ8
STA $FFFF
I7 LDA #0
RTI
STAGE1_IRQ8 STA I8+1
STX I8X+1
STY I8X+1
DEC $D019
;DEC $D011
LDA #$C2
STA $D012
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDA TEMP7
ORA #$10
STA $D016
LDA #$0E
STA $D021
LDA #$01
STA $D022
LDA #$0B
STA $D023
LDA #<STAGE1_IRQ9
STA $FFFE
LDA #>STAGE1_IRQ9
STA $FFFF
I8 LDA #0
I8X LDX #0
I8Y LDY #0
RTI
STAGE1_IRQ9 STA I9+1
LSR $D019
LDA #$E2
STA $D012
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDA TEMP8
ORA #$10
STA $D016
LDA #$0E
STA $D021
LDA #$01
STA $D022
LDA #$0B
STA $D023
LDA #<STAGE1_IRQ10
STA $FFFE
LDA #>STAGE1_IRQ10
STA $FFFF
I9 LDA #0
RTI
STAGE1_IRQ10 STA I10+1
LSR $D019
LDA #$F2
STA $D012
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDA #$00
STA $D015
LDA #$18
STA $D016
LDA #$0F
STA $D021
LDA #$01
STA $D022
LDA #$09
STA $D023
LDA #<STAGE1_IRQ1
STA $FFFE
LDA #>STAGE1_IRQ1
STA $FFFF
LDA #$01
STA SYNC
JSR $E003
I10 LDA #0
RTI
If a certain sprite hits raster line $C2 what code should I use to stop the flicker from happening on the next raster line (bad line $c3) so that the parallax scrolling like the previous rasters are stable enough ?
|
| | Oswald
Registered: Apr 2002 Posts: 5094 |
LDA TEMP8
LDX #$0E
LDY #$01
STA $D016
STX $D021
STY $D022
LDA #$0B
STA $D023
you can make it tighter with some preloading. also I see no point of lda temp8 ora #$10.. make temp8 outside the irq having pre-ora-ed already. |
| | Richard
Registered: Dec 2001 Posts: |
@Oswald,
Thank you. I'll give this a go tonight and see how the result turns out. :)
|
|