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 > Howto flickerfree and moving rasterbar ?
2009-10-19 23:18
8bitforever
Account closed

Registered: Oct 2009
Posts: 48
Howto flickerfree and moving rasterbar ?

<Post edited by moderator on 20/10-2009 01:24>

Making a perfect stable, flickerfree and moving rasterbar is harder than I thought.
Why and which changes are needed to the code below to fulfill my dream about the flickerfree rasterbar?
The code is based on http://www.ffd2.com/fridge/vic/stableraster.txt.
Acme code ready to compile:

!to "doubleirqrasterbar1.prg",cbm  

*= $0800
!byte $00,$0c,$08,$0a,$00,$9e,$33,$32,$37,$36,$38,$00,$00,$00,$00	
 
raspos    = $00
maxpos    = $7c

         *= $8000    ;Assemble to $8000       
         
         cld         ;Clear Decimal Mode
         sei         ;Disable IRQ's
         lda #$1f    ;Disable CIA IRQ's
         sta $dc0d
         sta $dd0d
 
;        lda #<nmi   ;Install NMI into
;        ldx #>nmi   ;Hardware NMI and
;        sta $fffa   ;RESET Vectors
;        sta $fffc
;        stx $fffb
;        stx $fffd
 
         lda #<irq1  ;Install RASTER IRQ
         ldx #>irq1  ;into Hardware
         sta $0314   ;Interrupt Vector
         stx $0315
 
;        lda #$35    ;Set MMU to RAM at
;        ldx #$ff    ;$a000-$bfff and
;        sta $01     ;$e000-$ffff
;        txs         ;Clear the STACK
 
         lda #$01    ;Enable RASTER IRQ
         ldx #$1b    ;High bit of RASTER
         ldy #$34    ;compare register
         sta $d01a   ;and RASTER IRQ to
         stx $d011   ;line $34
         sty $d012
                     ;NOTE double IRQ
                     ;cannot be on or
                     ;around a BAD LINE!
                     ;(Fast Line)
 
         lda #$0e    ;Set Background
         ldx #$06    ;and Border colors
         ldy #$00    ;to default and
         sta $d020   ;turn off sprites
         stx $d021
         sty $d015
 
         jsr clrscreen
         jsr clrcolor
;        jsr printtext
 
         asl $d019   ;Ack any previous
         lda $dc0d   ;IRQ's
         lda $dd0d
 
         cli         ;Renable IRQ's
 
         jmp *       ;Endless Loop
 
 
irq1
         sta reseta1 ;Preserve A,X and Y
         stx resetx1 ;Registers
         sty resety1 ;VIA self modifying
                     ;code
                     ;(Faster than the
                     ;STACK is!)
 
         lda #<irq2  ;Set IRQ Vector
         ldx #>irq2  ;to point to the
         ldy #$35    ;next part of the
         sta $0314   ;Stable IRQ
         stx $0315   ;ON NEXT LINE!
         sty $d012
         asl $d019   ;Ack RASTER IRQ
         tsx         ;We want the IRQ
         cli         ;To return to our
         nop         ;endless loop
         nop         ;NOT THE END OF
         nop         ;THIS IRQ!
         nop
         nop         ;Execute nop's
         nop         ;until next RASTER
         nop         ;IRQ Triggers
         nop
         nop         ;2 cycles per
         nop         ;instruction so
         nop         ;we will be within
         nop         ;1 cycle of RASTER
         nop         ;Register change
 
;        nop  ;<--- remove 1 NOP for PAL

irq2
         txs         ;Restore STACK
                     ;Pointer
         ldx #$08    ;Wait exactly 1
         dex         ;lines worth of
         bne *-1     ;cycles for compare
         bit $ea     ;Minus compare
         nop         ;cycles
 
;        nop  ;<--- remove 1 NOP for PAL
 
         lda #$35    ;RASTER change yet?
         cmp $d012
         beq start   ;If no waste 1 more
                     ;cycle
start

         ldx raspos
         cpx #maxpos   
         beq setrastup
         inx
         stx raspos
         cpx #maxpos   
         bne rasterbarctrl

setrastup     
         ldx #$00
         stx raspos        ;Reset raster positon to 
                           ;zero if maximum has been reached.     

