Jump to content

Planet Bob

  • entries
    430
  • comments
    1,870
  • views
    659,797

Incredible 2600 Discovery!

Sign in to follow this  
Cybergoth

1,541 views

Hi there!

 

Look at this: Klov

(read the fine print)

 

If you don't get what I mean, try here: System 16

 

Screenshot:

tt.gif

 

ROMs:

Set1: starfira.zip

Set2: 2puck.zip

 

6K Binaries: pescoman_v97.zip

 

Disassembly from TJ: pescoman_v98.zip

Latest source from TJ: pescoman_x3.zip

Service Mode removal try from MR: 2puck.zip

Second update from MR: 2puck.zip

Third source from TJ:

4th source from TJ:

 

Greetings,

Manuel

Sign in to follow this  


47 Comments


Recommended Comments



That's interesting. I wonder if the picture of "breakout" on the second page is shown with the wrong aspect ratio, since the photo of the cabinet shows a horizontal monitor. Also, it's curious that the game is shown in sideways orientation. I'm not quite sure what's really going on.

 

Also, I just looked up Breakout on the KLOV and it's shown in double-ended cocktail format. Would the game have been wired to allow the screen to be drawn in reverse order, or did the game just use a relay to flip the monitor's deflection coils?

Share this comment


Link to comment

I added a MAME screenshot I just did myself. I could imagine they just had an older/buggy driver for the System 16 screenshots.

 

I wonder if anyone would like to try to:

 

A) Add support for this to Stella/Z26 (It's 3 2K ROMS, so its something new :D)

B) Get it running on a stock 2600 (8K SC I guess)

 

Both should be rather trivial tasks I think, but such jobs are rather something for TJ, batari, Eckhard or yourself ;)

Share this comment


Link to comment

;)

 

Apparently there are two romsets. I found tourtabl, but apparently there is another set called tourtab2... Did anyone find that one?

 

Anyway, according to MAME's cheat search feature, the second RIOT chip appears to be here:

400-47F: 2nd RIOT's RAM

500-51F: 2nd RIOT's I/O

 

Also, there appears to be 6k addressable ROM! $E800-$FFFF is tagged for ROM (as is $800-$FFF, but that's just a mirror of $E800-$EFFF.)

Share this comment


Link to comment

Got the memory layout:

030929.ab2 and 030751.ab2: $0800..$0fff (both ROMs are 99% identical)

030752.ab3: $1000..$17ff

030753.ab4: $1800..$1fff

 

So that's indeed 6K of ROM.

 

Not sure about $04xx and 05xx yet.

Share this comment


Link to comment

Can DiStella possibly be tweaked to disassemble 6K?

 

EDIT: Added 2 6K binaries merged like TJ suggested

Share this comment


Link to comment

Can DiStella possibly be tweaked to disassemble 6K?

I created a disassembly which assembles 1:1 to the 6K version. Check your mail.

Share this comment


Link to comment

Thanks, excellent work! Attached your disassembly! ;)

 

So, what difference is INTIM making vs. TIMINT?

 

(The First byte might be a kind of versioning or some CRC)

Share this comment


Link to comment

So, what difference is INTIM making vs. TIMINT?

IIRC TIMINT is a bit "safer" when the code lasts too long. Else both should work identical.

Share this comment


Link to comment

If you clonespy those 3 ROMs vs. Video Olympics, which is the closest?

 

It might give a clue as how to have it best splitted into 4K banks; Maybe have the "video olympics" 2K in one bank and the new 4K in the other?

Share this comment


Link to comment

All pretty different:

(1/5)				0  1  2  3  4
0 030753··········   ·  -  - 37 10
1 030751··········   -  ·  - 38 14
2 030752··········   -  -  · 38 18
3 tt234··········· 100100100  · 36
4 Video Olympics··   =  =  = 14  ·

Share this comment


Link to comment

Hm... from this point on, it seems as if it would be the best to have such a binary running emulated in Z26 or Stella, then it could be tweaked with instant feedback wether something broke.

 

Next task seems to be sorting out the inputs:

PORT_START /* TIA INPT4 */

PORT_DIPNAME( 0x80, 0x80, "Breakout Replay" )

PORT_DIPSETTING( 0x00, DEF_STR( Off ))

PORT_DIPSETTING( 0x80, DEF_STR( On ))

 

PORT_START /* TIA INPT5 */

PORT_DIPNAME( 0x80, 0x80, "Game Length" )

PORT_DIPSETTING( 0x00, "11 points (3 balls)" )

PORT_DIPSETTING( 0x80, "15 points (5 balls)" )

 

PORT_START /* RIOT #0 SWCHA */

PORT_DIPNAME( 0x0F, 0x0E, "Replay Level" )

PORT_DIPSETTING( 0x0B, "200 points" )

PORT_DIPSETTING( 0x0C, "250 points" )

PORT_DIPSETTING( 0x0D, "300 points" )

PORT_DIPSETTING( 0x0E, "400 points" )

PORT_DIPSETTING( 0x0F, "450 points" )

PORT_BIT ( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)

PORT_BIT ( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)

PORT_BIT ( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)

PORT_BIT ( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)

 

PORT_START /* RIOT #0 SWCHB */

PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Game Select") PORT_CODE(KEYCODE_SPACE)

PORT_BIT ( 0x40, IP_ACTIVE_LOW, IPT_TILT )

PORT_BIT ( 0x80, IP_ACTIVE_LOW, IPT_COIN2 )

 

PORT_START /* RIOT #1 SWCHA */

PORT_DIPNAME( 0x0F, 0x07, DEF_STR( Coinage ))

PORT_DIPSETTING( 0x00, "Mode A" )

PORT_DIPSETTING( 0x01, "Mode B" )

PORT_DIPSETTING( 0x02, "Mode C" )

PORT_DIPSETTING( 0x03, "Mode D" )

PORT_DIPSETTING( 0x04, "Mode E" )

PORT_DIPSETTING( 0x05, "Mode F" )

PORT_DIPSETTING( 0x06, "Mode G" )

PORT_DIPSETTING( 0x07, "Mode H" )

PORT_DIPSETTING( 0x08, "Mode I" )

PORT_DIPSETTING( 0x09, "Mode J" )

PORT_DIPSETTING( 0x0A, "Mode K" )

PORT_DIPSETTING( 0x0B, "Mode L" )

PORT_DIPSETTING( 0x0C, "Mode M" )

PORT_DIPSETTING( 0x0D, "Mode N" )

PORT_DIPSETTING( 0x0E, "Mode O" )

PORT_DIPSETTING( 0x0F, "Mode P" )

PORT_DIPNAME( 0x30, 0x00, DEF_STR( Language ) )

PORT_DIPSETTING( 0x00, DEF_STR( English ) )

PORT_DIPSETTING( 0x10, DEF_STR( French ) )

PORT_DIPSETTING( 0x20, DEF_STR( German ) )

PORT_DIPSETTING( 0x30, DEF_STR( Spanish ) )

PORT_SERVICE( 0x40, IP_ACTIVE_HIGH )

PORT_BIT ( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )

 

PORT_START /* RIOT #1 SWCHB */

PORT_BIT ( 0x02, IP_ACTIVE_LOW, IPT_START4 )

PORT_BIT ( 0x04, IP_ACTIVE_LOW, IPT_START2 )

PORT_BIT ( 0x08, IP_ACTIVE_LOW, IPT_START1 )

Share this comment


Link to comment

That's pretty wild - never knew there was an arcade system based on the 2600's hardware.

 

What's the "fine print" on the KLOV site though?

Share this comment


Link to comment

I meant the trivia section, where it mentions Video Olympics :D

 

BTW: Actually I found this when browsing MAME by resolution. I was looking for a game that would fit on the VCS screen - Tournament Table matches it exact ;)

Share this comment


Link to comment

I'd heard of there being 2600-based arcade hardware some years ago. I just never knew which game(s) used it.

Share this comment


Link to comment

