Jump to content
IGNORED

Vectron & EXEC


Recommended Posts

11 hours ago, DZ-Jay said:

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.

 

...

 

I just double-checked things and the original post is correct.  First address $7000 is checked, then $4800.

 

Here's how I confirmed...

Starting jzIntv...
 0000 0000 0000 0000 0000 0000 0000 1000 --------  JSRD R5,$1026            0
> @ 4800 4fff
Now watching reads of $4800 through $4FFF
> @ 7000 7fff
Now watching reads of $7000 through $7FFF
> r
 RD a=$7000 d=FFFF CP-1610          (PC = $101F) t=618
 RD a=$4800 d=FFFF CP-1610          (PC = $101F) t=51333

 

Notice that the '@' command (memory read watching/logging) was used instead of the 'b' command (execution breakpoint).  I'll mention significance of this later on.

 

In the above case, no executable code was loaded into $7000 (no ECS) nor at $4800 (no PlayCable or etc).  The 2 reads above correspond to steps 2 and 4, respectively, where the EXEC first reads those addresses.  In both cases, $FFFF was read back which informs the EXEC that no code was present so steps 3 and 5 were skipped.

 

For as a comparison, below is what occurs when the ECS is present so that there is code at $7000 (as well as the other ECS addresses).  As above, no code was present at $4800.  The spoiler is only here since the output is much longer.

Spoiler

Starting jzIntv...
 0000 0000 0000 0000 0000 0000 0000 1000 --------  JSRD R5,$1026            0
> @ 7000 7fff
Now watching reads of $7000 through $7FFF
> @ 4800 4fff
Now watching reads of $4800 through $4FFF
> r
 RD a=$7000 d=0001 CP-1610          (PC = $101F) t=618
 RD a=$7000 d=0001 CP-1610          (PC = $7000) t=654
 RD a=$7001 d=02B8 CP-1610          (PC = $7001) t=658
 RD a=$7002 d=00C0 CP-1610          (PC = $7001) t=658
 RD a=$7003 d=0007 CP-1610          (PC = $7001) t=658
 RD a=$7004 d=0001 CP-1610          (PC = $7004) t=668
 RD a=$7005 d=02BC CP-1610          (PC = $7005) t=672
 RD a=$7006 d=0040 CP-1610          (PC = $7005) t=672
 RD a=$7007 d=0040 CP-1610          (PC = $7005) t=672
 RD a=$7008 d=0004 CP-1610          (PC = $7008) t=682
 RD a=$7009 d=0114 CP-1610          (PC = $7008) t=682
 RD a=$700A d=0338 CP-1610          (PC = $7008) t=682
 RD a=$700B d=0001 CP-1610          (PC = $700B) t=48357
 RD a=$700C d=02BB CP-1610          (PC = $700C) t=48361
 RD a=$700D d=0051 CP-1610          (PC = $700C) t=48361
 RD a=$700E d=002A CP-1610          (PC = $700C) t=48361
 RD a=$700F d=0001 CP-1610          (PC = $700F) t=48371
 RD a=$7010 d=02BA CP-1610          (PC = $7010) t=48375
 RD a=$7011 d=00FF CP-1610          (PC = $7010) t=48375
 RD a=$7012 d=002F CP-1610          (PC = $7010) t=48375
 RD a=$7013 d=0253 CP-1610          (PC = $7013) t=48385
 RD a=$7014 d=0001 CP-1610          (PC = $7014) t=48394
 RD a=$7015 d=02BB CP-1610          (PC = $7015) t=48398
 RD a=$7016 d=0001 CP-1610          (PC = $7015) t=48398
 RD a=$7017 d=00C0 CP-1610          (PC = $7015) t=48398
 RD a=$7018 d=0004 CP-1610          (PC = $7018) t=48408
 RD a=$7019 d=0120 CP-1610          (PC = $7018) t=48408
 RD a=$701A d=001F CP-1610          (PC = $7018) t=48408
 RD a=$701B d=02A2 CP-1610          (PC = $701B) t=48505
 RD a=$701C d=037A CP-1610          (PC = $701C) t=48513
 RD a=$701D d=01C1 CP-1610          (PC = $701C) t=48513
 RD a=$701E d=020C CP-1610          (PC = $701E) t=48521
 RD a=$701F d=0003 CP-1610          (PC = $701E) t=48521
 RD a=$7023 d=0004 CP-1610          (PC = $7023) t=48530
 RD a=$7024 d=0320 CP-1610          (PC = $7023) t=48530
 RD a=$7025 d=0000 CP-1610          (PC = $7023) t=48530
 RD a=$7FFF d=FFFF CP-1610          (PC = $2010) t=48679
 RD a=$7FFF d=FFFF CP-1610          (PC = $2010) t=48837
 RD a=$7FFF d=FFFF CP-1610          (PC = $2010) t=48995
 RD a=$7FFF d=FFFF CP-1610          (PC = $2010) t=49153
 RD a=$7FFF d=FFFF CP-1610          (PC = $2010) t=49311
 RD a=$7FFF d=FFFF CP-1610          (PC = $2010) t=49469
 RD a=$7FFF d=FFFF CP-1610          (PC = $2010) t=49627
 RD a=$7FFF d=FFFF CP-1610          (PC = $2010) t=49785
 RD a=$7FFF d=FFFF CP-1610          (PC = $2010) t=49943
 RD a=$7FFF d=FFFF CP-1610          (PC = $2010) t=50101
 RD a=$7FFF d=FFFF CP-1610          (PC = $2010) t=50259
 RD a=$7FFF d=FFFF CP-1610          (PC = $2010) t=50417
 RD a=$7FFF d=FFFF CP-1610          (PC = $2010) t=50575
 RD a=$7FFF d=FFFF CP-1610          (PC = $2010) t=50733
 RD a=$7FFF d=FFFF CP-1610          (PC = $2010) t=50891
 RD a=$7026 d=0001 CP-1610          (PC = $7026) t=51060
 RD a=$7027 d=02BB CP-1610          (PC = $7027) t=51064
 RD a=$7028 d=0001 CP-1610          (PC = $7027) t=51064
 RD a=$7029 d=00E0 CP-1610          (PC = $7027) t=51064
 RD a=$702A d=0004 CP-1610          (PC = $702A) t=51074
 RD a=$702B d=0120 CP-1610          (PC = $702A) t=51074
 RD a=$702C d=001F CP-1610          (PC = $702A) t=51074
 RD a=$702D d=0004 CP-1610          (PC = $702D) t=51171
 RD a=$702E d=0110 CP-1610          (PC = $702D) t=51171
 RD a=$702F d=00AB CP-1610          (PC = $702D) t=51171
 RD a=$7030 d=000C CP-1610          (PC = $10AB) t=51184
 RD a=$7031 d=00A9 CP-1610          (PC = $7031) t=51256
 RD a=$7032 d=0041 CP-1610          (PC = $7032) t=51262
 RD a=$7033 d=03B9 CP-1610          (PC = $7033) t=51268
 RD a=$7034 d=00FD CP-1610          (PC = $7033) t=51268
 RD a=$7035 d=0379 CP-1610          (PC = $7035) t=51276
 RD a=$7036 d=0001 CP-1610          (PC = $7035) t=51276
 RD a=$7037 d=0204 CP-1610          (PC = $7037) t=51284
 RD a=$7038 d=0006 CP-1610          (PC = $7037) t=51284
 RD a=$703F d=0004 CP-1610          (PC = $703F) t=51293
 RD a=$7040 d=0310 CP-1610          (PC = $703F) t=51293
 RD a=$7041 d=003D CP-1610          (PC = $703F) t=51293
 RD a=$4800 d=FFFF CP-1610          (PC = $101F) t=51333

 

 

