Jump to content
IGNORED

Gopher2600 (continuing development on Github)


JetSetIlly

Recommended Posts

2 hours ago, johnnywc said:

:thumbsup:  

That is correct.

INPT0 and INPT1 should be high when a gamepad is connected to the left port and INPT2 and INPT3 should be high when a gamepad is connected to the right port.  (same as paddles)  At least that how it works on my 4-switch and the Sega gamepads I have tested with.  

:idea: I may be wrong, but I believe the issue is what Gopher2600 sets INPT0 bit 7 to high on startup when a gamepad is connected.  (at least this is what Stella does)

 

You're right. I'm using the Qix demo you released last year to test. I see the Quadtari message when the gamepad is attached. So I've changed the code so that INPT0 is high in addition to INPT1 and Qix says it detects the Gamepad.

 

I wonder why INPT0 is high though? Is that because there's a third button that can be used?

 

2 hours ago, johnnywc said:

Right now all there is the FAQ unfortunately, but I do have a controller tester app that can detect what controller is connected to each port, including JOYSTICK, GAMEPAD, QUADTARI and SAVEKEY.  It shows basically how to switch between reading controller 1 and 2  and controllers 3 and 4.  (it uses the DUMP_PORTS bit 7 of VBLANK to enable a multiplexer on the QT to determine which controllers to read).  I had a technical discussion with Thomas J. when he developed the support for Stella; I'll dig it up and send it your way if you think it's something you'll want to add to Gopher some time in the future. :)

 

I'll take a look at the Quadtari this weekend. Could you send me the tester app? That would be useful.

 

 

Link to comment
Share on other sites

24 minutes ago, JetSetIlly said:

 

You're right. I'm using the Qix demo you released last year to test. I see the Quadtari message when the gamepad is attached. So I've changed the code so that INPT0 is high in addition to INPT1 and Qix says it detects the Gamepad.

:thumbsup:  Thanks!

24 minutes ago, JetSetIlly said:

 

I wonder why INPT0 is high though? Is that because there's a third button that can be used?

It's because of how the Genesis is wired up (INPT0 is wired to VCC, along with pin 7), so unfortunately a 3rd button cannot be used. :(  

24 minutes ago, JetSetIlly said:

 

I'll take a look at the Quadtari this weekend. Could you send me the tester app? That would be useful.

 

Will do, thanks!

 

PS Is there an official place where I can post suggestions or is better to do it here in this thread or through PMs?  I don't want to inundate you with a barrage of feature requests! ;)   Also, I used the profiler today and was able to optimized my text and draw routines and Qyx can now run without MAM set to full (still partial of course) so thanks for that! :D  

  • Like 1
Link to comment
Share on other sites

Just now, johnnywc said:

PS Is there an official place where I can post suggestions or is better to do it here in this thread or through PMs?  I don't want to inundate you with a barrage of feature requests! ;)

 

The personal message system here on AtariAge is good for discussion I've found.

 

Just now, johnnywc said:

 

Also, I used the profiler today and was able to optimized my text and draw routines and Qyx can now run without MAM set to full (still partial of course) so thanks for that! :D  

 

Wow! That's very encouraging news!

 

  • Like 1
Link to comment
Share on other sites

  • 1 month later...
On 3/9/2022 at 4:31 PM, JetSetIlly said:

I've also added the Speed SpeakJet command but I'm not sure how it's measured. 

 

There isn't really a "measurment" for the speed command.  Between each phoneme there is a transition where all the vocal parameters are shifted to their new destinations.  The speed command regulates how fast that happens.  But since some phonemes are further apart in values, then it really depends on which phoneme is being transitioned to which.

Link to comment
Share on other sites

15 hours ago, Scott Savage said:

There isn't really a "measurment" for the speed command.  Between each phoneme there is a transition where all the vocal parameters are shifted to their new destinations.  The speed command regulates how fast that happens.  But since some phonemes are further apart in values, then it really depends on which phoneme is being transitioned to which.

Interesting. Thanks. The Speakjet manual indicates that "speed" ranges from 0 to 127 with a default of 114. I'm not even sure whether higher numbers indicate "faster" - the manual isn't clear on that but I've assumed it is.

 

