Jump to content
IGNORED

Vectron & EXEC


Recommended Posts

There's no reason a game can't define its own font.  The standard "font" is just part of GROM.  Vectron is also 12K in size, but doesn't touch the addresses utilized by the ECS.

Edited by Zendocon
Resolved ambiguity
  • Like 1
Link to comment
Share on other sites

The ecs rom starts at address $7000.  A typical cartridge rom starts at $5000.  Some Imagic cartridge roms, and the playcable rom start at $4800.  It must be that the intellivision boots to $4800 before $7000.

Edited by mr_me
  • Like 1
Link to comment
Share on other sites

1 hour ago, Intelligentleman said:

I guess a better question is why are 3rd party games like those from Activision or Imagic unable to boot the ECS?

The ECS requires $7xxx and $Exxx to be left alone by the cartridge ROM for the most part.  The Atarisoft games in particular use the $7xxx address range, making them incompatible.

 

Typically games start at $5000 and have up to 8K contiguous ROM space, ending at $6fff.  The 12K Mattel games like Vectron map the additional 4K at $Dxxx.

 

The biggest original game was World Series Major League Baseball.  It used the 8K at $5000, another 12K starting at $D000 (working in tandem with the ECS), and bankswitched in an extra 4K page at $F000 for some of the IntelliVoice samples.

Edited by Zendocon
Typos
  • Like 1
Link to comment
Share on other sites

6 minutes ago, Zendocon said:

The ECS requires $7xxx and $Exxx to be left alone by the cartridge ROM for the most part.  The Atarisoft games in particular use the $7xxx address range, making them incompatible.

 

Typically games start at $5000 and have up to 8K contiguous ROM space, ending at $6fff.  The 12K Mattel games like Vectron map the additional 4K at $Dxxx.

 

The biggest original game was World Series Major League Baseball.  It used the 8K at $5000, another 12K starting at $D000 (working in tandem with the ECS), and bankswitched in an extra 4K page at $F000 for some of the IntelliVoice samples.

Wow that's awesome about MLB!

  • Like 1
Link to comment
Share on other sites

IIRC the Intellivision boots checking certain addresses in a certain order. I don't recall the exact order. Certain peripherals map to certain memory addresses IIRC. Poking through the jzintv source probably reveals all those "secrets". I think certain hardware like Keyboard Component and PlayCable map to some of those memory locations, establishing the order of precedence when multiple peripherals are connected together.

 

Think of how a PC boots as an example. It's more advanced, because you can alter the order it checks. For example, in the olden days, a boot check sequence might have been:

  1. 5.25" floppy (A:)
  2. 3.5" floppy (B:)
  3. CD-ROM (D:)
  4. Hard Disk (C:)
  5. Network (some IP address or other identifier)

That's kind of what happens when Intellivision boots.

  • Like 2
Link to comment
Share on other sites

32 minutes ago, intvsteve said:

IIRC the Intellivision boots checking certain addresses in a certain order. I don't recall the exact order. Certain peripherals map to certain memory addresses IIRC. Poking through the jzintv source probably reveals all those "secrets". I think certain hardware like Keyboard Component and PlayCable map to some of those memory locations, establishing the order of precedence when multiple peripherals are connected together.

 

Think of how a PC boots as an example. It's more advanced, because you can alter the order it checks. For example, in the olden days, a boot check sequence might have been:

  1. 5.25" floppy (A:)
  2. 3.5" floppy (B:)
  3. CD-ROM (D:)
  4. Hard Disk (C:)
  5. Network (some IP address or other identifier)

That's kind of what happens when Intellivision boots.

That's a great analogy. Thank you

Link to comment
Share on other sites

3 hours ago, Intelligentleman said:

Wow that's awesome about MLB!

World Series Major League Baseball, specifically, the one ECS game that also utilized the IntelliVoice.

 

The original Major League Baseball was only 4K, and managed to be only that size because it put the Executive ROM to full use.  In fact, the MTE-201 Test Cartridge has you play a half inning of Baseball as a final test, if all the other hardware tests come back clean.

  • Like 1
Link to comment
Share on other sites

48 minutes ago, Zendocon said:

World Series Major League Baseball, specifically, the one ECS game that also utilized the IntelliVoice.

 

The original Major League Baseball was only 4K, and managed to be only that size because it put the Executive ROM to full use.  In fact, the MTE-201 Test Cartridge has you play a half inning of Baseball as a final test, if all the other hardware tests come back clean.

