Jump to content
IGNORED

INTYColor tutorial


Tarzilla

Recommended Posts

Looking for a way to learn INTYBasic? One of the ways to quickly get something pretty up on the screen is to use the INTYColor utility included with the newer versions.

 

I have been working on this for awhile, mostly for my own purposes, but here is a step by step walkthru on how to create a screen compatible with Nanochess's wonderful tool.

 

 

 

 

IntyColor Tutorial v1.pdf

  • Like 6
Link to comment
Share on other sites

Looking for a way to learn INTYBasic? One of the ways to quickly get something pretty up on the screen is to use the INTYColor utility included with the newer versions.

 

I have been working on this for awhile, mostly for my own purposes, but here is a step by step walkthru on how to create a screen compatible with Nanochess's wonderful tool.

 

 

Pretty cool tutorial!

 

Thanks for your effort :) :thumbsup:

Link to comment
Share on other sites

Looking for a way to learn INTYBasic? One of the ways to quickly get something pretty up on the screen is to use the INTYColor utility included with the newer versions.

 

I have been working on this for awhile, mostly for my own purposes, but here is a step by step walkthru on how to create a screen compatible with Nanochess's wonderful tool.

 

 

 

 

Apparently I forgot the .zip file

IntyColorTutorial.zip

  • Like 3
Link to comment
Share on other sites

  • 1 month later...

Hello

thanks for the tutorial

 

I need help:

If I just use the .bas source produced in the example, and after that I add some PRINT

 

PRINT AT 0 COLOR 7,"Welcome human"
PRINT AT 40 COLOR 7,"Play versus"
PRINT AT 60 COLOR 7,"Intellivision"

I obtain unwanted characters with balck background: what do I do to PRINT message over the background?

Edited by vprette
Link to comment
Share on other sites

Hello

thanks for the tutorial

 

I need help:

If I just use the .bas source produced in the example, and after that I add some PRINT

 

PRINT AT 0 COLOR 7,"Welcome human"

PRINT AT 40 COLOR 7,"Play versus"

PRINT AT 60 COLOR 7,"Intellivision"

 

I obtain unwanted characters with balck background: what do I do to PRINT message over the background?

 

You are seeing a limitation of Mode 1 Foreground Background mode. You lose the lower case character set.

Change the text

PRINT AT 0 COLOR 7,"WELCOME HUMAN"
PRINT AT 40 COLOR 7,"PLAY VERSUS"
PRINT AT 60 COLOR 7,"INTELLIVISION"

Color Stack mode doesn't have this limitation, but I find F/B mode easier to create screens with.

Link to comment
Share on other sites

I obtain unwanted characters with balck background: what do I do to PRINT message over the background?

 

The color parameter is confusing because it simply sends the value to the STIC. It assumes you understand how the color parameter is formed, where from a high level a programmer might expect something more like this:

 

Print at 20, color 2,4, "Test" where 2 is the foreground color and 4 is the background color.

 

Instead you have to use bitwise addition to set both foreground and backgound colors in one number. I'm just heading into a meeting so if Nanochess or others don't chime in I'll respond later tonight.

Link to comment
Share on other sites

Wish I would have known about that! Then I wouldn't of had to make SpriteAid!

Before IntyBasic came out I started down the road of pure assembler (and basically read every thread in the Intellivision Programming sub forum and in the Yahoo group) Somewhere in there was this link. Between it and Paint.net/ IntyColor I've not felt the need to create any of my own tools (which I normally would have plus learning the STIC and using Constant statements for various color and MOB parameters helps too)

 

Now if Intycolor had the option to convert tiles to BITMAP statements instead of just DATA, this add-on for Paint.Net would be really handy.

  • Like 1
Link to comment
Share on other sites

  • 8 years later...
11 hours ago, Kiwi said:

screen_bitmap_0: are your tilesets

Since you can only load 16 cards/tiles before a wait, it will show more screen_bitmap_1 up to screen_bitmap_3.

screen_cards: is the name table/backtab for the tiles placed on screen. 


Just to add, you use DEFINE to load the bitmaps, and you use SCREEN load the cards.

 

I believe one of the books walks you through an example of how to draw graphics and use IntyColor to render them on the screen.

 

   dZ.

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

Thanks both of you. Sorry for being thick. 

I understand that, for the specific example in the tutorial, INTYcolor generates the following 7 bitmaps in total that are loaded into GRAM with the DEFINE statement:

 

          DATA $0100,$0D07,$1F1F,$FF7F

          DATA $76E0,$BA6F,$F7CD,$FFFF

          DATA $0000,$0000,$0100,$0303

          DATA $0701,$3F1F,$FF7F,$FFFF

          DATA $0707,$0707,$1F0F,$FF3F

          DATA $FFFF,$E3EF,$CBC1,$FFF7

          DATA $F7FF,$E1F3,$C1E3,$F7E3

 