In Festival fixed prosody, the duration value (of a phoneme) is defined in milliseconds, so I've naively assumed that whatever value is given by the Speakjet speed command is a duration in milliseconds. Undoubtedly wrong, but it seems to give reasonable results.

Link to comment
Share on other sites

On 5/12/2022 at 4:49 AM, JetSetIlly said:

Interesting. Thanks. The Speakjet manual indicates that "speed" ranges from 0 to 127 with a default of 114. I'm not even sure whether higher numbers indicate "faster" - the manual isn't clear on that but I've assumed it is.

 

In Festival fixed prosody, the duration value (of a phoneme) is defined in milliseconds, so I've naively assumed that whatever value is given by the Speakjet speed command is a duration in milliseconds. Undoubtedly wrong, but it seems to give reasonable results.


If it works out to be close to milliseconds, it is entirely coincidental.  I am fairly certain that if it was in ms then the I would have noted that in the manual.  However ... I am also working on 16/18 year old memories.  I might be wrong.  

Link to comment
Share on other sites

6 hours ago, Scott Savage said:


If it works out to be close to milliseconds, it is entirely coincidental.  I am fairly certain that if it was in ms then the I would have noted that in the manual.  However ... I am also working on 16/18 year old memories.  I might be wrong.  

I agree, it would have been noted in the Speakjet manual. It seemed odd to me that a unit of time was not specified, but your explanation makes sense.

Link to comment
Share on other sites

v0.18.0 https://github.com/JetSetIlly/Gopher2600/releases/tag/v0.18.0

 

This release has focused on additional functionality for ARM developers. The performance window has been improved with the ability to focus on a specific kernel. That is ARM execution during the VBLANK, the visible screen, or the Overscan. This can usefully remove code not pertinent to that kernel from the performance list.

 

Additional figures include an overall performance rating with respect to the selected kernel (or to the entire frame if no kernel is focused upon). Statistics can also be viewed as ARM cycle counts, as opposed to percentile figures.

 

image.thumb.png.6dc45469af1148aedaee8d61dc9721ed.png

 

 

Gopher2600 can now track global variables. It understands all basic types, as well as arrays, structs, unions, pointers and typedefs.

 

image.thumb.png.1a6b0ab8681fc610966f9bb235d673e6.png

 

 

For CDF type cartridges (including CDFJ and CDFJ+) a stream visualiser is included. The visualiser will work even when no source is available.

 

 

Finally, the ARM illegal memory access monitor will notify the developer of null pointer dereferencing and stack collisions.

 

 

Away from the ARM development features, the VCS RAM window now includes annotation of any symbol names. The yellow tabs indicate that that memory location has been named. Additionally, the red squares (as seen in the image) indicate the extent of the 6507 stack. Tooltips provide the additional detail on a memory location.

 

image.png.b55e8350f13b08f27e1b5340a93e1735.png

 

 

The other feature worth highlighting is the TV screen scaler. In the very early days of Gopher2600, the window could be set to any size and the TV screen would scale. However, this resulted in uneven scanlines. Consequently, I changed the resizing policy so that the TV image would scale only to whole integers (ie. 1x, 2x, 3x, etc.)

 

For this version, I've added a scaling shader which successfully irons out uneven scanlines. Moreover, a bug in the Windows and Mac versions has been fixed so that the user can see the scaling in "real-time".

 

 

 

Thanks to @Andrew Davie and @johnnywc for ideas and testing.

  • Like 7
  • Thanks 1
Link to comment
Share on other sites

  • 2 weeks later...

I've spent the last week looking for optimisation opportunities in the emulator. I thought I'd found them all but I've managed to squeeze a 16% to 18% improvement in uncapped frame rate for normal ROMs, and a 13% to 16% for ARM ROMs.

 

Still nowhere near as performant as Stella but I think it's a big enough improvement for another binary release.

 

https://github.com/JetSetIlly/Gopher2600/releases/tag/v0.19.0

 

 

Edited by JetSetIlly
  • Like 9
Link to comment
Share on other sites

Playing around with an old idea this evening. I wasn't happy with the UI controls I had come up with previously, so I parked the code and forgot about it. But looking at it again this evening and I think there's potential here.

 

