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 > Proposal - The sprite font compo!
2019-07-14 15:56
Shadow
Account closed

Registered: Apr 2002
Posts: 355
Proposal - The sprite font compo!

Last year there was the hugely successful 128b font competition, which had a very good turnout.
Lots of people who could compete since it was pretty simple code, and the result were lots of nice fonts which can be a good tool to have for sizecoding stuff.
It got me thinking about arranging a similar compo, but for sprite fonts!
But before kicking the compo off, I'd like some input on the rules etc.
Here's what I have so far:

* The object of the competition is to generate a sprite-font, in 256 bytes or less code.
* The code should be placed at $0900 and up, but no further than $09ff and must end with an RTS.
* The sprites should be placed at $2000-$2fff, so sprite number $80-$bf.
* 64 sprites are viewed, but it is up to the coder to decide how many he want to generate, but to be considered a font, at least sprite $81-$9b should be readable as the letters A-Z.
* For the other sprites, you can of course generate the appropriate numbers/punctuation characters, or spaceships or whatever, or not generate them at all and spend all your bytes on doing fancier A-Z, it's up to you to decide what will impress the voters most! :)
* Since the code to actually view the sprites would take quite some space, and the competition should not be about that optimizing the viewer code (or who can do the coolest looking viewer) I will provide the code that displays the 64 sprites on screen, it will occupy $0801-$08ff, and will perform a JSR to $0900 where your font generation code should be.
* The viewer has a number of tweakable parameters that are placed on $0810-$0814:
$0810 - $00=Sprites should be singlecolor. $ff=Sprites should be multicolor
$0811 - Bakground and border color.
$0812 - Sprite base color ($d027-$d02e will be set to this)
$0813 - Sprite multicolor1 ($d025 will be set to this)
$0814 - Sprite multicolor2 ($d026 will be set to this)
Simply change these bytes directly in the viewer code (if you compile it) or in the final binary if you use that, they should not be set from you generator code, as this is also not something that should steal your precious space.
* The generator code may *not* depend on A,X,Y holding specific startup values, or memory being initialized to something specific (you may for example not pull data from the viewer code and use etc.).
* Max three entries per coder
* Voting will be done using the CSDb system (yeah, I'm not as cool as lft!)
* No prizes except eternal glory.

Here's the viewer code for Kick Assembler usage, with a place to put your generator code at the end:
.pc =$0801 "Basic Starter"
:BasicUpstart($0820)

.pc=$0810 "Constants"
multicol:
	.byte $00
bgcol:
	.byte $06
sprcol:
	.byte $0e
sprmcol1:
	.byte $00
sprmcol2:
	.byte $00

.pc = $0820 "Code"
		sei
		lda multicol
		sta $d01c
		lda bgcol
		sta $d020
		sta $d021
		lda sprmcol1
		sta $d025
		lda sprmcol2
		sta $d026
		lda sprcol
		ldx #$07
!loop:		
		sta $d027,x
		dex
		bpl !loop-
		ldx #$00
		lda #$20
!loop:		
		sta $0400,x
		sta $0500,x
		sta $0600,x
		sta $0700,x
		inx
		bne !loop-
		lda #$ff
		sta $d015
		lda #$80
		sta $d010
		ldx #$07
		ldy #$00
		lda #$18+44
!loop:	
		sta $d000,y
		clc
		adc #29
		iny
		iny
		dex
		bpl !loop-
		jsr generatefont
		lda #$35
		sta $01
mainloop:
		lda #$2f
		sta ycoord
		lda #$80
		sta spridx
yloop:
		lda ycoord
!wait:
		cmp $d012
		bne !wait-		
		clc
		adc #4
		ldx #$07
		ldy #$00		
!loop:		
		sta $d001,y
		iny
		iny
		dex
		bpl !loop-
		ldx #$00
		ldy spridx		
!loop:		
		tya
		sta $07f8,x
		iny
		inx
		cpx #8
		bne !loop-
		clc
		lda spridx
		adc #8		
		sta spridx
		lda ycoord
		adc #25
		sta ycoord
		cmp #$2f+8*25
		bne yloop
		jmp mainloop

ycoord:
		.byte 0	
spridx:
		.byte 0

.pc=$0900 "Font generation code"	
generatefont:
		rts


Yes, code is neither pretty nor optimal, but that's not the point here, the pretty code should be written by YOU! :D

If you prefer some other assembler, here's the prebuilt binary for the $0801-$08ff portion:
sprite_font_view_base.prg

Here are some simple examples I've done to prove that it actually works:
Sprites using ROM font scaled to 3x3 pixel size. $0810 params set to : $00,$06,$0e,$00,$00
example1.prg


Exact same font but with multicolor params set (works this way as well!) $0810 params set to : $ff,$0b,$0c,$0f,$0f
example2.prg


So does these rules make sense?
I've been thinking a lot about the 256 byte limit, but I think it should be large enough to do some interesting things. My naive implementation of scaling up the ROM font is $9a bytes, which leaves plenty of space for actually tweaking the font, and I am sure some smart coders can do it in way less space.
I've been thinking on the possibility of generating a font from scratch using partial segments, not sure yet if it's doable in 256 bytes.
Unless someone has some compelling arguments, the 256 byte limit stands.
What's an appropriate time for such an event? Two months? Three?

And finally, does this seem like fun? Anyone think they will participate? :)
2019-07-15 22:22
bugjam