rasterbarctrl
         ldx raspos
         ldy rastmov,x    ;Wait for rasterline $3D-$96 at $D012 
wait     cpy $d012 
         bne wait 
        
                              ;rasterbar
         ldx #$00 
copy11   ldy rastime,x       
         dey                    
         bne *-1 
         lda coloursr,x       
         sta $d020 
         sta $d021 
         inx 
         cpx #$10
         bne copy11


         lda #<irq3  ;Set IRQ to point
         ldx #>irq3  ;to subsequent IRQ
         ldy #$b8    ;at line $68
         sta $0314
         stx $0315
         sty $d012
         asl $d019   ;Ack RASTER IRQ
 
         lda #$00    ;Reload A,X,and Y
reseta1  = *-1       ;registers
         ldx #$00
resetx1  = *-1
         ldy #$00
resety1  = *-1
 
;        rti         ;Return from IRQ
         jmp $ea31
irq3
         sta reseta2 ;Preserve A,X,and Y
         stx resetx2 ;Registers
         sty resety2
 
         ldx #$0a    ;Waste some more
         dex         ;time so effect
         bne *-1     ;can be seen
         nop
 
;        lda #$0e    ;More colors
;        ldx #$06
;	 nop:nop 
;        sta $d021   ;Cool! subsequent
;        stx $d021   ;IRQ's are also
                     ;stable :-)
                     ;Unless you are
                     ;running realtime
                     ;code :-)
 
         ldy #$18    ;Waste time so this
         dey         ;IRQ does not try
         bne *-1     ;to reoccur on the
                     ;same line!
 
         lda #<irq1  ;Reset Vectors to
         ldx #>irq1  ;first IRQ again
         ldy #$34    ;at line $34
         sta $0314
         stx $0315
         sty $d012
         asl $d019   ;Ack RASTER IRQ
 
         lda #$00    ;Reload A,X,and Y
reseta2  = *-1       ;registers
         ldx #$00
resetx2  = *-1
         ldy #$00
resety2  = *-1
 
;        rti         ;Return from IRQ
         jmp $ea81 
                     ;Pound RESTORE to
                     ;get back to Turbo
nmi
         asl $d019   ;Ack all IRQ's
         lda $dc0d
         lda $dd0d
         lda #$81    ;reset CIA 1 IRQ
         ldx #$00    ;remove raster IRQ
         ldy #$37    ;reset MMU to roms
         sta $dc0d
         stx $d01a
         sty $01
         ldx #$ff    ;clear the stack
         txs
         cli         ;reenable IRQ's
         jmp $9000   ;back to Turbo
 
clrscreen
         lda #$20    ;Clear the screen
         ldx #$00
clrscr   sta $0400,x
         sta $0500,x
         sta $0600,x
         sta $0700,x
         dex
         bne clrscr
         rts
clrcolor
         lda #$03    ;Clear color memory
         ldx #$00
clrcol   sta $d800,x
         sta $d900,x
         sta $da00,x
         sta $db00,x
         dex
         bne clrcol
         rts
 
printtext
         lda #$16    ;C-set = lower case
         sta $d018
 
         ldx #$00
moretext lda text1,x
 
         bpl lower   ;upper case ?
         eor #$80    ;yes
 
         bne lower+2
 
lower    and #$3f    ;lower case
         sta $0450,x
         inx
         cpx #$78
         bne moretext
exit     rts
 
text1
         !scr "Stable Raster IRQ sourc"
         !scr "e (PAL/NTSC)     "
         !scr "All Code by Fungus 1996"
         !scr "                 "
         !scr "Feel free to use and mo"
         !scr "dify this code :)"
 


;------------------------------------------------------------------------------- -
;raster data
;------------------------------------------------------------------------------- -

rastime      
             !byte $08,$08,$08,$08,$08,$08,$08,$01
             !byte $08,$08,$08,$08,$08,$08,$08,$01

coloursr     
             !byte $0b,$0b,$0c,$0c,$0f,$0f,$0d,$0d
             !byte $0d,$0f,$0f,$0c,$0c,$0b,$0b,$00


