Jump to content
IGNORED

C compiler for Intellivision


vprette

Recommended Posts

I'm thinking how to fund the development of a C compiler that produce intv assembly code.

One expert developer that I have contacted could start to work on this interface, but he needs to be paid and I need to share with you comments about this potential project.

- is it a C compiler the best choice? or would be better to work on a Basic skd like the Batari Basic?

- could this project be candidate for a kickstarter campain? I doubt since the product would be not a game or commercial item but a free tool that only target the developers.

- should the tool include separate expansions dedicated to Sprite editing, Sound conversion and more?

 

I strongly believe that a C or Basic compiler with visual gui would push new people to develop original games for the platform

Edited by vprette
Link to comment
Share on other sites

I guess it depends on who you want to target. The developer crowd that is already familiar with C and ASM is already comfortable with ASM. Those same developers wont switch to C. You'll have little impact with existing developers.

 

Something like batari BASIC would bring in a whole new set of game developers. Fresh blood. MORE BLOOD!

 

..I'm going back indoors before the sun rises..

Link to comment
Share on other sites

I guess it depends on who you want to target. The developer crowd that is already familiar with C and ASM is already comfortable with ASM. Those same developers wont switch to C. You'll have little impact with existing developers.

 

Something like batari BASIC would bring in a whole new set of game developers. Fresh blood. MORE BLOOD!

 

..I'm going back indoors before the sun rises..

we need new developers, the target would be to help people that want to approach the intv... like I did with Colossal Cave, that is incomplete because for me it has been quite an effort to deal with assembly

Link to comment
Share on other sites

There are generations of game makers bred on higher level languages. batari proved that resource constrained systems CAN handle accessible programming languages. Princess Rescue (among others) proved it can produce commercial quality work.

 

I'm telling you there are game makers and developers. Developers can make games. Game Makers cannot always develop - especially low level tools.

 

There is a huge untapped potential in people who could be labeled "Game Makers."

 

As a side I've got at least 8 Atari 2600 games and 2 PC games under my belt. I've entered Ludum Dare, Neo Flash and TIGSource contests. Who ever comes out with a BASIC development environment for a classic console first has my attention. I make games. I don't develop in C.

  • Like 1
Link to comment
Share on other sites

There are generations of game makers bred on higher level languages. batari proved that resource constrained systems CAN handle accessible programming languages. Princess Rescue (among others) proved it can produce commercial quality work.

 

I'm telling you there are game makers and developers. Developers can make games. Game Makers cannot always develop - especially low level tools.

 

There is a huge untapped potential in people who could be labeled "Game Makers."

 

As a side I've got at least 8 Atari 2600 games and 2 PC games under my belt. I've entered Ludum Dare, Neo Flash and TIGSource contests. Who ever comes out with a BASIC development environment for a classic console first has my attention. I make games. I don't develop in C.

so you are voting for a Basic compiler

Link to comment
Share on other sites

we need new developers, the target would be to help people that want to approach the intv... like I did with Colossal Cave, that is incomplete because for me it has been quite an effort to deal with assembly

Like theloon said, it depends on who you want to target. If what you want is to attract programmers to the platform so that they can be contracted by Elektronite to make professional games, then I suggest the best thing is to provide frameworks and tools.

 

The biggest challenge that keeps programmers away from the Intellivision is--in my opinion--the lack of abstraction, structure, and programming model of what is a very arcane hardware platform.

 

Learning the Assembly Language to put it all together is rather the easy part--figuring out from scratch, EVERY TIME, how to draw things on the screen, read the controllers, and playing sound effects; that is what zaps the enthusiasm and motivation out of anybody.

 

On the other hand, if your aim is to attract budding, inexperienced, lay people and invite them to join our community and learn the joys of the Intellivision, then a higher-level introductory language like BASIC should help.

 

However, notice that even batari Basic is not just the language, but a complete framework that tries to solve the "hard stuff" itself.

 

A C compiler helps you little if you still need to wrestle with the VBLANK interrupt timing and figure out how and when to update your STIC registers in order to move a MOB.

 

Using PEEK and POKE in Basic will not make it easier to read and decode the hand-controller input, and detect a disk press over a keypad one.

 

These should be (and were, back in the day) solved problems. Not having to deal with those esoteric idiosyncrasies directly goes a long way into letting a programmer work on the "fun stuff"--even if it is in Assembly.

 

That was my goal for P-Machinery 2.0: to provide a complete higher level framework and programming model that allows the programmer to do most hard things very easily.

 

