Hi good afternoon.
how can you set the tiles to 16 bit please?
can you also print the tiles on layer0 with 2 byte?
Thanks.
greeting
how can you set the tiles to 16 bit?
- ahenry3068
- Posts: 1146
- Joined: Tue Apr 04, 2023 9:57 pm
Re: how can you set the tiles to 16 bit?
This is getting outside my experience as I've been concentrating on 8 bit graphics. I suspect you mean 16 COLOR which is actually 4 bit tiles. You have to know the numbers to get it correct 1 bit --> 2 color, 2 bit --> 4 colors , 4 bit --> 16 colors, 8 bit --> 256 colors.
Re: how can you set the tiles to 16 bit?
I meant can you set the tiles to 16 bit width?
Thanks.
greeting
Thanks.
greeting
Re: how can you set the tiles to 16 bit?
Funkheld,
Tiles can only be set to 8x8, 8x16, 16x8 or 16x16 ..
The height and width are set in the tilebase register for the layer ->
$9F2F L0_TILEBASE Tile Base Address (16:11) | Tile Height | Tile Width
$9F36 L1_TILEBASE Tile Base Address (16:11) | Tile Height | Tile Width
IE -
set $9F36 equal to ((TILEBASE_ADDRESSS >> 9) & $FC) + (TILE_HEIGHT_IS_16 < 1) + TILE_WIDTH_IS_16
or something like -
POKE $9F36,((TILEBASE_ADDRESS/2048) AND $FC) + (TILE_HEIGHT_IS_16*1) + ( TILE_WIDTH_IS_16)
in the emulator ...
?PEEK($9F36)
gave me 248 ... so +1 to make it use tiles 16 wide..
POKE $9F36,249
corrupts the basic screen but hopefully it is clear that it is corrupted by incorrectly interpreting the tiles as 16x8 now.
One would have to load tiles of the correct size for this to work cleanly.
Tiles can only be set to 8x8, 8x16, 16x8 or 16x16 ..
The height and width are set in the tilebase register for the layer ->
$9F2F L0_TILEBASE Tile Base Address (16:11) | Tile Height | Tile Width
$9F36 L1_TILEBASE Tile Base Address (16:11) | Tile Height | Tile Width
IE -
set $9F36 equal to ((TILEBASE_ADDRESSS >> 9) & $FC) + (TILE_HEIGHT_IS_16 < 1) + TILE_WIDTH_IS_16
or something like -
POKE $9F36,((TILEBASE_ADDRESS/2048) AND $FC) + (TILE_HEIGHT_IS_16*1) + ( TILE_WIDTH_IS_16)
in the emulator ...
?PEEK($9F36)
gave me 248 ... so +1 to make it use tiles 16 wide..
POKE $9F36,249
corrupts the basic screen but hopefully it is clear that it is corrupted by incorrectly interpreting the tiles as 16x8 now.
One would have to load tiles of the correct size for this to work cleanly.
Re: how can you set the tiles to 16 bit?
thanks a lot.
249 works with tile-x 16.
value do you take for tile-y 16 please = 248+1+?
I can't figure out how to do the math for this.
Thanks.
greeting
249 works with tile-x 16.
value do you take for tile-y 16 please = 248+1+?
I can't figure out how to do the math for this.
Thanks.
greeting
Re: how can you set the tiles to 16 bit?
Funkheld,
Oops.. I made a mistake in my earlier maths..
The POKE was wrong... because to set Y for the tiles to 16, you have to add 2 ( VAR < 1 is same as VAR *2 )
which gives this for that tilebase -
248 => 8x8
249 => 16x8
250 => 8x16
251 => 16x16
this is of course using that tilebase that is already set for layer1 in BASIC mode - using the 8x8 character set copied from ROM to $1:F000 - which is pretty much cramped in there ! ->
$1:F000-$1:F7FF Charset
$1:F800-$1:F9BF unused (448 bytes)
$1:F9C0-$1:F9FF VERA PSG Registers (16 x 4 bytes)
if you are going to use tiles that are 16x8 or 8x16, those are 2x the size of 8x8, and if using 16x16, that is 4x the size!
So if you plan on using these larger tile sizes, you should set the tilebase to a different location in VRAM!
(You'll know when you overwrite out of the available space because the sound chip will start doing stuff, colors will corrupt, and finally sprites may appear or do weird things as you write further into reserved VRAM )
for quick reference, 1Bpp tiles -
8x8 - each is 8 bytes, 256 tiles in a set => 2K
8x16 or 16x8 - each is 16 bytes => 4K
16x16 - each is 32 bytes => 8K
and are stored line by line - say a letter F maybe ?
01111111 11111000 01111111 11111000 01111111 00000000 01111111 11100000 01111111 11100000 01111111 00000000 01111111 00000000 00000000 00000000 And would appear in memory like 7F F8 7F F8 7F 00 7F E0 7F E0 7F 00 7F 00 00
Oops.. I made a mistake in my earlier maths..
^ this part was correct, where TILE_HEIGHT_IS_16 and TILE_WIDTH_IS_16 are 1 if true and 0 if false..set $9F36 equal to ((TILEBASE_ADDRESSS >> 9) & $FC) + (TILE_HEIGHT_IS_16 < 1) + TILE_WIDTH_IS_16
The POKE was wrong... because to set Y for the tiles to 16, you have to add 2 ( VAR < 1 is same as VAR *2 )
which gives this for that tilebase -
248 => 8x8
249 => 16x8
250 => 8x16
251 => 16x16
this is of course using that tilebase that is already set for layer1 in BASIC mode - using the 8x8 character set copied from ROM to $1:F000 - which is pretty much cramped in there ! ->
$1:F000-$1:F7FF Charset
$1:F800-$1:F9BF unused (448 bytes)
$1:F9C0-$1:F9FF VERA PSG Registers (16 x 4 bytes)
if you are going to use tiles that are 16x8 or 8x16, those are 2x the size of 8x8, and if using 16x16, that is 4x the size!
So if you plan on using these larger tile sizes, you should set the tilebase to a different location in VRAM!
(You'll know when you overwrite out of the available space because the sound chip will start doing stuff, colors will corrupt, and finally sprites may appear or do weird things as you write further into reserved VRAM )
for quick reference, 1Bpp tiles -
8x8 - each is 8 bytes, 256 tiles in a set => 2K
8x16 or 16x8 - each is 16 bytes => 4K
16x16 - each is 32 bytes => 8K
and are stored line by line - say a letter F maybe ?
01111111 11111000 01111111 11111000 01111111 00000000 01111111 11100000 01111111 11100000 01111111 00000000 01111111 00000000 00000000 00000000 And would appear in memory like 7F F8 7F F8 7F 00 7F E0 7F E0 7F 00 7F 00 00
Re: how can you set the tiles to 16 bit?
hello , thanks for the mathe.
thanks
greeting.
thanks
greeting.