Notice how $7000 is read twice.  The first is where the EXEC checks if code is present at $7000 (step 2).  Since it is, the EXEC jumps to address $7000 (step 3).  However, before the CPU can actually execute the instruction, it has to first read it from memory.  This is why there is a 2nd read of $7000.  Execution continues normally through the early $7000 range (with a detour through the $2xxx range).  Only after the code in $7xxx is done does execution return back to the EXEC where it later checks $4800, which is the last read in the list.

 

Now, why didn't the 'b' command (execution breakpoint) show this?  Mainly, execution breakpoints are only hit if execution is attempted at that address.  My guess is that when you ran your experiment, that the ecs.bin file was missing or not loaded by jzintz.  Thus, $7000 was $FFFF so the EXEC didn't attempt to execute anything (skipped step 3) so the breakpoint at $7000 wasn't triggered.  Less likely, perhaps you had the re-written exec.bin file that older jzintv shipped with, which might not check the addresses or might not check them in the correct order (not sure since I avoid the re-written exec.bin).  However, the exec.bin thing seems very unlikely (also, the latest jzintv doesn't ship this file anymore).

  • Like 1
Link to comment
Share on other sites

17 hours ago, DZ-Jay said:

Has it been confirmed that you could do so?

Confirmed in emulation.  When you have a $4800 cartridge plugged in to the keyboard component, the system boots to the keyboard component and the catridge can be started from the KC menu.  Someone can try Demon Attack in their Keyboard Component to test with real hardware.

Link to comment
Share on other sites

8 hours ago, Lathe26 said:

 

I just double-checked things and the original post is correct.  First address $7000 is checked, then $4800.

 

Here's how I confirmed...


Starting jzIntv...
 0000 0000 0000 0000 0000 0000 0000 1000 --------  JSRD R5,$1026            0
> @ 4800 4fff
Now watching reads of $4800 through $4FFF
> @ 7000 7fff
Now watching reads of $7000 through $7FFF
> r
 RD a=$7000 d=FFFF CP-1610          (PC = $101F) t=618
 RD a=$4800 d=FFFF CP-1610          (PC = $101F) t=51333

 

Notice that the '@' command (memory read watching/logging) was used instead of the 'b' command (execution breakpoint).  I'll mention significance of this later on.

You know, I though about that after I posted:. You are right, it won't stop at $7000 first if nothing is found there first.

 

UPDATE:  I did some more analysis but my lights went out before I was able to submit it, so I'll post it again later.  In the meantime, the short and sweet is that, I realized I was getting different results from you because I was using the "mini" ROMs instead of the original ones.  The "miniexec.bin" will apparently test $4800 first.  The real EXEC will do as you say.

 

    -dZ.

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

10 hours ago, mr_me said:

Confirmed in emulation.  When you have a $4800 cartridge plugged in to the keyboard component, the system boots to the keyboard component and the catridge can be started from the KC menu.  Someone can try Demon Attack in their Keyboard Component to test with real hardware.

Just confirmed that Demon Attack does work on KC.

  • Like 1
Link to comment
Share on other sites

On 3/27/2021 at 11:11 AM, mr_me said:

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

Yes.  Of the 6 released carts, all but Melody Blaster and Mr. BASIC bypass the ECS menu.  Any original cart could do so by raising a bit in part of the cartridge ROM header, near that one bit that bypasses the Intellivision-II "Coleco lockout" feature.

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