Jump to content
IGNORED

Rom header information?


Recommended Posts

Hi there,

 

Does anyone have any good information on the exact structure of the expected ROM header in an Intellivision ROM? I've found examples that strategically pass zeros and ones (like the ones in the jzintv documentation labeled "EXEC friendly ROM header") but I would really like to know if possible more about what exactly is supposed to be here and why. Does anyone here have any leads or know where I might be able to find this sort of documentation? Any help would be appreciated.

 

Thanks a bunch!

Link to comment
Share on other sites

Hi there,

 

Does anyone have any good information on the exact structure of the expected ROM header in an Intellivision ROM? I've found examples that strategically pass zeros and ones (like the ones in the jzintv documentation labeled "EXEC friendly ROM header") but I would really like to know if possible more about what exactly is supposed to be here and why. Does anyone here have any leads or know where I might be able to find this sort of documentation? Any help would be appreciated.

 

Thanks a bunch!

 

Search the Web for something called "Your Friend The Exec." It is the programmer's guide used at Mattel. Keep in mind that it is a proprietary document owned by Intellivision Productions, Inc.

 

Here's the layout:

3.5 THE UNIVERSAL DATA BLOCK
Certain universal information is placed at the beginning of each cartridge.
This data, the Universal Data Block (UDB), is used by the EXEC in performing
its functions.  Each cartridge must start with the following:

    BIDECLE     OBJGRAM              ; Address of moving object picture base
    BIDECLE     PLIST                ; Address of process table
    BIDECLE     RESET                ; Address of reset routine
    BIDECLE     BACKGRAM             ; Address of background picture base
    BIDECLE     BLIST                ; Address of coded list for GRAM load

    BIDECLE     NAME                 ; Address of cartridge name and date
    DECLE       KC.key(s)            ; Bits for automatic key clicks
    DECLE       BD.Xside(s)          ; Bits for extending screen border

    DECLE       BG.mode              ; Background mode (color stack or FG/BG)
    DECLE       BD.color             ; Background color stack - color #1
    DECLE       BD.color             ;                        - color #2
    DECLE       BD.color             ;                        - color #3
    DECLE       BD.color             ;                        - color #4
    DECLE       BD.color             ; Border color

    DECLE       <picture #>*8        ; GRAM space for object 0
    DECLE       <picture #>*8        ; GRAM space for object 1

  • Like 1
Link to comment
Share on other sites

By the way, the reason the examples put zeros and ones is to prepare an EXEC-friendly Universal Data Block that bypasses the EXEC itself. As you can see, the examples set null-pointers to the process and GRAM load lists. Otherwise, it would require your program to use the EXEC and conform to its framework, and therefore a lot more internal knowledge of its structures.

  • Like 1
Link to comment
Share on other sites

 

Well, I was trying to avoid giving direct links to documents of dubious legality...

 

Oh, and that one is still missing page D-1. :lol:

 

-dZ.

Edited by DZ-Jay
  • Like 1
Link to comment
Share on other sites

FWIW, I personally avoid the EXEC whenever possible. While the document may be entitled "Your Friend the EXEC," understanding the EXEC requires access to proprietary documentation that the rights-holders have chosen to keep close to their chests. That makes it decidedly unfriendly in my opinion.

 

YFTE can help you understand some of the details, but from what I understand, it doesn't actually have all of the information you need to use the EXEC properly anyway. It expects you to have access to the EXEC-related macros and header files that define many of the constants, etc.

 

The EXEC is not really my friend.

 

Is your goal to better understand existing games, or to write new ones? If it's to better understand existing games, you might play around with dis1600. It understands various data structures that hang off the cartridge header and certain EXEC entry points. As I do occasionally fix bugs from time to time, you might get the latest and/or greatest:

 

 

If your goal is to write a new game, I'd suggest writing it without the EXEC's "help." Either use IntyBASIC, or solicit help here on AA on building the support pieces you need that you'd otherwise rely on the EXEC for. You'll get a more responsive game, and you won't be tied to the restrictions and quirks of the EXEC. For one thing, it eats nearly all of the 16-bit RAM and a good portion of 8-bit RAM! For another, it limits your game's frame rate to 20Hz. The ROM capacity restrictions that made the EXEC a good idea in 1979 - 1981 no longer hold in 2015.

 

FWIW, the strategically places 0s and 1s and such in the ROM header are there mainly to benignly bypass the EXEC in as efficiently a way as possible to drop into your own game, while maximizing compatibility with the ECS, and leaving a hook whereby the game can identify itself via the "cartridge title" entry. (The cartridge title entry is also how the header wrests control from the EXEC, by setting the flag "run code after the title".)

 

Anyway, whatever your goals, best wishes and good luck. We're here to help. :)

Edited by intvnut
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...
 Share

  • Recently Browsing   0 members

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