Eventually, once that is out and working, I could work on a simple language compiler to sit on top if it. But that's the icing on the cake, as they say.

 

Again, the language is not the problem, it's the lack of programming model and higher level abstractions.

 

dZ.

  • Like 1
Link to comment
Share on other sites

Well, something accessible to those who grew up with third and forth generation languages. A relaxed syntax and focus on game logic instead of low level details is where it's at.

 

I think a visual IDE on top of P-Machinery with a scripting language for objects would do the trick.

 

UPDATE: The scripting language could just be a thin veil for pre-made assembly routines. The end user would just use the routine name, variables and parameters as if it were a higher level language construct.

Link to comment
Share on other sites

Well, something accessible to those who grew up with third and forth generation languages. A relaxed syntax and focus on game logic instead of low level details is where it's at.

 

I think a visual IDE on top of P-Machinery with a scripting language for objects would do the trick.

 

That would be sweet, but first I need to finish the framework. :)

 

UPDATE: The scripting language could just be a thin veil for pre-made assembly routines. The end user would just use the routine name, variables and parameters as if it were a higher level language construct.

That's pretty much how P-Machinery 2.0 is being built, using assembler macros. You'll still need to use Assembler, but the idea is to make available higher-level constructs.

 

For example, consider the input decoder, which I have completed already. There is an API that supports various decoders, and I wrote a few general ones already. You can write your own and "register" it with the framework like this:

 

   ;
   ; ... Code for 4-way "joystick" decoder ...
   ;
   ; Register it with the framework
   ; (arguments are decoder function, name)
   registerInputDecoder(decoderFunction, 4wayjoy)

This makes available to your game a decoder called "4wayjoy". All decoders follow a specific model and API, using some pre-defined data structures and interfaces.

 

To use it, first you include the decoder library file, and then you assign the decoder to a specific game state. Sort of like this:

 

   ;
   ; ... Declarations ...
   ;
   ; include decoder library.  "Include_lib" registers
   ; the library, and ensures it is included only once.
   include_lib("4wayjoy.asm")

   ; ...

   ; ...
   ; ... Game state definition for state "play", sub-state "main"
   ; 
   ; ...
   ; assign decoder to this state.
   ; (arguments are state, sub-state, decoder, data structure containing pointers to event handlers)
   setGameStateDecoder(stPLAY, subMAIN, 4wayjoy, myDispatchTable)

Now, whenever your game enters the PLAY::Main state, the 4wayjoy decoder will kick in automagically, and call the events defined in your dispatch table.

 

Defining the dispatch table is also simple. P-Machinery adds some very useful data structure types, like records, enumerations, arrays, associative arrays, etc.

 

; Define dispatch table
myDispatchTable RECORD
@@disc             EventHandler(DISC_ON)
@@keydown     EventHandler(NULL)
@@keyup         EventHandler(NULL)
@@btn1down   EventHandler(FIRE_ON)
@@btn1up.      EventHandler(FIRE_OFF)
; ...
                          ENDREC

Or you can use helper macros that abstract it for you:

   ; Assign event handlers to game state input decoder
    setGameStateEvent(stPLAY, subMAIN, 4wayjoy, evtDisc, DISC_ON)
   ; ...

(Note that these are examples off the top of my head. The interfaces haven't been finalized yet, and there's lots of work to be done still. That said, the basic, underlying event model and game engine are complete.)

 

Obviously, game logic still requires Assembly Language, but accessing game objects and structures can be done in a higher-level, object-oriented manner.

 

dZ.

  • Like 1
Link to comment
Share on other sites

The other key thing that P-Machinery will include is the concept of "Program Construction Kits" or PCK (PaCKs).

 

These will be entire libraries to support particular game types. For instance, I can envisage an Adventure PCK for something like Colossal Cave. It will already come with the keyboard decoder events already hooked up, and an input parser and tokenizer. It will then expose higher-level events, like when the user typed a new command line, and include the decoded "verb" and "noun" data structures associated to it.

 

That way, to make an adventure game, you define a "room," which has "doors"; and the rooms contain "objects," which are associated with nouns. The objects in turn are associated with "actions," which are the verbs the user can type.

 

You set your room map, connecting their doors, define their contents and the actions for your adventure; then define the game-play by handling the events triggered by user actions.

 

P-Machinery will abstract all that underlying piping and wiring, including game states, so that you may concentrate on the game-play and content at a higher level--even if still using Assembly Language. You can still create an unimaginable number of adventures, all different and unique. It's only the underlying mechanics that are common. Think Sierra Online or Infocom adventure games--in a smaller scale, of course.

 

