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 > 4x4 char smooth Scroll
2006-07-16 18:26
Richard

Registered: Dec 2001
Posts: 621
4x4 char smooth Scroll

Please can anyone help?

I know how to do 1x1 scroll text, 1x2 scrolltext, but I don't have a clue how to code a 4x4 charset scroll and how a 4x4 char actually works.

I want to do a 4x4 scrolling routine, for a demo.

Thanx

RB!
2006-07-16 18:45
cadaver

Registered: Feb 2002
Posts: 1160
I would do it just like scrolling 4x4 blocks in a game, but since that's a bit complicated, here's a simpler way:

Have a counter counting from 0 to 3, that tells which column of the big letter to display next. When this counter wraps, time to move on to the next letter.

Then for each of the 4 columns, you need 4 tables (for 4 rows) that tell which char will be used in that position of the letter.

For example, code for column 0:

ldy #0
lda (textptr),y ;current letter of scrolltext
tax
lda col0row0tbl,x
sta $0400+21*40+39
lda col0row1tbl,x
sta $0400+22*40+39
lda col0row2tbl,x
sta $0400+23*40+39
lda col0row3tbl,x
sta $0400+24*40+39

How you edit the big charset and generate those tables, is another headache...
2006-07-16 19:50
Bud

Registered: Jan 2002
Posts: 14
If you draw a 4x4 charset using the 4x4 Char Maker found here on CSDb, you will end up with 4 character sets. Because of this, you need to change the font using $d018 after the first font has been displayed (every 8 pixels). Some info is given when in the editor about this.
In a scrolltext you can count from 1 to 4 when moving the characters to the left. when the counter is 1, display a new character, when the counter is 2-4, add #$40 to the last character column that was on the screen.

When you intend to use only 31 characters and space, you can fit the 4x4 font into 2 character sets and change the font only half way, after 16 pixels. Ofcourse you need to change the scroll routine depending on how the characters have been placed into memory.
2006-07-16 20:00
Scout

Registered: Dec 2002
Posts: 1570
@Bud: 4 charsets? $d018 manipulating ..Geez..that's a bit complex/memory consuming innit?

What we did back in the days was drawing a charset in an editor like Amica Paint and convert the koala/amica pic to a char set.
Then you make a lookuptable with pointers to the start positions of every font-character in the converted screenmap.
This way you can make also whatever x whatever scrollers with proportional characters like the I, M and W.


---
8Bit Mayhem - The Commodore 64 Scenemusic Podcast
http://8bitmayhem.blogspot.com/
2006-07-16 20:03
Hein

Registered: Apr 2004
Posts: 954
I used Crowthers editor, did 4x4, 8x8 fonts and such. Takes some time to define the needed characters, but if you like puzzles, it's big fun. :)
2006-07-16 20:04
tlr

Registered: Sep 2003
Posts: 1790
You could also use something like this: Backdrop Designer V1.2.
2006-07-16 20:27
Bud

Registered: Jan 2002
Posts: 14
@Scout: If your 4x4 font can fit in one character set then that's indeed the way to go. But when you want each character to look different it will be difficult...
2006-07-17 19:12
Richard

Registered: Dec 2001
Posts: 621
Quote: I would do it just like scrolling 4x4 blocks in a game, but since that's a bit complicated, here's a simpler way:

Have a counter counting from 0 to 3, that tells which column of the big letter to display next. When this counter wraps, time to move on to the next letter.

Then for each of the 4 columns, you need 4 tables (for 4 rows) that tell which char will be used in that position of the letter.

For example, code for column 0:

ldy #0
lda (textptr),y ;current letter of scrolltext
tax
lda col0row0tbl,x
sta $0400+21*40+39
lda col0row1tbl,x
sta $0400+22*40+39
lda col0row2tbl,x
sta $0400+23*40+39
lda col0row3tbl,x
sta $0400+24*40+39

How you edit the big charset and generate those tables, is another headache...


I was supplied a paint magic picture of a 4x4 charset and turned it into Koala paint format, then I turned this into font + screen format using Centauri Logo editor. The char displays something like this:

ABCDEFGHIJ
KLMNOPQRST
UVWXYZ 012
3456789!'?
().,:, etc

If this is the screen data (logo type of format), should I use the screen data that forms the letter as the table for mapping the text to screen?

For example:
4x4 Character letter 'A'

letter_a_row1 dc.b $01,$02,$03,$04
letter_a_row2 dc.b $09,$0A,$0B,$0C
letter_a_row3 dc.b $1D,$1E,$1F,$21
letter_a_row4 dc.b $35,$36,$37,$38



2006-07-17 19:25
Tch
Account closed

Registered: Sep 2004
Posts: 512
something like that,though:

K= #$0B
U= #$15
3= #$33

so you are fucking up somewhere...
2006-07-18 05:29
Style