rastmov      
             !byte $3D,$3D,$3E,$3E,$3F,$3F,$40,$40,$41,$42,$43,$44,$45,$46,$47,$48
             !byte $49,$4A,$4C,$4E,$50,$52,$54,$56,$58,$5A,$5C,$5E,$60,$62,$64,$66
             !byte $68,$6A,$6C,$6E,$70,$72,$74,$76,$78,$7A,$7C,$7E,$80,$82,$84,$86
             !byte $88,$8A,$8C,$8E,$8F,$90,$91,$92,$93,$94,$94,$95,$95,$96,$96,$95
             !byte $95,$94,$94,$93,$93,$92,$91,$90,$8F,$8E,$8D,$8D,$8B,$89,$87,$85
             !byte $83,$81,$7F,$7D,$7B,$79,$77,$75,$73,$71,$6F,$6D,$6B,$69,$67,$65
             !byte $63,$61,$5F,$5D,$5B,$59,$57,$55,$53,$51,$4F,$4D,$4B,$49,$48,$47
             !byte $46,$45,$44,$43,$42,$41,$40,$40,$3F,$3F,$3E,$3E



 
... 71 posts hidden. Click here to view all posts....
 
2009-10-20 20:41
chatGPZ

Registered: Dec 2001
Posts: 11386
rambones: thats not a stable raster routine.... it can be made flickerfree (or well, flickering in the border) though with proper delay values though, admitted :)
2009-10-21 06:43
SIDWAVE
Account closed

Registered: Apr 2002
Posts: 2238
Groepaz: most 80s demos do this, and it works well :D
2009-10-21 06:44
HCL

Registered: Feb 2003
Posts: 728
Zzz. Stable, flickerfree moving rasterbars was *published* in 198x and 1000 demos have *published* it since then. ..and they are all on the internet with the code just there for you to read, if you just use some other tool than Notepad.
2009-10-21 08:50
8bitforever
Account closed

Registered: Oct 2009
Posts: 48
I know they have been out there since the eighties but I´m trying to do some coding in 2009. Since we are here now in 2009 I would like to find the code using gogle or codebase64 or the CSDb forum.

So since you know the code and where to find it, could you please publish some stable, flickerfree moving rasterbar code here in ASCII.

Please, be helpful !
2009-10-21 09:17
Frantic

Registered: Mar 2003
Posts: 1648
...which makes me notice that Jackasser still haven't finished his codebase articles on stable timing. :)

//FTC
2009-10-21 09:49
Jetboy

Registered: Jul 2006
Posts: 337
Quote: I know they have been out there since the eighties but I´m trying to do some coding in 2009. Since we are here now in 2009 I would like to find the code using gogle or codebase64 or the CSDb forum.

So since you know the code and where to find it, could you please publish some stable, flickerfree moving rasterbar code here in ASCII.

Please, be helpful !


They are helpfull. They gave you all the info you need.
2009-10-21 09:57
Frantic

Registered: Mar 2003
Posts: 1648
If the help is not enough I suggest you buy a flickerfixer. ;)
2009-10-21 11:05
Graham
Account closed

Registered: Dec 2002
Posts: 990
Don't move the raster-IRQ, move the colors inside the color table.
2009-10-21 11:07
Marauder/GSS
Account closed

Registered: Jul 2006
Posts: 224
Quote: I know they have been out there since the eighties but I´m trying to do some coding in 2009. Since we are here now in 2009 I would like to find the code using gogle or codebase64 or the CSDb forum.

So since you know the code and where to find it, could you please publish some stable, flickerfree moving rasterbar code here in ASCII.

Please, be helpful !


if people would at least study the code and try to learn from, then they would understand what they're doing and could fix this by themelves...

just copy/paste code and using it without understanding is so lame...hehe *SCNR* (c;

and I also think people here were helpful, so do you homework now... :D
2009-10-21 12:02
SIDWAVE
Account closed

Registered: Apr 2002
Posts: 2238
What Graham said..
Previous - 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 - 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
iAN CooG/HVSC
deetsay
iceout/Avatar/HF
Steel/SCS&TRC/G★P
Acidchild/Padua
Bieno/Commodore Plus
Magic/Nah-Kolor
RetroGL
Guests online: 123
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 Swappers
1 Derbyshire Ram  (10)
2 Jerry  (9.8)
3 Violator  (9.7)
4 Acidchild  (9.7)
5 Cash  (9.6)

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