Jump to content
IGNORED

Jumpman 2600 Development


Cybergoth

Recommended Posts

You definitely need to have a level based on the Atari Age logo!

 

Well, there's a very, very, very, very small chance that less than a dozen of the original levels can be converted properly to the VCS, in which case it would make sense to fill some gaps with custom levels.

 

You can take the risk and try and design such a level if you really want to straight away, using either the Jumpman - Under Construction tool or the Jumpman Lives! editor. The later can only do basic levels with bullets as obstacles, but is overall easier to use.

 

Much more challenging would be creating new levels with Jumpman Zero, which requires real programming, but offers fancy 3D effects ;)

 

Hmmm, I think I distinctly heard a gauntlet being thrown down. :)

 

I can help with some levels, but I'm quite busy with my goofy-little-homebrew. I'll take a look at those links. It might quite fun to create some levels based on landmarks - perhaps Johannisburg Castle.

Link to comment
Share on other sites

Continuing with "Bombs Away" tomorrow :)

 

Well, I did start with "Bombs Away", but when I was working on it I had so many ideas of optimizing ROM usage for "Robots I" that I switched back to it and just did that instead.

 

So I spent the last three nights hand-optimizing all 12 kernels required for "Robots I" individually, as well as the data they required. A pretty boring excercise actually, but still it did the job of reducing the required ROM space from 2,5K to 1,5K.

 

On the way I made all bombs removable already, so there's also something new to look at in the attached binary ;)

 

Still ahead lies the really hard part of adding the robot sprites display code to all 12 kernels. The tightest is ROBOTSIKERNEL8, so next I'm trying to breakthrough here. I have an idea that might at least do the trick of grouping the free cycles together for another little step, let's hope it'll work out... :ponder:

 

One major descission I made after all the recent experiences is to shrink this project to a healthier level in order to get it done. Seeing that I can sink almost a full month just into perfecting the display of a single level is just too alarming.

 

So I decided to have Jumpman 2600 fit into 32K, which by my estimate means 14 levels. This will probably still keep me busy for the next two years, but it will make an actual release much more realistic.

 

Second descission I made, is that once I have the display for the first two levels completed, I will stop converting more levels and make those two fully playable first instead. I'm having nightmares of spending a whole year converting levels, only to find out that something doesn't work out in the end :-o

robots.zip

Link to comment
Share on other sites

One major descission I made after all the recent experiences is to shrink this project to a healtier level in order to get it done. Seeing that I can sink almost a full month just into perfecting the display of a single level is just too alarming.

 

So I decided to have Jumpman 2600 fit into 32K, which by my estimate means 14 levels. This will probably still keep me busy for the next two years, but it will make an actual release much more realistic.

 

Second descission I made, is that once I have the display for the first two levels completed, I will stop converting more levels and make those two fully playable first instead. I'm having nightmares of spending a whole year converting levels, only to find out that something doesn't work out in the end :-o

Good decisions and, as a plus, it means we get a playable version sooner. :)

Link to comment
Share on other sites

If you need to go 64k, you could use the remaining X07 boards. With a simplified banking scheme with just 16 hotspots, and making sure bankswitches always occur in the first 2k of each bank, it should work just fine.

 

That is very cool to have this option for the worst case. It might be that even simplest levels will require whole banks, so that 64K is almost mandatory to produce enough content. And I just saw that Eckhard commited the X07 driver for Stella, so there's good news in that regard as well :)

Link to comment
Share on other sites

If you need to go 64k, you could use the remaining X07 boards. With a simplified banking scheme with just 16 hotspots, and making sure bankswitches always occur in the first 2k of each bank, it should work just fine.

 

That is very cool to have this option for the worst case. It might be that even simplest levels will require whole banks, so that 64K is almost mandatory to produce enough content. And I just saw that Eckhard commited the X07 driver for Stella, so there's good news in that regard as well :)

I guess nobody told him that I had already written a Stella X07 driver for testing the holiday cart...

Link to comment
Share on other sites

And I just saw that Eckhard commited the X07 driver for Stella, so there's good news in that regard as well :)

 

Though as yet neither the X07 nor 0840 drivers include a feature I think should be added to future builds: when a condition arises which could cause a random bank switch, do a random bank switch. The notable cases occur with the following access sequences:

0840:
0 1xxx xPxx xxxx -- Legitimate bank switch
1 1xxx xQxx xxxx -- Could leave either bank P or Q selected

X07:
0 1xxx PPPP 1101 -- Legitimate bank switch
x xxxx xxxx xxxx (something other than a legitimate bank switch)
1 1xxx QQQQ 1101 -- Could leave PPPP, QQQQ, or any 'mixture' thereof selected