Likewise, I envisage an Arcade PCK, Puzzle PCK, Synth PCK, Strategy PCK, etc.

 

Ambitious for sure, but I think perfectly doable and very useful! And if nobody ends up using it, at least it will allow me to make my own games. :)

 

Now, if I could only stop time from running... Need a PCK for that! :)

 

dZ.

Link to comment
Share on other sites

vprette,

great thread! :) I think you may not need a gui, just BASIC; someone can build a visual IDE on top of that as was done with batari BASIC for those who prefer an IDE.

 

Good points earlier about bB being a Framework - the 2600 is missing some some hardware that the Intellivision and even the Fairchild have so the bB Framework offers virtual hardware and various high level objects and commands to manipulate them that you can use either in BASIC or ASM. The nature of the batari BASIC compiler also allows it to be used with other development Frameworks, like the ASDK Framework linked in my signature.

 

You might just need to build a Framework if a Tiny BASIC compiler already exists for the Intellivision CPU, and since it's got a lot of the Hardware the 2600 is missing, your Framework wouldn't have to include as much.

Link to comment
Share on other sites

I liked the idea of intelliware, because it was windows based and seem to have everything you need there. the only available intelliware has bugs and many features dont work. For example I tried the Hello world program and I tried to convert it into rom and its said there were errors, but even with me just spying and pasting the code i still got the error message. After not being able to get the program to turn into a rom or even to play roms that work I gave up on intelliware. The old thing is last week I was playing with nostaglia and I tried running the hello world I made and in nostalgia the hello world worked, but when I run it on intelliware it wont. But I liked the concept of intelliware, it just needs to have the bugs removed and the other fetures listed on their activated. I also do like the basic idea. I am not a computer guy, but for some reason I can figure out basic.

  • Like 1
Link to comment
Share on other sites

I liked the idea of intelliware, because it was windows based and seem to have everything you need there. the only available intelliware has bugs and many features dont work. For example I tried the Hello world program and I tried to convert it into rom and its said there were errors, but even with me just spying and pasting the code i still got the error message. After not being able to get the program to turn into a rom or even to play roms that work I gave up on intelliware. The old thing is last week I was playing with nostaglia and I tried running the hello world I made and in nostalgia the hello world worked, but when I run it on intelliware it wont. But I liked the concept of intelliware, it just needs to have the bugs removed and the other fetures listed on their activated. I also do like the basic idea. I am not a computer guy, but for some reason I can figure out basic.

 

unfortunately I have no time to work on intelliware anymore, since this kind of project is very demanding. That's why I think about giving the tool to a developer. The new tool should have Basic interpreter but also provide separate feature for graphic and sound as it was in the intelliware idea.

There is this nice appraach done by Amiga people to raise money at amigabounty... hard to do the same for inty...

Link to comment
Share on other sites

unfortunately I have no time to work on intelliware anymore, since this kind of project is very demanding. That's why I think about giving the tool to a developer. The new tool should have Basic interpreter but also provide separate feature for graphic and sound as it was in the intelliware idea.

There is this nice appraach done by Amiga people to raise money at amigabounty... hard to do the same for inty...

Well, I think tools to generate graphics and sounds from a GUI do not necessarily have to be part of a specific compiler. They can stand on their own, as long as they generate data structures that are usable by an Intellivision program. This is the approach that Arnauld Chevallier was taking with web-based tools.

 

Obviously, in an ideal world, we'd have an integrated development environment, complete with a high-level language, end-to-end frameworks, a GUI, and additional tools for graphics and sound, all comprehensively linked. However, we do not live in an ideal world.

 

The truth is that right now, we have NOTHING, or barely anything. Most just have an assembler. So, any little tool that helps will go a long way in attracting more programmers.

 

I say, first target all those frustrated but talented programmers that for one reason or another either ignored or abandoned the platform due to its complexity and dearth of tools. Ease their burden with some tools and show them that the Intellivision still has fire in it.

 

Then, worry about polishing the tool chain to attract and help the absolute newbie.

 

If you aim for the latter, you'll either ignore the former's needs--or worse--get so wrapped up in the design of the end-all-be-all, all-encompassing, perfect kit for everybody, that nothing will ever get done.

 

As someone who has "talked the talk" for some time now, I say it's time we "walk the walk" and DO something. Full and complete kits can be built upon basic tools, but basic tools we lack.

 

dZ.