I also understand that for example for the first card/tile:

 

DATA $0100,$0D07,$1F1F,$FF7F

 

is equivalent to:

 

BITMAP "........"
BITMAP ".......x"
BITMAP ".....xxx"
BITMAP "....xx.x"
BITMAP "...xxxxx"
BITMAP "...xxxxx"
BITMAP ".xxxxxxx"
BITMAP "xxxxxxxx"

 

Then the SCREEN statement copies a full screen of 20x12 cards by using the label screen_cards to point to the data below

 

screen_cards:

DATA $1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200

DATA $1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200

DATA $1200,$1A07,$1A0F,$1200,$1A07,$1A0F,$1200,$1200,$1200,$1200

DATA $1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200

DATA $1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200

DATA $1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200

DATA $1200,$1200,$1200,$1200,$1200,$1200,$1A07,$1A0F,$1200,$1200

DATA $1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200

DATA $1200,$1200,$1A07,$1A0F,$1200,$1200,$1200,$1200,$1200,$1200

DATA $1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200

DATA $1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200

DATA $1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1A16,$1A1E

DATA $1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1A07,$1A0F

DATA $1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1A26,$2400

DATA $1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200

DATA $1200,$1200,$1200,$1200,$1200,$1200,$1A16,$1A1E,$282E,$2400

DATA $1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200

DATA $1200,$1200,$1200,$1200,$1200,$1200,$1A26,$2400,$2400,$2400

DATA $1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200

DATA $1200,$1200,$1200,$1200,$1A16,$1A1E,$2400,$282E,$2400,$2400

DATA $1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200

DATA $1200,$1200,$1200,$1200,$1A26,$2836,$2400,$2400,$2836,$2400

DATA $1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200

DATA $1200,$1200,$1A16,$1A1E,$2400,$2400,$2400,$2400,$2400,$2400

 

This is where I get lost. I can see that every two rows of data represent a row of 20 cards for a total of 12 rows in total on the screen, but I don't fully understand the meaning of these hex numbers. For example, what does $1200 mean or refer to? I thought that screen is composed of combination of those 7 cards/tiles.

 

Thanks a lot!

screen.png

Edited by Alkadian
Link to comment
Share on other sites

Hi,

 

You have to understand the meaning of the STIC internal registers.

There is a good documentation here : http://wiki.intellivision.us/index.php?title=STIC

And this tool helps to build up the register content : http://knox.ac.free.fr/inty_workshop/ (go to BACKTAB tab)

 

In you case $1200 comes from :

- FG/BG mode

- Foreground color : 0

- Background color : 9

- Card : 0

 

 

  • Thanks 1
Link to comment
Share on other sites

50 minutes ago, YannAros said:

Hi,

 

You have to understand the meaning of the STIC internal registers.

There is a good documentation here : http://wiki.intellivision.us/index.php?title=STIC

And this tool helps to build up the register content : http://knox.ac.free.fr/inty_workshop/ (go to BACKTAB tab)

 

In you case $1200 comes from :

- FG/BG mode

- Foreground color : 0

- Background color : 9

- Card : 0

 

 

Thanks for clarifying. The second tool is great! 

There is still something that I don't get (sorry I am still trying to get my head around many concepts). 

$1200 = 00010010 00000 000

                                      (Foreground colour =0)

                                      (Card number  =0)

                                      (GROM  =0)

                                      (Background colour  = $1001 = 9)

 

So far so good, but card 0 is not the one defined by:

 

DATA $0100,$0D07,$1F1F,$FF7F

 

On the screen card 0 looks like and empty card.

 

Sorry for the confusion :)

 

Thanks!

FGMG mode.png

Edited by Alkadian
Link to comment
Share on other sites

14 minutes ago, Alkadian said:

Thanks for clarifying. The second tool is great! 

There is still something that I don't get (sorry I am still trying to get my head around many concepts). 

$1200 = 00010010 00000 000

                                      (Foreground colour =0)

                                      (Card number  =0)

                                      (GROM  =0)

                                      (Background colour  = $1001 = 9)

 

So far so good, but card 0 is not the one defined by:

 

DATA $0100,$0D07,$1F1F,$FF7F

 

On the screen card 0 looks like and empty card.

 

Sorry for the confusion :)

 

Thanks!

FGMG mode.png


You got your own answer right there:  it is card #0 from GROM.  If you look at the layout of the cards built into the Graphics ROM, you will see that card #0 is the empty space -- that is, all zeros all the way.


http://wiki.intellivision.us/index.php/Graphics_ROM


The bitmaps that IntyColor generated are for additional custom cards for Graphics RAM (GRAM).

 