A paintbox type window that allows you to recolour the screen by drag-and-drop. It works by searching for and changing values in the ROM. Playfield and background only for now but something to build on. Fun!

 

No CRT effects in this video because the MPEG compression wrecks it.

 

  • Like 6
  • Thanks 1
Link to comment
Share on other sites

A little more work on the painting concept. The new fill tool now makes as many searches and writes necessary to fill in a visual block of colour.

 

The previous method was fine for a game like Pitfall but for games with more sophisticated player drawing routine the results were unsatisfactory.

 

In the following video, I am re-colouring some elements in Real Sports Boxing. We can see the slower process required to fully change the shorts and boots of the boxer and also the scoreboard background at the bottom of the screen.

 

Finally, to prove that the changes are persistent, I save the ROM and load it into Stella.

 

 

A practical use for this would be an easy way of recolouring NTSC ROMs to PAL-60.

 

  • Like 4
Link to comment
Share on other sites

  • 1 month later...

I'm finishing up development on Gorf Arcade with Atarivox / voice support and would like to debug using Festival but I'm on Windows.  :(   Has anyone successfully compiled Festival for Windows and configured it through Gopher?  I tried to also connect a real AtariVox to my PC for Stella but I can't seem to get it to work (it was working before but I had a system crash and needed to reinstall the OS) so I thought this would be a quicker/non-hardware way to test the speech commands, etc.  

 

Any help is appreciated!

Link to comment
Share on other sites

7 minutes ago, johnnywc said:

I'm finishing up development on Gorf Arcade with Atarivox / voice support and would like to debug using Festival but I'm on Windows.  :(   Has anyone successfully compiled Festival for Windows and configured it through Gopher?  I tried to also connect a real AtariVox to my PC for Stella but I can't seem to get it to work (it was working before but I had a system crash and needed to reinstall the OS) so I thought this would be a quicker/non-hardware way to test the speech commands, etc.  

 

Any help is appreciated!

 

I'm not aware of anyone successfully using Festival on windows. How far have you got with it? Do you have a copy of Festival for Windows or are you still at the compilation stage?

 

  • Like 1
Link to comment
Share on other sites

Just now, JetSetIlly said:

 

I'm not aware of anyone successfully using Festival on windows. How far have you got with it? Do you have a copy of Festival for Windows or are you still at the compilation stage?

 

I'm still at the 'lazy' stage ;) .  I just downloaded the source and before I spend too much time trying to compile (I guess I need cygwin too, a gcc compiler, etc.) I was hoping someone else had already done it and could provide a binary.  I'll spend some time on this later and see if I can get it compiled first and post my findings here. :) 

Link to comment
Share on other sites

Just now, johnnywc said:

I'm still at the 'lazy' stage ;) .  I just downloaded the source and before I spend too much time trying to compile (I guess I need cygwin too, a gcc compiler, etc.) I was hoping someone else had already done it and could provide a binary.  I'll spend some time on this later and see if I can get it compiled first and post my findings here. :) 

 

Heh. I'll be interested to hear how you get on with this. A small request: could you keep a log of the steps you take? If you do get it working it would be good to post them on the project wiki. Cheers!

 

 

  • Like 1
Link to comment
Share on other sites

  • 4 weeks later...

I've decided to bundle some small changes and bug fixes from the current development branch. There are some major improvements coming and I'm not sure when they'll be ready for general consumption, so an interim release seems like a good idea.

 

https://github.com/JetSetIlly/Gopher2600/releases/tag/v0.19.1

 

There's a possibility of performance improvement on some systems (there was on mine) courtesy of improved interaction between the FPS cap and monitor synchronization. I hadn't noticed the problem but a recent OS change on my system revealed the issue. If you've tried the emulator before and been left disappointed this might have been the reason.

 

Three bug fixes related to rewind: (1) Reset Missile To Player wasn't been "plumbed" correctly after a rewind. Not many games use this feature of the hardware but the bug caused havoc with Starpath's Frogger, for example. (2) Joysticks and gamepads are correctly put into a neutral state after a rewind event. (3) ARM statistics are more carefully collated during rewinding to avoid "spikes".

 