Registered: Jun 2004
Posts: 498
I think i did a 4x4 for revenge (or maybe 3x3) in my early days.

From memory the font was drawn in 'centauri logo editor' taking care to construct each letter of the same char definitions. Using the block copy helps.

then you save as screen + charset and voila.

Cant remember how I setup the tables, possibly just pointers into the screen data........

2006-07-18 18:44
Honesty

Registered: Jan 2003
Posts: 121
Normally you had 4 maps for every x row an own.
Then asl asl to get the start of it.

Store value and use another counter to check if all 4 chars had been desplayed, when yes fetch the next char from scroll.
2006-07-18 19:18
cadaver

Registered: Feb 2002
Posts: 1160
Yes, that's actually much simpler and ninjasweeter than what I posted, if you have 64 chars max in your charset.
So it'd be like..

lda (textptr),y ;scrolltext letter ranging from 0 to 63
asl
asl ;now multiplied by 4
ora column ;column counter value from 0 to 3
tax
lda row1tbl,x
sta $0400+21*40+39
lda row2tbl,x
sta $0400+22*40+39
lda row3tbl,x
sta $0400+23*40+39
lda row4tbl,x
sta $0400+24*40+39
2006-07-18 19:27
Tch
Account closed

Registered: Sep 2004
Posts: 512
You can have more than 64..

Usually the: !.,I etc. are not 4 wide. ;)
2006-07-19 04:36
Honesty

Registered: Jan 2003
Posts: 121
Yeah sure you can had more then 64 chars, but this will need some extra tabs with the startposition from the map and another for the length of char.(more memory) and when having an I or a 1 that can be checked from scroll routine and replace the spaceholder for x amount of chars.

2008-09-18 18:43
Warnock

Registered: Sep 2007
Posts: 28
I know this is old....but

4x4 Scroll Routine By: Warnock/Style

This is just the routine. You'll need a start address for
this to work. Can be inserted in existing page...provided
you have four rows available on the screen.
Good Luck!!

This scroll routine uses four char locations.
For Example:
Part 1 $2000
Part 2 $2800
Part 3 $3000
Part 4 $3800



spos .byte $ff
;---------------------------------------
scroll dec sp+1
dec sp+1
dec sp+1
dec sp+1
ora #$07
cmp #$fd
lda sp+1
cmp #$cf
beq px
jmp end
px lda #$d7
sta sp+1

ldx #$00
move lda $0400+761,x
sta $0400+760,x ;row 1
lda $0400+801,x
sta $0400+800,x ;row 2
lda $0400+841,x
sta $0400+840,x ;row 3
lda $0400+881,x
sta $0400+880,x ;row 4
inx
cpx #$27
bne move

read lda text
bne sidepick

lda #<text
sta read+1
lda #>text
sta read+2
jmp read

sidepick ldy #$03 ;values for which char to print
cpy #$01 ;to the screen 4, 3, 2, 1
beq left1
cpy #$02
beq left2
cpy #$03
beq right1
cpy #$04
beq right2
jmp end

left1
sta $0400+760+39 ;row 1 cset1
sta $0400+800+39 ;row 2
sta $0400+840+39 ;row 3
sta $0400+880+39 ;row 4

lda #$02
sta sidepick+1
jmp end ;jmp $73c6

left2
clc
adc #$40
sta $0400+760+39 ;row1 cset2
sta $0400+800+39 ;row2
sta $0400+840+39 ;row3
sta $0400+880+39 ;row4

lda #$03
sta sidepick+1
jmp end
right1
clc
adc #$80
sta $0400+760+39 ;row1 cset3
sta $0400+800+39 ;row2
sta $0400+840+39 ;row3
sta $0400+880+39 ;row4

lda #$04
sta sidepick+1
jmp end

right2
clc
adc #$c0
sta $0400+760+39 ;row1 cset4
sta $0400+800+39 ;row2
sta $0400+840+39 ;row3
sta $0400+880+39 ;row4


lda #$01
sta sidepick+1

inc read+1
bne end
inc read+2
jmp end

end rts
;---------------------------------------
text .byte $20,$14,$05,$13,$14,$09
.byte $0e,$07,$20,$14,$08,$09
.byte $13,$20,$13,$03,$12,$0f
.byte $0c,$0c,$05,$12,$2e,$20
.byte $20,$20,$20,$20,$20,$20
.byte $20,$20,$20,$20,$20,$20
.byte $00

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
marley
celticdesign/G★P/M..
aNdy/AL/Cosine
Wiklund/Fairlight
sln.pixelrat
rexbeng
rambo/Therapy/ Resou..
kbs/Pht/Lxt
Guests online: 154
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 Musicians
1 Rob Hubbard  (9.7)
2 Mutetus  (9.7)
3 Jeroen Tel  (9.7)
4 Linus  (9.6)
5 Stinsen  (9.6)

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