Jump to content
IGNORED

Wanted: EXECs


freewheel

Recommended Posts

Not sure where to look for this. I want to inspect a few things within the various EXEC versions. I know of at least 4 at this point: the model 1, 2, Sears, and Tutorvision. Are there more? And where the heck would one get their hands on all of them?

 

Also, how do you read the contents? (I'm thinking from IntyBASIC). Do I just look at the memory addresses for each ($1000 or $2000)? Is it that simple?

 

 

Link to comment
Share on other sites

Also, how do you read the contents? (I'm thinking from IntyBASIC). Do I just look at the memory addresses for each ($1000 or $2000)? Is it that simple?

 

You run them through the disassembler and analyse the resulting source code in Assembly. Mind you, it is not an easy task. Even being fluent in Assembly Language may not be enough. It is a reverse-engineering task, with all that that implies.

 

Note that you do not get the benefit of macros prior to expansion, expressions prior to evaluation, module separation, or even symbolic names (except for op-code mnemonics) -- everything is a memory address, an immediate numeric value, or an op-code; and all locations are assigned sequential numeric labels by the disassembler (because it does not know any better).

 

Also, remember, there is no necessary separation between code and data; so a block of data could be "disassembled" into op-codes if the values fit the profile, and you will see code in the resulting listing which never existed. (Although the disassembler tries to do some inferences, this is not always perfect).

 

It is possible though, although it tends to be hard. It requires some analysis effort and clever deduction work.

 

What specifically are you looking of?

 

-dZ.

Link to comment
Share on other sites

The peek command for Intybasic would allow you to read any memory address.

  A=PEEK(expr)		Reads a memory location
                    PEEK always reads 16-bits data than can be processed in expression.

for example, I want to read from the screen data, I do

#MCard=peek ($200+80+i)

Keep in mind that part of the EXEC is spilled over to the GROM.

Link to comment
Share on other sites

The sears and Intellivision 2 execs can be found at mame rom sharing sites. The bits in the intellivision ii exec are backwards so you have to convert it to work in jzintv. [You can look at the contents with any hex editor].

Edited by mr_me
Link to comment
Share on other sites

The bits in the intellivision ii exec are backwards so you have to convert it to work in jzintv. [You can look at the contents with any hex editor].

 

Yeah, this is part of what's confusing me. The INTV2 EXEC that I've had forever, works just fine in jzintv. And yet when you look at it in hex, it's entirely different than the original EXEC. I'd expect a few bytes here and there changed - Mattel with their attempt to lock out 3rd parties - but it's drastically different. With a little research, I stumbled upon comments similar to yours. How is it working in jzintv if I haven't converted it?

 

The INTV1 vs Sears EXECs are very obviously different, and only in a couple of spots. Exactly what you'd expect as the only difference that I'm aware of is on the titlescreen.

 

Interestingly, the Tutorvision EXEC is byte-for-byte identical to the original EXEC, at least for the first $1000 bytes. I thought for sure there'd be something changed in there, but nope - they merely extended the original EXEC ROM as needed.

Link to comment
Share on other sites

In case I wasn't clear about why I'm asking about this - I'm trying to figure out an easy way, in IntyBASIC, to determine which model of console a program is running on. I think it should be as simple as looking at the EXEC address space ($1000-$1FFF) and checking a few specific addresses that will differ between the 3 major EXECs. And then doing some further checks for the Tutorvision.

 

There are stories of consoles with the "wrong" EXEC in them (Super Pros with INTV2 EXECS kinda thing) - I think it would be neat to allow people to detect this easily, without running through the "try this cart, now try this cart, etc, now look up in this matrix based on known behaviours" like I saw when people were trying to find Tutorvisions.

Link to comment
Share on other sites

My exec2 file wouldn't work with jzintv until I reversed the "endianness". I haven't tried the recent updates of jzintv.

 

Joe's checksum rom can identify all the different execs. You can write something that's more direct, checking for specific code. Either way, if someone wants to test their intellivision with a test rom they need a memory cartridge. Not everyone will spend $165 on one. So a test with common cartridges is helpfull.

Edited by mr_me
Link to comment
Share on other sites

In case I wasn't clear about why I'm asking about this - I'm trying to figure out an easy way, in IntyBASIC, to determine which model of console a program is running on. I think it should be as simple as looking at the EXEC address space ($1000-$1FFF) and checking a few specific addresses that will differ between the 3 major EXECs. And then doing some further checks for the Tutorvision.

 

There are stories of consoles with the "wrong" EXEC in them (Super Pros with INTV2 EXECS kinda thing) - I think it would be neat to allow people to detect this easily, without running through the "try this cart, now try this cart, etc, now look up in this matrix based on known behaviours" like I saw when people were trying to find Tutorvisions.

 

Why not compute a checksum at runtime and compare it against a list of known values for each version in ROM? I believe this is what LTO Flash! does for game ROMs, so it should work.

 

-dZ.

Link to comment
Share on other sites

In case I wasn't clear about why I'm asking about this - I'm trying to figure out an easy way, in IntyBASIC, to determine which model of console a program is running on. I think it should be as simple as looking at the EXEC address space ($1000-$1FFF) and checking a few specific addresses that will differ between the 3 major EXECs. And then doing some further checks for the Tutorvision.

 

There are stories of consoles with the "wrong" EXEC in them (Super Pros with INTV2 EXECS kinda thing) - I think it would be neat to allow people to detect this easily, without running through the "try this cart, now try this cart, etc, now look up in this matrix based on known behaviours" like I saw when people were trying to find Tutorvisions.

 

PEEK($1FFC) is enough to tell the difference between Sears, Intellivision 1, and Intellivision 2:

  • Intellivision 1 returns $00
  • Intellivision 2 returns $0B
  • Sears returns $28

PEEK($2000) will indicate whether the WBEXEC is also present; however, that's not useful for determining whether you're on an INTV88 motherboard. I think it's entirely possible there are INTV88 mobos out there with both Intellivision 1 and Intellivision 2 EXECs. I have a regular (not INTV88) SuperPro sitting here with an Intellivision 2 EXEC, on top of another (again, not INTV88) with an Intellivision 1 EXEC.

 

To detect an INTV88 board, perhaps this will do:

    ' Check for writeable memory at $4FF
    POKE $4FF, $AAAA
    IF PEEK($4FF) <> $AAAA THEN not_intv88
    POKE $4FF, $5555
    IF PEEK($4FF) <> $5555 THEN not_intv88
    ' If we make it to here, it's an INTV88 machine
    INTV88 = 1  ' ...or whatever.

not_intv88:
Link to comment
Share on other sites

Perhaps this could get ya started:

.

                CONST ExecType_Unknown = 0
                CONST ExecType_INTV1 = 1
                CONST ExecType_INTV2 = 2
                CONST ExecType_Sears = 3

                CONST SysType_Unknown = 0
                CONST SysType_INTV1 = 1     ' All non-INTV88 w/ EXEC v1.
                CONST SysType_INTV2 = 2     ' All non-INTV88 w/ EXEC v2.
                CONST SysType_INTV88 = 3    ' INTV88, regardless of EXEC type

                CLS
                WAIT

                GOSUB DetectSystem

                PRINT AT 0,  "EXEC type:   ", <1>ExecType
                PRINT AT 20, "System type: ", <1>SysType

here:           GOTO    here


DetectSystem:   PROCEDURE
                ExecType = ExecType_Unknown
                SysType  = SysType_Unknown

                IF PEEK($1FFC) = $00 THEN ExecType = ExecType_INTV1
                IF PEEK($1FFC) = $0B THEN ExecType = ExecType_INTV2
                IF PEEK($1FFC) = $28 THEN ExecType = ExecType_Sears

                POKE $4FF, $5555 : IF PEEK($4FF) <> $5555 THEN GOTO not_intv88
                POKE $4FF, $AAAA : IF PEEK($4FF) <> $AAAA THEN GOTO not_intv88
                SysType = SysType_INTV88
                RETURN
not_intv88:
                IF ExecType = ExecType_INTV2 THEN
                    SysType = SysType_INTV2
                ELSE
                    SysType = SysType_INTV1
                END IF
                RETURN

.

This will determine whether your system has an Intellivision 1 or Intellivision 2 EXEC. It doesn't bother looking for the WBEXEC extension; however, it could be trivially extended to do so.

 

It will also look to see if you have an INTV88 motherboard. Some INTV88 motherboards have WBEXEC in them, some may have Intellivision 1 or Intellivision 2 EXECs in them. So, the INTV88 vs. INTV1 vs. INTV2 hardware check is orthogonal to the EXEC check. All systems are considered INTV1 unless they have the INTV2 EXEC, or are detected as INTV88 through the RAM presence detect at $4FF.

  • Like 1
Link to comment
Share on other sites

Appreciate the help! You've basically confirmed my thinking - we have a very small number of possible ROMs here, so I don't think checksumming is crucial (besides, we already have an excellent checksum utility to detect some weird new variant or corrupted ROM or something).

 

I've figured out how to detect each of the individual components that make an INTV88 board; no idea if any consoles exist that don't have all 4 extensions (RAM, STIC1A, GRAM, WBGROM) but you never know. I think it'd be neat to be explicit about each just in case. And yeah, detecting the WBEXEC should be trivial. Especially as there's no possible conflict with the ECS, because they can't be used in tandem.

 

Lathe has a proven INTV88 board with a non-WBEXEC, so yeah, it's definitely a thing worth looking for. With a simple ROM merge he was able to get the known Tutorvision games playing on it just fine, which is cool as all hell. Who knows, there may be INTV88 boards out there with standard GROM, and a lot of people have had false negatives if they just checked for that.

 

Edit: I don't think I can actually properly test for an INTV88 board in jzintv, can I? If I don't use the WBEXEC, it won't set up the other stuff (STIC1A, etc). If I do, well then it's a full-blown Tutorvision.

Link to comment
Share on other sites

You can fake jzIntv into INTV88 mode by appending 8K of 0xFF to the Intellivision 1 EXEC. This will put jzIntv into INTV88 mode based on the size of the EXEC alone. The 0xFFFF makes it look like there's no actual ROM there.

 

As for what hardware combinations you'll see: I'm pretty sure you'll never see a mix of GROM and STIC types. The STIC1A uses a straight JEDEC ROM. The original STIC used a custom-for-it device with some additional behaviors. It may be possible to adapt one to the other, but it would take effort. My guess was that they built the new GROM specifically for the new chip.

 

I'm also pretty sure you'll never see an Intellivision 2 EXEC on an INTV88 board. The Intellivision 2 EXEC clashes with the extra RAM on the board at locations $400 - $4FF.

 

The extra RAM itself is driven by the STIC1A. It's responsible for the address decoding and byte enables. So, I doubt you'd see STIC1A w/out extra RAM, or vice versa.

 

I think the only axis of variability you have with an INTV88 board is: EXEC 1 vs. WBEXEC.

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