I've also added a rounded corners effect to the CRT options (disabled by default). This is a work in progress but I think it can look quite effective in some situations.

 

image.thumb.png.8b90da92974b69151b2854d062524955.png

 

The problem it has is that the corners aren't always clearly visible when the VCS is displaying black in the corners of the screen. There is a "black level" option in the preferences which allows you to alter the value of "video black". That helps but it really needs a bevel surrounding the screen for the effect to be complete.

 

Here's a WIP showing the potential.

 

image.thumb.png.94d3268562da795425ae7557cd27bdd6.png

 

 

 

  • Like 1
Link to comment
Share on other sites

I've implemented the bevel option and also a screen shine option. The shine effect is subtle but I think it works.

 

https://github.com/JetSetIlly/Gopher2600/releases/tag/v0.19.2

 

It's most noticeable with screen with a black background.

1023951888_Screenshotfrom2022-08-2821-31-23.thumb.png.280a29912ade2f063217bdf972842999.png

854248952_Screenshotfrom2022-08-2821-29-26.thumb.png.19ce8914f01acf9aee0f1630422f8f7f.png

 

 

But is also effective (but less noticeable) for more colourful backgrounds:

61692645_Screenshotfrom2022-08-2821-31-44.thumb.png.6fdd978ada3ea2514772e7564c2cf2e9.png

 

It makes the Activision style HMOVE border more noticeable in any case.

 

I'll add more control over both options in a future version.

 

edit:

 

Both options are disabled by default. To activate them press F10 to open the prefs window and click the "CRT" tab. Both options are in the bottom right.

 

image.thumb.png.15c46fa66e5370fa5fc84fc2b9f7f1b1.png

 

 

Edited by JetSetIlly
  • Like 3
Link to comment
Share on other sites

  • 1 month later...

Another small release. Full change log on release page

 

https://github.com/JetSetIlly/Gopher2600/releases/tag/v0.19.3

 

This implements the CommaVid cartridge mapper, as recently used by @SvOlli in his new 512 byte demo

 

I've not written a cartridge fingerprinter because I have a feeling anything I come up with will have many false positives. So, the mapper needs to be selected either on the command line or by changing the file extension to .cv

 

The Gar Nix Supercharger MP3 file doesn't work. I'm not sure why. The real Supercharger BIOS that the emulator relies on (which you must supply yourself https://github.com/JetSetIlly/Gopher2600-Docs/wiki/Supercharger) handles the decoding of the PCM stream so there must be an issue with converting the MP3 to PCM in this instance.

 

image.thumb.png.d710e278da94441e69dc0372676f9a90.png

 

Also fixed in this version is the handling of the PA7 bit and a bug that caused the address bus information in the 6507 Pinout window to be useless.

 

  • Like 5
Link to comment
Share on other sites

 

1 hour ago, JetSetIlly said:

This implements the CommaVid cartridge mapper, as recently used by @SvOlli in his new 512 byte demo

 

I've not written a cartridge fingerprinter because I have a feeling anything I come up with will have many false positives. So, the mapper needs to be selected either on the command line or by changing the file extension to .cv

Stella is using this CV detection:

https://github.com/stella-emu/stella/blob/master/src/emucore/CartDetector.cxx#L493

for 2K and 4K files.

 

 

  • Like 2
Link to comment
Share on other sites

  • 2 months later...
7 hours ago, r_chase said:

Hello. Sorry to bother you during this holiday season, but I was wondering if you could implement Joy2B+ support sometime. I could help test it using my USB NES-type gamepad and stuff. ❤️

 

I've not thought about Joy2B+ before but it should be easy enough to add. I'll take a closer look at it in the new year.

 

Thanks for the idea!

 

  • Thanks 1
Link to comment
Share on other sites

15 hours ago, JetSetIlly said:

 

I've not thought about Joy2B+ before but it should be easy enough to add. I'll take a closer look at it in the new year.

 

Thanks for the idea!

 

No problem. I would also add armhf and arm64 versions of the emulator itself for Raspberry Pi desktop users and stuff. Because why not, eh? ❤️

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