Interesting. Would a player be able to point to a gameplay element in the baseball game and know that the EXEC was likely responsible for it?

Link to comment
Share on other sites

3 hours ago, intvsteve said:

IIRC the Intellivision boots checking certain addresses in a certain order. I don't recall the exact order. Certain peripherals map to certain memory addresses IIRC. Poking through the jzintv source probably reveals all those "secrets". I think certain hardware like Keyboard Component and PlayCable map to some of those memory locations, establishing the order of precedence when multiple peripherals are connected together.

I would expect that code to be in the EXEC somewhere. I certainly can't find any evidence of it in my old emulator source (though it is not really in a readily readable state at the moment). I also cannot find those addresses in the EXEC source that I have, through I don't know the provenance of the digital copy of EXEC source that I have.

  • Like 1
Link to comment
Share on other sites

6 hours ago, intvsteve said:

IIRC the Intellivision boots checking certain addresses in a certain order. I don't recall the exact order. Certain peripherals map to certain memory addresses IIRC. Poking through the jzintv source probably reveals all those "secrets". I think certain hardware like Keyboard Component and PlayCable map to some of those memory locations, establishing the order of precedence when multiple peripherals are connected together.

My understanding is this:

  • First, address $4800 is scanned for a bootable ROM (PlayCable or Keyboard Component).
  • Second, address $7000 is scanned for a bootable ROM (ECS).
  • If a bootable ROM is found, control is passed to it.
  • Otherwise, the EXEC of the Master Component starts normally.

Cartridges define their "header" block starting at address $5000.  However, modern cartridges can start at $4800 (since there is little chance of someone having a working PlayCable or Keyboard Component hooked up), and take over the bootstrap from the EXEC.

 

     -dZ.

Link to comment
Share on other sites

3 hours ago, DZ-Jay said:

My understanding is this:

  • First, address $4800 is scanned for a bootable ROM (PlayCable or Keyboard Component).
  • Second, address $7000 is scanned for a bootable ROM (ECS).
  • If a bootable ROM is found, control is passed to it.
  • Otherwise, the EXEC of the Master Component starts normally.

Cartridges define their "header" block starting at address $5000.  However, modern cartridges can start at $4800 (since there is little chance of someone having a working PlayCable or Keyboard Component hooked up), and take over the bootstrap from the EXEC.

 

     -dZ.

Intellivision Kiosk Multiplexers also use $7000 or $4800 (depending whether they are early or later models) and they try to read the cartridge header at $5000.  However, there are only 5 are known to exist so they can be safely ignored by 99% of the Intellivision folks out there.

Link to comment
Share on other sites

5 minutes ago, Lathe26 said:

Intellivision Kiosk Multiplexers also use $7000 or $4800 (depending whether they are early or later models) and they try to read the cartridge header at $5000.  However, there are only 5 are known to exist so they can be safely ignored by 99% of the Intellivision folks out there.

You 1%-ters :mad:

  • Haha 2
Link to comment
Share on other sites

According to jzintv programming documentation $7000 boots before $4800.  That would make sense since the KC or ECS rom could check for $4800 (playcable) when "cartridge" is selected from the menu.  But it wouldn't explain why some imagic cartridges prevent the ECS rom from starting.

 

Edit:

These Imagic cartridges seem to be compatible with the keyboard component (at least in emulation).  The KC rom starts normally and the cartridge can be started from the menu, meaning the KC rom does look at $4800 when cartridge is selected from the menu.

Edited by mr_me
Link to comment
Share on other sites

4 hours ago, mr_me said:

According to jzintv programming documentation $7000 boots before $4800.  That would make sense since the KC or ECS rom could check for $4800 (playcable) when "cartridge" is selected from the menu.  But it wouldn't explain why some imagic cartridges prevent the ECS rom from starting.

 

Edit:

These Imagic cartridges seem to be compatible with the keyboard component (at least in emulation).  The KC rom starts normally and the cartridge can be started from the menu, meaning the KC rom does look at $4800 when cartridge is selected from the menu.

You may be right, but I thought we tend to use $4800 to mask out the ECS EXEC at $7000 using bank switching.  Perhaps im missing something.

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

16 hours ago, Intelligentleman said:

Interesting. Would a player be able to point to a gameplay element in the baseball game and know that the EXEC was likely responsible for it?

