| | 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! |
|
... 4 posts hidden. Click here to view all posts.... |
| | tlr
Registered: Sep 2003 Posts: 1790 |
You could also use something like this: Backdrop Designer V1.2.
|
| | 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... |
| | 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
|
| | Tch Account closed
Registered: Sep 2004 Posts: 512 |
something like that,though:
K= #$0B
U= #$15
3= #$33
so you are fucking up somewhere... |
| | 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........
|
| | 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.
|
| | 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
|
| | Tch Account closed
Registered: Sep 2004 Posts: 512 |
You can have more than 64..
Usually the: !.,I etc. are not 4 wide. ;) |
| | 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.
|
| | 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
|
Previous - 1 | 2 - Next | |