X07:
0 1xxx PPPP 1101 -- Legitimate bank switch
x xxxx xxxx xxxx (something other than a legitimate bank switch)
x xxxx xxxx xxxx (something other than a legitimate bank switch)
1 1xxx QQQQ 1101 -- Could leave PPPP, QQQQ, or any 'mixture' thereof selected

 

The remedy for the 0840 issue is to run all bank switch instructions either from RAM or from the bottom 2K of the selected bank. For X07, I would advise the same thing except that putting the instruction sequence "NOP $08xD / BRK" at address $1FF8 of a bank is safe (the BRK will generate fetches of $1FFB and $1FFC, but not $1FFD).

Link to comment
Share on other sites

The only problem with that idea is 0840 and X07 boards just had trouble with certain 7800s. But such a feature should be selectable from the command line for development. Also useful for development is a setting to eliminate zero page reads acting as immediate. We've already figured out that certain EPROMs don't behave this way.

Link to comment
Share on other sites

The only problem with that idea is 0840 and X07 boards just had trouble with certain 7800s.

 

True, but I don't see any reason why any software should be written for those schemes that would be troubled by the random bank switches. Unless some smart-alec decides to use the 'random' switching as a random number generator, or unless someone wants to deliberately make a game incompatible with some machines, I wouldn't see much reason to disable the feature. Though on further consideration, it may be better to have the game jam and display the PC than perform a random bankswitch, especially given that in the failure scenarios a bank switch could occur in the middle of a memory fetch resulting in a byte being read that's different from what's in any bank.

Link to comment
Share on other sites

The only problem with that idea is 0840 and X07 boards just had trouble with certain 7800s.

Though on further consideration, it may be better to have the game jam and display the PC than perform a random bankswitch, especially given that in the failure scenarios a bank switch could occur in the middle of a memory fetch resulting in a byte being read that's different from what's in any bank.

That depends on the philosophy of emulator developers. If the goal is to emulate a 2600 as accurately as possible, that means what some 7800s might do is irrelevant to the goal. If the goal is to promote the 2600 homebrew scene, maybe sacrificing a little 2600 emulation accuracy is worth it.

Link to comment
Share on other sites

I guess nobody told him that I had already written a Stella X07 driver for testing the holiday cart...
No idea who wrote it, I just saw who commited it. Maybe it even is yours :)
I didn't release it, so either it's a duplicate effort or he hacked into my computer :D

 

Hm... now you're puzzling me. Eckhard is the #1 2600 guru on this planet to me, but even he can't write a X07 driver when you didn't at least provide him with the specs, no? Or were they published somewhere in a public area?

Link to comment
Share on other sites

I guess nobody told him that I had already written a Stella X07 driver for testing the holiday cart...
No idea who wrote it, I just saw who commited it. Maybe it even is yours :)
I didn't release it, so either it's a duplicate effort or he hacked into my computer :D

 

Hm... now you're puzzling me. Eckhard is the #1 2600 guru on this planet to me, but even he can't write a X07 driver when you didn't at least provide him with the specs, no? Or were they published somewhere in a public area?

My theory is that he got ahold of Supercat's z26 code, and reverse-engineered it and adapted it to Stella.

 

But... it may be better this way, as my code probably isn't as good as his :dunce:

Link to comment
Share on other sites

But... it may be better this way, as my code probably isn't as good as his :dunce:

 

Ah, come on! :)

 

If you want to have a look, it's here:

http://stella.cvs.sourceforge.net/stella/stella/src/emucore/

Hmmm... You tell me.

 

Eckhard's code:

	 if((address & 0x180f) == 0x080d) bank((address & 0xf0) >> 4);
 else if((address & 0x1880) == 0)
 {
   if((myCurrentBank & 0xe) == 0xe)
	 bank(((address & 0x40) >> 6) | (myCurrentBank & 0xe));
 }

Mine:

  if ((address & 0x180F) == 0x080D) bank((address & 0x00F0) >> 4);
 
 if ((myCurrentBank >= 14) && ((address & 0x1880) == 0)) bank(14+((address & 0x0040) >> 6));

Edit: Similar, but different.

Edited by batari
Link to comment
Share on other sites

Edit: Similar, but different.

 

Well, his "else if" will be executed more efficiently (if the logic still works the same), but he has an additional "or" condition you don't have in the second branch. Also the order in which the conditions in the second branch are tested is different, so depending on how often they usually fail/succeed, either yours or his is better ;)

 

Just considering the plain C point of view, not what the code actually does.

Link to comment
Share on other sites

Edit: Similar, but different.

 

Well, his "else if" will be executed more efficiently (if the logic still works the same), but he has an additional "or" condition you don't have in the second branch. Also the order in which the conditions are tested is different, so depending on how often they usually fail/succeed, either yours or his is better ;)

 

Just considering the plain C point of view, not what the code actually does.

