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 > Charset animation problem
2007-10-14 10:39
Richard

Registered: Dec 2001
Posts: 621
Charset animation problem

Hi there.

I known how to animate a charset that contains 8 charsets. Which is something like this:

CHARANIM	INC ANIMPOINTER
			LDA ANIMPOINTER
			CMP #$08
			BNE ENDANIM
			LDA #$00
			STA ANIMPOINTER
			JSR ANIMATE
ENDANIM	RTS
ANIMATE	LDX #$00
WRAPCHR	LDA $0A00,X
			STA $0A40,X
			INX
			CPX #$08
			BNE WRAPCHR
			LDX #$00
WRAPCHR2	LDA $0A08,X
			STA $0A00,X
			INX
			CPX #$40
			BNE WRAPCHR2
			RTS



Easy eh? Unfortunately, I'm trying to animate a charset which somehow has a bigger animation. The animated chars are from $0910-$0a40. Please can you help me get an accurate animation for chars $0910-$0a40 (Putting $0a40 to $0910 and wrapping the frames for all the chars from that range :( ?
 
... 4 posts hidden. Click here to view all posts....
 
2007-10-14 13:07
Richard

Registered: Dec 2001
Posts: 621
I want to animate all 39 characters in the character buffer, not 8 :(
2007-10-14 13:12
Conrad

Registered: Nov 2006
Posts: 849
Richard: when you mean "character buffer", do mean just one char? If so, then the code above with do just that!
2007-10-14 13:22
Richard

Registered: Dec 2001
Posts: 621
All 39 chars :)

Place $0910 to $0a40 and then keep pulling it through to $0910 again. This is so that the 39 chars I am using will animate.

Just like the way I do a colour washing routine that moves from the right of the screen, right over to the first byte.

eg.                    lda table1
                       sta table1+39
                       ldx #0
wrap                   lda table1+1,x
                       sta table1+0,x
                       inx
                       cpx #39
                       bne wrap

It is hard for me to explain, but I'm using chars $22 - $48. So char $22 gets copied to $48 and the chars $23 - $27 go back one char, and then repeat inside a loop. So that way I can get a visible char animation.
2007-10-14 13:26
iAN CooG

Registered: May 2002
Posts: 3197
The fastest way I can think of doing it is by using an unrolled loop, still takes lots of rastertime.
;---------------------------------------
; Animate some chars, unrolled loop
; ~6*8 lines of rastertime taken
; dasm used
; iAN CooG/HokutoForce
;---------------------------------------
charset    = $0800
scr        = $0400
charstart  = charset+[$22*8]
N_of_chars = 39
; 8 zp temp bytes
ztemp      = $49
;d018 value
ns         = >scr<<2
nc         = [>charset&$3f]>>2
v18        = [ns|nc]&$ff

debug      = 0
;---------------------------------------
    *=$1000
    sei
    jsr setmode
    jsr setirq
    cli
    jmp *
;---------------------------------------
animloop
    sta rsA+1
    stx rsX+1
    sty rsY+1

    inc $d019
    bit $2c2c
    bit $2c2c
    bit $2c2c
    bit $2c2c
    bit $2c2c
    bit $2c2c
    bit $2c2c
    nop
    inc $d020

;copy 1st element to ztemp
R SET 0
REPEAT 8
    lda [charstart+R]
    sta [ztemp    +R]
R SET R+1
REPEND
    inc $d020
;copy 2nd to 1st ... last to last-1
C SET 0
REPEAT [N_of_chars-1]
 R SET 0
 REPEAT 8
    lda [charstart+R+[[C+1]*8]]
    sta [charstart+R+[ C   *8]]
 R SET R+1
 REPEND
C SET C+1
REPEND
    inc $d020
;copy back ztemp to last
R SET 0
REPEAT 8
    lda [ztemp    +R]
    sta [charstart+R+[[N_of_chars-1]*8]]
R SET R+1
REPEND

    lda #0
    sta $d020

.if debug == 1
    ldx #5
delay
    bit $d011
    bmi *-3
    bit $d011
    bpl *-3
    dex
    bne delay
.endif
rsA lda #$ff
rsX ldx #$ff
rsY ldy #$ff
    rti

;---------------------------------------
setirq

    lda #>animloop
    sta $ffff
    lda #<animloop
    sta $fffe
    lda #$33
    sta $d012
    lda #$1b
    sta $d011
    lda #1
    sta $d019
    sta $d01a
    lda #$7f
    sta $dc0d
    lda $dc0d
    rts
;---------------------------------------
setmode

    lda #v18
    sta $d018

    lda #$32
    sta $01
    lda #$d0
    sta trc+2
    lda #>charset
    sta trc+5
    ldx #$00
    ldy #$08
trc
    lda $d000,x
    sta charset,x
    txa
    sta $0400,x
    inx
    bne trc
    inc trc+2
    inc trc+5
    dey
    bne trc

    lda #$35
    sta $01

    rts
;eof
2007-10-14 13:28
Richard

Registered: Dec 2001
Posts: 621
Correction:
It is hard for me to explain, but I'm using chars $22 - $48. So char $22 gets copied to $48 and the chars $23 - $47 go back one char, and then repeat inside a loop. So that way I can get a visible char animation.
2007-10-14 14:04
Conrad

Registered: Nov 2006
Posts: 849
I kind of understand what you're trying to accomplish here, which is to actually wrap char memory right around itself (like a sprite side-border scoller for example but instead rotates by 8 pixels (a char) at each frame) ... therefore it's not that hard to code - but i warn you, the bigger animation buffer you have, the more raster time is gonna be eaten up.
2007-10-14 16:33
Krill

Registered: Apr 2002
Posts: 2980
Do you really need to display all animation phases at the same time? In other words, can't you just copy the current phase to one character once every frame?
2007-10-14 16:50
Conrad

Registered: Nov 2006
Posts: 849
Quote: Do you really need to display all animation phases at the same time? In other words, can't you just copy the current phase to one character once every frame?

That's what I thought he was trying to ask, which is why I wasted some time writing that routine I posted a few hours ago.

I think Richard is saying that he wants to view more than one char on the screen which use the same animation data.

But again!- that routine i posted could be used MULTIPLE times to write animation to different individual chars of any set/bank if you think about it. Modifications need to be applied of course.
2007-10-14 17:04
Richard

Registered: Dec 2001
Posts: 621
Thanks for your help :)

I'm probably better off using less than 39 chars because of too much rastertime being used :(
2007-10-14 20:21
Krill

Registered: Apr 2002
Posts: 2980
39 chars * 8 bytes * 8 cycles / 63 cycles = about 40 rasterlines. Does not sound much to me.
Previous - 1 | 2 - 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
HCL/Booze Design
aNdy/AL/Cosine
BYB/Hokuto Force
REBEL 1/HF
Acidchild/Padua
DJ Space
rexbeng
deetsay
heavymett
Peacemaker/CENSOR/Hi..
Guests online: 144
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 Graphicians
1 Mirage  (9.8)
2 Archmage  (9.7)
3 Pal  (9.6)
4 Carrion  (9.6)
5 Sulevi  (9.6)

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