Your scene is built with a combination of cards from the built in set in GROM as well as the custom cards in GRAM.

 

    dZ.

  • Thanks 1
Link to comment
Share on other sites

Oh dear! Thanks a lot for pointing that out! 

 

So if I understood correctly, for example at the card position 21 on the screen we are using card #0 from the GRAM. Is that correct, please?

 

screen_cards:

DATA $1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200

DATA $1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200

DATA $1200,$1A07,$1A0F,$1200,$1A07,$1A0F,$1200,$1200,$1200,$1200

 

Thanks!

Screenshot 2023-09-18 at 17.51.33.png

Edited by Alkadian
Link to comment
Share on other sites

For additional context and clarity, Intellivision graphics are character-based:  all graphics (screen and sprites) are composed of individual 8x8 pixel character blocks.  These characters are typically called "pictures," because they are glyphs that can represent generically either graphical elements or text.

 

The Intellivision supports two main classes of character definitions:  those statically and permanently stored internally in ROM (called Graphics ROM or GROM), and those dynamically defined in RAM (called Graphics RAM or GRAM).

 

There are 256 GROM cards, which include a combination of the text character fonts, some basic geometric shapes such as lines and triangles, and even a bit of random garbage.  (These last ones are technically not pictures, but the designers stole a bit of space from GROM to store part of the built-in operating system when it overflowed.  Still, it is data stored in GROM and addressable like any other picture, so ...)

 

Likewise, there are 64 slots for custom pictures in GRAM.  They can be changed, in whole or in part, at any point by your program using the DEFINE statement (which will be buffered until the next VBLANK interrupt).

 

These are all the pictures available to your program, no more.  There are no individual pixels that can be addressed, nor run-time drawing routines.  All graphics for screens and sprites must be composed of these.  There are some restrictions on the GROM cards available in some color modes, but in general that is it.


The cruel irony to the programmer is that the BACKTAB has 240 cards, but GRAM can only contain a fraction of that at any one time.  This means you need to plan for reuse, and be creative, which is not really a bad thing.


I hope this helps.

 

    dZ.

 

 

  • Thanks 1
Link to comment
Share on other sites

9 minutes ago, Alkadian said:

Oh dear! Thanks a lot for pointing that out! 

 

So if I understood correctly, for example at the card position 21 on the screen we are using card #0 from the GRAM. Is that correct, please?

 

screen_cards:

DATA $1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200

DATA $1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200,$1200

DATA $1200,$1A07,$1A0F,$1200,$1A07,$1A0F,$1200,$1200,$1200,$1200

 

Thanks!

Screenshot 2023-09-18 at 17.51.33.png


Correct-o-mondo!!! :)

 

Trust me, it gets better once you wrap these things around your brain.

 

   dZ.

  • Thanks 1
Link to comment
Share on other sites

5 minutes ago, DZ-Jay said:

For additional context and clarity, Intellivision graphics are character-based:  all graphics (screen and sprites) are composed of individual 8x8 pixel character blocks.  These characters are typically called "pictures," because they are glyphs that can represent generically either graphical elements or text.

 

The Intellivision supports two main classes of character definitions:  those statically and permanently stored internally in ROM (called Graphics ROM or GROM), and those dynamically defined in RAM (called Graphics RAM or GRAM).

 

There are 256 GROM cards, which include a combination of the text character fonts, some basic geometric shapes such as lines and triangles, and even a bit of random garbage.  (These last ones are technically not pictures, but the designers stole a bit of space from GROM to store part of the built-in operating system when it overflowed.  Still, it is data stored in GROM and addressable like any other picture, so ...)

 

Likewise, there are 64 slots for custom pictures in GRAM.  They can be changed at any point by your program using the DEFINE statement (which will be buffered until the next VBLANK interrupt).

 

These are all the pictures available to your program, no more.  All graphics for screens and sprites must be composed of these.  There are some restrictions on the GROM cards available in some color modes, but in general that is it.


I hope this helps.

 

    dZ.

 

 

@DZ-Jay, many thanks for these additional clarifications. Very, very helpful indeed! Thanks again a ton for finding the time and patience to provide me with so valuble and clear information. I am writing all of it on my notebook! I am so happy :)

Link to comment
Share on other sites

Just now, Alkadian said:

@DZ-Jay, many thanks for these additional clarifications. Very, very helpful indeed! Thanks again a ton for finding the time and patience to provide me with so valuble and clear information. I am writing all of it on my notebook! I am so happy :)


No worries.

 

By the way, your avatar ... it looks like a Japanese cartoon I used to watch when I was a kid (when the Loony Tunes and Road Runner cartoons were not around).  I don't recall anything about it, other than that the captain used to fly around in space in a WWII destroyer.  Is that character from that cartoon?  What is the name of that cartoon?

  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...