Oops, the code I posted isn't correct (missing a 14+.) Xcode tools put the correct one in a weird place and I posted the wrong code. Without the 14+ there's no way my code would work :)

Link to comment
Share on other sites

I guess nobody told him that I had already written a Stella X07 driver for testing the holiday cart...
No idea who wrote it, I just saw who commited it. Maybe it even is yours :)
I didn't release it, so either it's a duplicate effort or he hacked into my computer :D

 

Hm... now you're puzzling me. Eckhard is the #1 2600 guru on this planet to me, but even he can't write a X07 driver when you didn't at least provide him with the specs, no? Or were they published somewhere in a public area?

My theory is that he got ahold of Supercat's z26 code, and reverse-engineered it and adapted it to Stella.

 

But... it may be better this way, as my code probably isn't as good as his :dunce:

There already was code for Stella and z26? :-o If you guys keep discussing emulator related things in the holiday cart forum and even improve the emulators there, I guess I should join too. So, how do I join the holiday cart programmers club, and what's the secret handshake? ;)

 

You and Supercat mentioned X07 bankswitching somewhere in the public discussion of the holiday cart, so I asked Supercat for details. And since I was helping Steve with 4A50 support for Stella anyway, I thought I'd add support for X07 too. Most of the work was spend in getting my old Stella programming setup to work again. Writing the actual X07 class was only a couple of minutes of mostly cut & paste. Sending you an email to ask for a copy of your code probably would have taken longer. ;)

 

 

Ciao, Eckhard Stolberg

Link to comment
Share on other sites

Though as yet neither the X07 nor 0840 drivers include a feature I think should be added to future builds: when a condition arises which could cause a random bank switch, do a random bank switch. The notable cases occur with the following access sequences:

0840:
0 1xxx xPxx xxxx -- Legitimate bank switch
1 1xxx xQxx xxxx -- Could leave either bank P or Q selected

X07:
0 1xxx PPPP 1101 -- Legitimate bank switch
x xxxx xxxx xxxx (something other than a legitimate bank switch)
1 1xxx QQQQ 1101 -- Could leave PPPP, QQQQ, or any 'mixture' thereof selected

X07:
0 1xxx PPPP 1101 -- Legitimate bank switch
x xxxx xxxx xxxx (something other than a legitimate bank switch)
x xxxx xxxx xxxx (something other than a legitimate bank switch)
1 1xxx QQQQ 1101 -- Could leave PPPP, QQQQ, or any 'mixture' thereof selected

 

The remedy for the 0840 issue is to run all bank switch instructions either from RAM or from the bottom 2K of the selected bank. For X07, I would advise the same thing except that putting the instruction sequence "NOP $08xD / BRK" at address $1FF8 of a bank is safe (the BRK will generate fetches of $1FFB and $1FFC, but not $1FFD).

Does this affect all consoles or just those 7800's that have the 'Dark Chambers' fix? Also in your blog you mentioned that there is a chance of a random bank switch before the cart is set to a known state by the first bankswitching instruction. How likely is that to happen, and how many cycles could the game run before such a random switch is almost certain to have happened?

 

You are righ though. For programmers it would be good, if the emulator informs them when they are doing something that they shouldn't do or that might cause compatibility issues on certain consoles. It might even be a good idea to have a seperate TIA handler to emulate the TIA89 consoles (the ones that have problems with Kool Aide Man). But seeing how slow emulator development is these days, I wouldn't expect too many of these features to be included in the emulators anytime soon. ;)

 

 

Ciao, Eckhard Stolberg

Link to comment
Share on other sites

  • 3 weeks later...

And work on the project continues...

 

The bad news first:

 

- I ultimately decided to drop Robots I.

- I'm cancelling any during-play changes of the playfield.

 

Both of these descissions come more or less from my plans of making 2 levels playable now. I realized that the space-optimized playfield data I did for "Robots I" would kill me in regards of "bomb collision detection" and "player situation analysis". This also means that I can't convert any levels that are fully assymetrical and require 12 or more kernels top to bottom. Not sure how many/which that are right now. Less than a handfull I think.

 

Same goes with playfield changes. With lots of overhead it may have been possible to "map" the RAM buffers I was using for live playfield changes back into the appropriate positions of the layout data, but in the end I decided that I didn't want to add this to the already enormous task-list for this conversion at all...

 

For The good news, I'm making good progress on "Bombs Away", see the attachment :)

bombsaway.zip

Link to comment
Share on other sites

  • 2 months later...

At times I can be a real idiot as well though :lolblue:

 

Regarding Jumpman, it's all stalled once again, I'm getting nothing done these days.

 

Not sure if it's a burn out, but in general when coming home from work after 8-10 hours of programming for food, I prefer enjoying my kids and once they sleep I'm playing games instead of programming them. After a while that usually swings back to programming, but it didn't do so yet and I'm not forcing things that are supposed to be fun :)

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