Registered: Apr 2003
Posts: 2589
Sounds like fun to watch. :-)
2019-07-16 07:02
ChristopherJam

Registered: Aug 2004
Posts: 1409
Nice idea, I'd certainly like to see what people come up with.

The deadline would need to be at least a couple of months away if I was going to do an entry myself.

The rules look pretty good on the whole.

I like that there'd be a set viewer for the compo, partly because as you pointed out it ensures people aren't giving more points for the fanciest viewer, and also because it leaves more headspace for working on the font itself.

I'd lean towards also include the digits and a few specific punctuation marks, perhaps .?()-

Can I request that the order of the characters not be significant as long as they're all present? Scroller text can always be remapped offline.

256 byte limit at a set alignment sounds good, especially as that doesn't include viewer or basic stub or autostart.
2019-07-16 11:24
hedning

Registered: Mar 2009
Posts: 4732
Go go go!
2019-07-16 12:30
Jammer

Registered: Nov 2002
Posts: 1335
Me likes! :)
2019-07-16 14:07
TheRyk

Registered: Mar 2009
Posts: 2244
Not so sure if the output will vary a big deal from CharROM Font Compo as many people might use ROM again and the only difference is the code to transform stuff into sprite data, so indeed rather a coder compo. But maybe there'll be surprises. Anyway, bring it on :)
2019-07-16 19:14
ws

Registered: Apr 2012
Posts: 251
So - just to be sure - the viewer code is not part of the 256 bytes limit?
2019-07-16 22:31
TheRyk

Registered: Mar 2009
Posts: 2244
good question as the example code DOES include setting VIC sprite regs
2019-07-16 22:59
Shadow
Account closed

Registered: Apr 2002
Posts: 355
Yes, the viewer code is provided as is and should NOT be counted towards the 256 bytes.
The font-generator code you write is placed from $0900-$09ff and may use those full 256 bytes.

So just to be clear, the end result PRG should not be a 256 byte binary, instead it's the 257 bytes (for viewer code + load address) PLUS your code, so the ending .PRG file may be as big as 513 bytes.

The challenge is to write a subroutine (that can be used from another program) in 256 or less bytes that creates a sprite font.
2019-07-17 00:45
Compyx

Registered: Jan 2005
Posts: 631
Is the code showing the sprites ($0801-$08ff) fixed, or will it change?
2019-07-17 00:59
Shadow
Account closed

Registered: Apr 2002
Posts: 355
Quote: Is the code showing the sprites ($0801-$08ff) fixed, or will it change?

Once the compo starts it will be fixed (right now I'm still open to suggestions) - however, you'll not be allowed to take advantage of that specific code in your generator (ie. specific register values set before the jsr etc.) - the generator must be able to run standalone. The viewer-part is just there so that people easily can view your font.
 
... 17 posts hidden. Click here to view all posts....
 
Previous - 1 | 2 | 3 - 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
Flashback
Shake/Role
HOL2001/Quantum
Steffan/BOOM!
diabolus
The Human Co../Maste..
LightSide
Guests online: 105
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 Layers  (9.6)
2 No Listen  (9.6)
3 Cubic Dream  (9.6)
4 Party Elk 2  (9.6)
5 Copper Booze  (9.6)
6 Rainbow Connection  (9.5)
7 Dawnfall V1.1  (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 Triad  (9.3)
5 Censor Design  (9.3)
Top Crackers
1 Mr. Z  (9.9)
2 Antitrack  (9.8)
3 OTD  (9.8)
4 Fungus  (9.8)
5 S!R  (9.8)

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