Many of the routines in the Exec are common things, like math routines or displaying text or a number; plus game initialization after the title screen, such as drawing the baseball diamond on a one-time basis.  Those of course aren't too obvious as being unique to the Exec.

 

The best things to look at in the early games involve the handling of sprites.  In Baseball, watch how the players all run to the outfield.  They are set to certain X-Y coordinates initially, and each sprite is given only a speed and target position.  The Exec updates their position every 3 video frames, and has code ready to be fired when those sprites are all at their destinations.

 

A collision table, or "colltab" can easily be defined for pointers to routines to be run when collisions are flagged, saving more precious ROM space.  In the case of Baseball for example, there's collision between the ball and the nearest outfielder.

 

Another thing to pay attention to is in games where objects move very slowly in a straight sort-of-diagonal line, such as the enemy convoys in Sub Hunt on the map screen.  (The sprites in Baseball don't move slowly enough so you can notice.)  Note how the convoy occasionally moves up one pixel at a time as it travels to the right, toward the enemy harbor.  Because the Intellivision pixel resolution is 159x92 in terms of sprite placement, only 8 bits are needed for the X and Y pixel coordinates of each object.  But the Exec uses 16-bit values instead.  As it turns out, the top 8 bits define the actual screen position, while the lower 8 bits are retained for "fractions of a pixel" to have greater precision in virtualized 2D space.

 

In addition, all 16 directions on the disc define the X and Y velocities of your active sub.  Both the "velocities in all 16 directions" and "sub-pixel precision" features I put to use in my latest game, X-Ray & DILLIGAS, but they're so subtle as to be hardly noticeable.  Further, since positioning on the Y axis is in whole pixels, but sprites can have double-resolution "half-pixel" images, I created a duplicate image for the cursor that is offset by a half-pixel, and I decide each video frame which image to display.  The result is simulated double-resolution sprite positioning, which is a neat trick, but again is nearly impossible to notice unless you know about it and look at the cursor very carefully.

  • Like 4
Link to comment
Share on other sites

22 hours ago, Intelligentleman said:

I guess a better question is why are 3rd party games like those from Activision or Imagic unable to boot the ECS?

Don't some of the ECS cartridges bypass the ECS menu as well?

 

2 hours ago, DZ-Jay said:

You may be right, but I thought we tend to use $4800 to mask out the ECS EXEC at $7000 using bank switching.  Perhaps im missing something.

It seems that way, by starting at $4800 you can turn off the ecs rom bank at $7000.  You also get another 2k of contiguous rom space.  There has to be something that makes it go to $4800 and skip the ecs menu.  The other thing is that if you had a playcable plugged in to your keyboard component and the system started at $4800 you wouldnt be able to use the KC.

Edited by mr_me
  • Like 1
Link to comment
Share on other sites

I think the typical homebrew game execution order is:

  1. Reset occurs
  2. EXEC starts execution.  It checks for code at $7000.  If found, start executing there.
  3. ECS code at $7000 executes.  This executing code is short (within $7000-$70FF) and returns control back to the EXEC.
  4. EXEC continues executing.  It checks for code at $4800.  If found, start execution there.
  5. Game with code at $4800 starts executing.  The code here uses ECS bankswapping to swap out (turn off) all of the ECS ROM code.  This game code returns control back to the EXEC.
  6. EXEC continues executing.  It parses game data at $5000 (i.e. the cartridge header) and processes it.  There is a code pointer in the header.  After some processing, the EXEC calls it.
  7. Game code starts executing.

This explains why game code has code in the $7000 range, it starts at $7100 rather than $7000.  If the game code started at $7000, it would conflict with the portion of ECS code that executes in the beginning.

  • Like 1
Link to comment
Share on other sites

2 hours ago, mr_me said:

Don't some of the ECS cartridges bypass the ECS menu as well?

 

It seems that way, by starting at $4800 you can turn off the ecs rom bank at $7000.  You also get another 2k of contiguous rom space.  There has to be something that makes it go to $4800 and skip the ecs menu.

But the ECS EXEC is at $7000, no? ... if you trap the boot process at $4800 you can take over and avoid jumping to $7000 at all, no?

 

Quote

The other thing is that if you had a playcable plugged in to your keyboard component and the system started at $4800 you wouldnt be able to use the KC.

Has it been confirmed that you could do so?

 

56 minutes ago, Lathe26 said:

I think the typical homebrew game execution order is:

  1. Reset occurs
  2. EXEC starts execution.  It checks for code at $7000.  If found, start executing there.
  3. ECS code at $7000 executes.  This executing code is short (within $7000-$70FF) and returns control back to the EXEC.
  4. EXEC continues executing.  It checks for code at $4800.  If found, start execution there.
  5. Game with code at $4800 starts executing.  The code here uses ECS bankswapping to swap out (turn off) all of the ECS ROM code.  This game code returns control back to the EXEC.
  6. EXEC continues executing.  It parses game data at $5000 (i.e. the cartridge header) and processes it.  There is a code pointer in the header.  After some processing, the EXEC calls it.
  7. Game code starts executing.

This explains why game code has code in the $7000 range, it starts at $7100 rather than $7000.  If the game code started at $7000, it would conflict with the portion of ECS code that executes in the beginning.

 

I think steps 2 and 3 are reversed.  The EXEC starts execution and first looks at address $4800 for a usable ROM.  This is why we then can bank-switch the ECS EXEC at $7000 to get that memory segment back in case it's plugged in.

 

Anything hooked up to $4800 is free to return to the EXEC and let it continue then with bootstrapping, which includes checking the $7000.  Most modern homebrews (certainly IntyBASIC programs) do something like this, bank-switching the ECS EXEC at $4800 and returning to the main EXEC so that the regular bootstrap sequence may continue -- then finally trap at the $5000-ish "copyright" routine after the title screen is drawn.  They leave the first few words after $7000 so that it is skipped when the EXEC eventually checks it.

 

That's base on Joe Zbiciak's "Cart.Mac" library, which IntyBASIC (and most of us) borrowed from.

 

I've confirmed that this is also how jzIntv works:

 

Starting jzIntv...
 0000 0000 0000 0000 0000 0000 0000 1000 --------  JD   $1029             0
> h
Register History is On
> b $4800
Set breakpoint at $4800
> b 7000
Set breakpoint at $7000
> r
Hit breakpoint at $4800
 FC00 0000 0000 4800 0200 1030 02F0 4800 ----I-i-  MVII #$2A5F,R0                        |         MVII    #$2A5F, R0                                               6271
> d
Dumping register history to 'dump.hst'...  Done.
Dumping profile data to 'dump.hst'...  Done.
Dumping memory attribute map to 'dump.atr'...  Done.
>

 

The dump is reproduced here:

0000 0000 0000 0000 0000 0000 0000 1029 --------  MVII #$0102,R4           13 <-- Beginning of EXEC processing
0000 0000 0000 0000 0102 0000 0000 102B ------i-  MVII #$00FE,R1           21
0000 00FE 0000 0000 0102 0000 0000 102D ------i-  JSR  R5,$1167            29
0000 00FE 0000 0000 0102 1030 0000 1167 ------i-  CLRR R0                  42
0000 00FE 0000 0000 0102 1030 0000 1168 -Z----i-  MVO@ R0,R4               48
0000 00FE 0000 0000 0103 1030 0000 1169 -Z------  DECR R1                  57
0000 00FD 0000 0000 0103 1030 0000 116A ------i-  BNEQ $1168               63
0000 00FD 0000 0000 0103 1030 0000 1168 ------i-  MVO@ R0,R4               72
0000 00FD 0000 0000 0104 1030 0000 1169 --------  DECR R1                  81
0000 00FC 0000 0000 0104 1030 0000 116A ------i-  BNEQ $1168               87

<< Repeats until R0 is zero >>

0000 0000 0000 0000 0200 1030 0000 116A -Z----i-  BNEQ $1168             6135
0000 0000 0000 0000 0200 1030 0000 116C -Z----i-  JR   R5                6142
0000 0000 0000 0000 0200 1030 0000 1030 ------i-  SDBD                   6149
0000 0000 0000 0000 0200 1030 0000 1031 -----D--  MVII #$1003,R0         6153
1003 0000 0000 0000 0200 1030 0000 1034 ------i-  MVO  R0,ISRVEC ($0     6163
1003 0000 0000 0000 0200 1030 0000 1036 --------  SWAP R0                6174
0310 0000 0000 0000 0200 1030 0000 1037 --------  MVO  R0,$0101          6180
0310 0000 0000 0000 0200 1030 0000 1039 --------  MVII #$02F0,R6         6191
0310 0000 0000 0000 0200 1030 02F0 103B ------i-  MVII #$03FF,R1         6200
0310 03FF 0000 0000 0200 1030 02F0 103D ------i-  COMR R1                6208
0310 FC00 0000 0000 0200 1030 02F0 103E S-----i-  MOVR R1,R0             6214
FC00 FC00 0000 0000 0200 1030 02F0 103F S-----i-  B    $1043             6220
FC00 FC00 0000 0000 0200 1030 02F0 1043 S-----i-  MVII #$0048,R3         6229 \
FC00 FC00 0000 0048 0200 1030 02F0 1045 S-----i-  SWAP R3                6237  |
FC00 FC00 0000 4800 0200 1030 02F0 1046 --------  AND@ R3,R1             6243  |
FC00 0000 0000 4800 0200 1030 02F0 1047 -Z----i-  BEQ  $104F             6251   > Check for bootable code at $4800
FC00 0000 0000 4800 0200 1030 02F0 104F -Z----i-  EIS                    6260  |    and jump to it if found.
FC00 0000 0000 4800 0200 1030 02F0 1050 -Z--I---  JR   R3                6264  |
FC00 0000 0000 4800 0200 1030 02F0 4800 ----I-i-  MVII #$2A5F,R0         6271 /

 

In my own framework (and in the Voyage Demo), I hookup my own bootstrap sequence at $4800 and never look back, so not even the $5000 address is reached.  That requires that the bootstrap include full memory and device initialization, something that the EXEC does for you, but it bypasses almost the entire EXEC (minus the initial hardware RESET handler), even the Universal Data Block (Cartridge Header) at $5000.

 

    -dZ.

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

1 hour ago, mr_me said:

I notice that segment in Christmas Carol starts at $7100 rather than $7000.  That might give the ecs rom enough room to jump to $4800 where the ecs rom bank can be turned off before a conflict is hit.

Actually, I believe it is the reverse:  We trap at $4800 (which is checked first), then bank-switch the ECS ROM at $7000 to get it out of the way, and frees it for our own use.  However, we then avoid using the top addresses in that range so that when we return to the EXEC, and it eventually checks for the ECS EXEC at $7000, it won't find it, and continue on with the normal boot process.

 

Eventually, we "hijack" the boot process after the title screen is drawn, in the custom "copyright" routine that the EXEC offers to fix up the copyright.

 

This is how the SDK-1600 library (cart.mac) does it, which is what Christmas Carol uses, and how most modern homebrews do as well.  IntyBASIC does the same, inspired by cart.mac's initialization and Joe's expertise.

 

    -dZ.

Link to comment
Share on other sites

3 minutes ago, DZ-Jay said:

Actually, I believe it is the reverse:  We trap at $4800 (which is checked first), then bank-switch the ECS ROM at $7000 to get it out of the way, and frees it for our own use.  However, we then avoid using the top addresses in that range so that when we return to the EXEC, and it eventually checks for the ECS EXEC at $7000, it won't find it, and continue on with the normal boot process.

 

Eventually, we "hijack" the boot process after the title screen is drawn, in the custom "copyright" routine that the EXEC offers to fix up the copyright.

 

This is how the SDK-1600 library (cart.mac) does it, which is what Christmas Carol uses, and how most modern homebrews do as well.  IntyBASIC does the same, inspired by cart.mac's initialization and Joe's expertise.

 

    -dZ.

 

My memory is fuzzy on the details, so I dug up some comments from Joe:

Quote

I do vaguely remember having to carve $2000 - $20FF out when we started testing with an Intellicart / CC3.  The ECS, when it boots, runs some code at $7xxx that first switches in the ROM at $2xxx, and then jumps to it.  The code at $2xxx then, if I recall correctly, tries to find alternate boot ROMs at $Cxxx page 1, and $7xxx page F, E, D, ... down to 0.  All that code is in the first part of $2xxx.

 

For Christmas Carol, we worked around this for Intellicart/CC3 testing by starting the $2xxx segment a little later.  That was necessary for Intellicart/CC3 testing, as neither supports ECS-style page flipping.  JLP boards do, though, so in principle all we needed to do was move that to another page.  (I'm doing exactly that with another game I'm assisting with.)  With the current development version of AS1600 (which I really need to get released to everybody), I fixed this problem and the $7xxx problem by moving those to "$2000 - $2FFF PAGE F" and "$7000 - $7FFF PAGE F" in cart.mac.  The new AS1600 supports page-flipped ROMs with a small extension to the ORG directive.

 

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