I'd definitely like to see this get ported back to the 2600. I have seen the cab for this. It uses analog noncentering sticks. I don't think it sold too well and doesn't appear to be much of a collectible, but it is a curious piece of history.

Share this comment


Link to comment

Next task seems to be sorting out the inputs:

How do you read this? ;)

 

Pretty straightforward:

PORT_START /* TIA INPT4 */

PORT_DIPNAME( 0x80, 0x80, "Breakout Replay" )

PORT_DIPSETTING( 0x00, DEF_STR( Off ))

PORT_DIPSETTING( 0x80, DEF_STR( On ))

 

This for example would let me assume that it (mis-)uses the left fire button state to switch a replay mode for the breakout game on/off. The leftmost bit set = ON, clear = OFF.

 

This MAME code is not necessarily complete or correct though, but it might be a good starting point.

 

What I saw in your disassembly code already, is that more 0x05XX adresses are used than just SWCHA/SWCHB, but the ports defined by the MAME driver only contain those two.

 

I find the settings regarding modes and language most interesting. Maybe docs on those modes can be found somewhere. Also, when getting rid of the foreign languages, maybe it can fit even into 4K somehow.

Share this comment


Link to comment

Pretty straightforward:

PORT_START /* TIA INPT4 */

PORT_DIPNAME( 0x80, 0x80, "Breakout Replay" )

PORT_DIPSETTING( 0x00, DEF_STR( Off ))

PORT_DIPSETTING( 0x80, DEF_STR( On ))

 

This for example would let me assume that it (mis-)uses the left fire button state to switch a replay mode for the breakout game on/off. The leftmost bit set = ON, clear = OFF.

Ok, I understand PORT_DIPSETTING, but what are the two parameters in DIP_NAME for? And where (except as a name in the comment) is the register address defined at all?

 

What I saw in your disassembly code already, is that more 0x05XX adresses are used than just SWCHA/SWCHB, but the ports defined by the MAME driver only contain those two.

I noticed that part too.

 

I find the settings regarding modes and language most interesting. Maybe docs on those modes can be found somewhere. Also, when getting rid of the foreign languages, maybe it can fit even into 4K somehow.

Well, I yet have to find any language traces in the code at all. ;)

Share this comment


Link to comment
Ok, I understand PORT_DIPSETTING, but what are the two parameters in DIP_NAME for?

 

Judging from the code it seems the first parameter is the (bit-)mask and the second is the (factory?/MAME) default value for a switch.

 

And where (except as a name in the comment) is the register address defined at all?

 

I'm missing that too, but keep in mind that we're staring at the implementation. Maybe the mapping is done in the header.

 

Well, I yet have to find any language traces in the code at all. ;)

 

It should have just a set of alphabet gfx, then creating all text from tables, no? Well, let's just have a look what $0500 is used for tonight! :D

Share this comment


Link to comment

Found the words and letter gfx. ;)

 

Words are defined starting from $1dfb (1=A, 2=B ...), letter gfx from $1f00. The gfx are stored interleaved (A= $1f01, 1f25, $1f49, $1f6d...). Even the gfx for unused letters are defined.

 

The letter gfx are decoded and stored into extra RAM before being displayed.

 

$500 is "RIOT #1 SWCHA", the modes A..P define the "coinage".

Share this comment


Link to comment

tourtabl.png

Wasn't too hard to hack Stella for this, though this hacked version probably won't run anything else. It's stuck in test mode because the 2nd RIOT isn't handled (not sure how to do this part...)

 

Now most interesting is: 314 scanlines! Could it be PAL?

Share this comment


Link to comment

I forgot to mention that the second RIOT's RAM is working (the game wouldn't run without it.)

 

For now I made any access to the second RIOT's I/O return zeros and the game now runs in attract mode. Moving the right joystick will change the game selected, but that's all you can do. I'm not sure how to insert a coin at the moment...

 

It has 290 scanlines in attract mode, but now I'm wondering if it's not bad programming, but instead the second RIOT's timers are being used and returning improper values?

Share this comment


Link to comment

Guest
Add a comment...

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