Link to comment
Share on other sites

What is this Intelliware of which you speak?

the intelliware is a GUI to the jzintv sdk that use a text editor with error message log and buttons to recall the feautres of jzintv, like make a rom/bin etc., and a gui for the player of the emulator. also my plan was to include sprite editor and sound converter.... is was quite succesfull according to thousands of dowloads.. but I could not proceed longer

Link to comment
Share on other sites

I liked the idea of intelliware, because it was windows based and seem to have everything you need there. the only available intelliware has bugs and many features dont work. For example I tried the Hello world program and I tried to convert it into rom and its said there were errors, but even with me just spying and pasting the code i still got the error message. After not being able to get the program to turn into a rom or even to play roms that work I gave up on intelliware. The old thing is last week I was playing with nostaglia and I tried running the hello world I made and in nostalgia the hello world worked, but when I run it on intelliware it wont. But I liked the concept of intelliware, it just needs to have the bugs removed and the other fetures listed on their activated. I also do like the basic idea. I am not a computer guy, but for some reason I can figure out basic.

 

As much as I pretended to be a "hot shot" programmer in high school (wow ... 20+ years ago), I'm not a programmer either but, like Voltron said, I have a decent background in basic as well. When I was playing around with coding, I always got frustrated by not understanding "the big picture" of how everything flowed through the code. In basic, you had goto and gosub commands so I could follow where things were going, but it has never fully clicked yet for the Inty. I'm pretty certain that's due to my lack of assembly background.

 

So, as a complete newbie who knows next to nothing, I like the basic idea ;).

  • Like 1
Link to comment
Share on other sites

But again, I say that BASIC alone wont help you--unless you build into the language constructs that abstract the hardware. But when you do this, you have a framework and you guide the programmer into a specific model of doing this.

 

When you have that, then the language is immaterial.

 

Put it this way, the BASIC in the ECS had sprite and sound capabilities. However, these weren't just extra commands. This was a dialect of BASIC built on top of the EXEC, so it exposed the EXEC's programming model and all it's facilities.

 

The EXEC was more than an Operating System, it was a run-time environment that provided common game routines, using a standardized set of patterns and data structures.

 

Using sprites in ECS BASIC, boxes you into the way the EXEC works, including its limitations (ignoring the limitations inherent in the ECS to begin with).

 

That's fine, but to get there the EXEC had to exist first.

 

You don't have that with a new BASIC compiler. You'll have to start from scratch. You build your model and your framework, and then a language on top. At that point, as I said above, the language doesn't matter because it is just syntax: keywords and statements.

 

dZ.

  • Like 1
Link to comment
Share on other sites

i think a C compiler would be the best option. Ideally would be something based on SDCC.

 

Look what happened to colecovision homebrew's scene, it has literally explosed! ... we have about 20-30 quality homebrews released per year now. It is incredible.

 

Ok , not all homebrew are done in C. Some are done in Assembly , other are simply port from MSX or SG1000 but a lot are done in C. At lot of homebrewer comes to the colecovision because of the C.

 

Personally, despite i know assembly , i prefer work in C for most of my work. I just go to assembly when it is absolutly necessary.

 

My Ghost'n Zombie on colecovision was done 100% in C , it was my very first dev on colecovision and if i did not find that C Development kit i would never start to develop on colecovision. and i guess if i had find it for Intellivision first , i would have done Ghost'n Zombie on Intellivision first.

 

All my others games for coleco are done mainly in C even if some of them have few assembly routines.

 

Having a C compiler on IntTV based on SDCC would be very great, it could help port quite quickly some of my game to Intellivision.

 

I would like do Ghost'n Zombie for Intellivision, i have already started some programing test on IntTV in that goal. But it requires i learn a new console, a new processor , a new assembly language ... and even all is extremely well documented for the IntTV (great thanks for all the actors for that) , it takes time i don't have. Having a C compiler, will speed up things for me!

 

Look at the Colecovision Development kit done by Daniel Bienvenu. Having the same thing for Intellivsion would be simply wonderfull!!!

  • Like 1
Link to comment
Share on other sites

That would be sweet, but first I need to finish the framework. :)

 

 

That's pretty much how P-Machinery 2.0 is being built, using assembler macros. You'll still need to use Assembler, but the idea is to make available higher-level constructs.

 

For example, consider the input decoder, which I have completed already. There is an API that supports various decoders, and I wrote a few general ones already. You can write your own and "register" it with the framework like this:

 

   ;
   ; ... Code for 4-way "joystick" decoder ...
   ;
   ; Register it with the framework
   ; (arguments are decoder function, name)
   registerInputDecoder(decoderFunction, 4wayjoy)
This makes available to your game a decoder called "4wayjoy". All decoders follow a specific model and API, using some pre-defined data structures and interfaces.

 

To use it, first you include the decoder library file, and then you assign the decoder to a specific game state. Sort of like this:

 

   ;
   ; ... Declarations ...
   ;
   ; include decoder library.  "Include_lib" registers
   ; the library, and ensures it is included only once.
   include_lib("4wayjoy.asm")

   ; ...

   ; ...
   ; ... Game state definition for state "play", sub-state "main"
   ; 
   ; ...
   ; assign decoder to this state.
   ; (arguments are state, sub-state, decoder, data structure containing pointers to event handlers)
   setGameStateDecoder(stPLAY, subMAIN, 4wayjoy, myDispatchTable)
Now, whenever your game enters the PLAY::Main state, the 4wayjoy decoder will kick in automagically, and call the events defined in your dispatch table.

 

Defining the dispatch table is also simple. P-Machinery adds some very useful data structure types, like records, enumerations, arrays, associative arrays, etc.

 

; Define dispatch table
myDispatchTable RECORD
@@disc             EventHandler(DISC_ON)
@@keydown     EventHandler(NULL)
@@keyup         EventHandler(NULL)
@@btn1down   EventHandler(FIRE_ON)
@@btn1up.      EventHandler(FIRE_OFF)
; ...
                          ENDREC
Or you can use helper macros that abstract it for you:

   ; Assign event handlers to game state input decoder
    setGameStateEvent(stPLAY, subMAIN, 4wayjoy, evtDisc, DISC_ON)
   ; ...
(Note that these are examples off the top of my head. The interfaces haven't been finalized yet, and there's lots of work to be done still. That said, the basic, underlying event model and game engine are complete.)

 

Obviously, game logic still requires Assembly Language, but accessing game objects and structures can be done in a higher-level, object-oriented manner.

 

dZ.

 

 

 

 

 

 

What is this p-machinery you talking about, and more importantly where can I download it from? :) Open source I hope. :)

Link to comment
Share on other sites

 

 

 

 

What is this p-machinery you talking about, and more importantly where can I download it from? :) Open source I hope. :)

It's a development framework I'm working on. Unfortunately, it is not ready, so it's not available for download. Most likely, for next year.

 

It'll be open source, of course.

 

There was an initial version of it I released, but it was a barebones game engine/skeleton, the one I used for Christmas Carol. That's what Valter used for Colossal Cave.

 

However, it is in the process of evolving into a complete game construction library.

 

dZ.

  • Like 1
Link to comment
Share on other sites

It's a development framework I'm working on. Unfortunately, it is not ready, so it's not available for download. Most likely, for next year.

 

It'll be open source, of course.

 

There was an initial version of it I released, but it was a barebones game engine/skeleton, the one I used for Christmas Carol. That's what Valter used for Colossal Cave.

 

However, it is in the process of evolving into a complete game construction library.

 

dZ.

 

 

 

Kewl open source Thats the best. I hate proprietary, just makes it harder for the community.

  • Like 1
Link to comment
Share on other sites

  • 2 weeks later...

I would love a BASIC for the Intellivision.

 

As dZ says, if we could call routines that do the heavy lifting... We could but games together pretty quickly!

 

Call joy1(dir,value) were dir is 0-15 and value being key pressed...

if value=enter then ..

 

I love TI99's extended basic, if we could have a hi-level language like that... Life would be grand!

 

 

Tools are different... Screen drawing, character definitions and animation and sound generation.

 

We would need....

Controller input

screen drawing

character placement

collision detection ( char to char, char to background ) were char is a "sprite" and bacground is a "tile" we would need "tile" to "tile" collision detection in some cases too.

However, that could be done with x,y position comparing. Oh, char to location detection too.

 

motion... volocity in x,y directions

scrolling???? would be great....

 

branching if then else

play sound/note

 

variables for scoring,extra men, status's such as shot fired, collisions etc.

I know the intellivision has very little ram.. but I seem to use a ton a variables in my basic language games.

 

MATH functions. + - * / modulo, exponents would be helpful.

MATH conversions. intigers, floats etc.

 

I am certain I missed a ton of stuff... I'd request after the release LOL...

 

I have always wanted to make a game for the intellivision...

 

PLEASE help me complete this dream!

 

 

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...