Releases: JetSetIlly/Gopher2600
v0.40.0-preview_3
Changes since v0.40.0_preview_2
This release is another "preview" of v0.40.0 which will feature a new colour model
. Once again, this work is not finished and so the "preview" label is used to emphasise that the results are not optimal or final. The previous preview can been seen here.
Colour Model
In this preview I have changed the output value of "black" as produced by NTSC Colour-Lum value $00. For PAL and SECAM there are more values that produce "black" and this applies to them too. The purpose of this change is to make it the same value of the "black" produced by VBLANK.
Without going into too much detail, the purpose of this change is to ensure that both types of black (the one produced by VBLANK and the one produced by Colour-Lum $00) are affected by the brightness/contrast controls equally, which is what can be observed on real hardware.
There are very few games where the two blacks can be seen together but a good example is Boom by Chris Walton. The screen with the bouncing AtariAge logo uses VBLANK as a convenient way of creating black.
In the image above the darker black is produced by VBLANK and the lighter black by Colour-Lum $00.
The difference can be reduced by lowering the brightness but that wouldn't be a correct solution.The correct solution is for the two blacks to be the same value.
Other Changes
- Corrected detected of "PAL60" in filename
- This controls the specification of the emulated television
- DPC (Pitfall II) fingerprinting
- The detection for DPC is based purely on size of the ROM file
- Problem identified in #36
- DPC Random Number Generator
- Corrected random number algorithm to more closely match DPC patent
- Pumped on every cartridge access and not just on 'non-volatile' access
- ARM Timers
- ARM timers more efficiently updated
- Small improvement in performance
- ELF Performance
- Small efficiency improvements
v0.40.0-preview_2
Changes since v0.40.0_preview_1
This is a second preview release of v0.40.0. I'm still not satisfied with what I am now referring to as the new colour model
so I'm still holding off making a non-preview release. And I still want to emphasise that the colours are not 'final' or fully understood. The previous preview can been seen here.
Colour Models
The changes to the new colour model
are as follows
- NTSC colour burst
- Previously a phase adjustment would cause the burst to change very slightly, which it shouldn't. The burst is now fixed in all instances.
- IQ and UV values are no longer scaled by Y
- Contrast adjustment now uses a grey level of 7.5%
colour-lum
of 0 is set to 7.5% grey
In addition to the new colour model
I've added a legacy colour model
, which is enabled by default.
The legacy
model is actually just the standard Stella palette. I wanted to avoid this but I think it's currently unavoidable. It's still unclear to me how these colours were arrived at. I can find no combination of the new colour model
that creates the same result.
The name legacy
is intended to convey that it will one day be removed.
Blue Ambient Light
I've also added an option that causes the CRT bevel to be tinted by a blue light. I find this is good way of emulating a room with low light.
The blue light causes the TV image to stand out more and is good for night-time play.
In the image below you will notice that the rim around the screen is not tinted by blue because it is illuminated by the screen, which has a different predominant colour.
Other Changes
- ARM
- Small performance improvement during cycle accumulation
- Separation of integer and fractional parts of a cycle count now uses SIMD instructions
- Patch Files
- Missing patch file is no longer a fatal error
- Patch file given on the command line is not assumed to be in the
patches
directory of the configuration directory.
- The path given on the command line is now an absolute path
- SDL Audio
- Small performance improvement caused by calling sdl.AudioQueue() less frequently
- Queue management now slows the sample rate when queue is running low
- This should result in fewer audio buffer underruns
v0.40.0-preview_1
Changes since v0.35.3
This release is a bit different than normal. I've been sitting on some major changes to the code and I haven't been wanting to release them until it was done. However, I think the project will benefit from people seeing it and having the opportunity to give feedback but with the understanding that some of these changes are not final.
Colour
The major change in this release relates to how colour is created. Surprisingly, colour on the 2600 is a controversial topic. For this reason the default range of colours in this version of Gopher2600 is by no means the final article. The default range is something that is likely to change in future versions.
If you want to change the colours then you can do so by pressing F10
and selecting the Television
tab
Very briefly: the top four sliders represent what you might find on your television's front panel, while the Phase
control underneath represents the adjustment potentiometer hidden in the console itself. There's no other way of controlling the colour (and there very likely won't be) but you should be able to control and create the palette you expect using just those five controls.
Rendering, TV Bevel and Audio
Other changes in this release include a much improved rendering pipeline. This should result in less glitching for ROMs that use "flicker kernels" and in particular, when using a compositing window manager on X11.
There is now also a real TV "bevel" as opposed to the goofy option that existed before. It's enabled by default but you can disable it from the CRT
tab of the preferences window (press F10
for the preferences window).
The CRT options are simplified for this release and the RF Noise / Ghosting
options replacing some of the less successful options in previous releases.
For now there is only one bevel option. I think there will be an option to add your own in the future but for now, the one we have includes screen reflections and a very basic method of light reflection (on the TV surround from the screen).
Audio is also improved and a simplified method for regulating the length of the audio buffer means there should be less chance of audio dropout (or lag)
Configuration Files
One of the planned changes for the project is an improved handling of user preferences. I've not implemented this yet, so in the meantime I recommend that you delete your existing configuration files and start over. It should be okay if you don't, but I can't guarantee that the settings you have now will look okay in conjunction with the above changes.
Information about configuration files and where to find them is in the project wiki
Blog
I've also started a blog which you may be interested in following. https://jetsetilly.github.io/Gopher2600-Blog/ I plan to update it with development discussion from time to time. My next article will be on colour generation: how I've implemented it and why it's such a big issue.
Other Changes
In addition to the major changes described above, this release also has some smaller maintenance changes.
- Bug Fixes
- TIA Corrections
- the moment when NUSIZx is handled during the TIA sub-cycle
- reset condition for ball
- Keypad
- Corrected behaviour of the '3' key for the right keypad peripheral
- Debugger
- Added CHANGED option to WATCH command
- Improved feedback messaging for the PERIPHERAL command
v0.35.3
Changes since v0.35.2
- Television
- Corrected how Brightness / Contrast controls work
- Improved VSYNC
- TV tolerant of brief desynchronisations
- Debugger
- Stepping back works correctly in conjunction with recent user input
- Due to how the rewind system worked, any user input since the start of the last frame and the current position of the emulation would be lost on step back. This is now not the case
- PlusROM
- PlusROM host/path information was read incorrectly
- Caused problems with segmented banking schemes, like 3e+ [issue #35]
Television Brightness and Contrast controls work a bit differently as of the release. You may need to readjust those settings (press F10 button for preferences window)
v0.35.2
Changes since v0.35.1
- Added cartridge mapper
- FA2
- eg. Star Castle
- non-volatile RAM for this cartridge type stored in the
nv_ram
of the configuration direcotry- BF
- eg. The Realm of Riesig
- Supercharger
- Running a Supercharger game loaded from an audio file resulted in performance drop, even when the tape had stopped loading
- Performance is now equal as when loading from a fastload binary file
- Disassembly
- Disassembly is now completed in the background, leading to quicker loadtimes, particularly for very large cartridges
- Television / CRT Effects
- Blur shader is now applied more evenly
- this is most noticeable with high bloom values but produces better results generally
- Disabling the ghosting effect would cause the image to flip
- More efficient clearing of GL frame buffers
- small but significant performance improvement
- Regression testing
- Playback scripts can now be re-recorded automatically
- REDUX command now works with all regression test types
New entry on the current status page
v0.35.1
Changes since v0.35.0
- Bug Fixes
- Some PlusROMs were not detected properly
- Only the first 1024 bytes were searched for the fingerprint, which is insufficient for some ROMs
- There is (always has been) a verification step to make sure the URL at the NMI location is correct so false positives should not be a problem
v0.35.0
Changes since v0.34.0
- Bug Fixes
- Rewinding of ELF binaries caused visual artefacts on screen
- Changes to screen rendering prevented the VideoChess bot from starting
- Bug introduced in v0.31.0
- Added ELF to list of valid ROM extensions
- A file with the .elf extension would not be shown by the ROM selector
- Mouse wheel events could crash the emulator
- This affected MacOS builds on machines where mouse-wheel style scrolling is done with a touch-pad
- Replay button in tracker window could crash the emulator
- Changes
- TIA audio sampled every colour clock
- This fixes problems with ROMs where the channel volume is update more than twice per scanline
- Added option to enable warning for "undefined symbols" when loading ELF ROMs
- It is possible to compile an ELF binary with undefined symbols. Rather than reject the file when it is loaded, I have chosen to allow the ROM to execute and to continue until the symbol is referenced (which may never happen)
- The addition of the warning is in addition to this behaviour and gives the developer the option of being notified of symbol errors sooner
- Added CARTRIDGE SETBANK command
- It wasn't possible previously to set the current bank of a cartridge. I had originally chosen to avoid the problem because of the high variety of ways a mapper might implement banking (if at all)
- The options to the SETBANK command vary depending on the specific mapper but generally, a mapper will expect a numeric value
Segmented mappers can take multiple numeric values. Separate values with a colon
In some instances, segments can be mapped to cartridge RAM. add an 'R' after the segment number to indicate the use of RAM. For example, the 3e mapper allows very flexible mapping of RAM
CARTRIDGE SETBANK 1R:2
Some segmented mappers only allow a predefined 'pattern' of segments. In these cases the numeric value to the SETBANK command will be a pattern number. The two mappers affected by this are Supercharger and Wickstead Design
- Other Changes
- Added ELF support for REL32 and PREL31 relocation
- Improved DWARF support for typedefs
- Better decision making over whether variables are in global scope
- Prevent possibility of infinite recursion in DWARF builder
Current Status: https://github.com/JetSetIlly/Gopher2600-Docs/wiki/Current-Status
v0.34.0
Changes from v0.33.0
- Changes / Bug Fixes
- Specifying a mapper will not add superchip unless asked
- ARM would sometimes loop endlessly on startup
- caused by ROMs causing execution errors and not being caught
- DPC+ and CDJF always emulate the end-of-custom-program JMP even when immediat mode is enabled
- 6507 more careful with system symbols
- system symbols no longer appear as operands for immediate instructions
- ARM yields address of most recent instruction rather than the current PC
- this isn't a problem for 16bit instructions
- but for 32bit instructions it resulted in confusing feedback in the source window- Better handling of DWARF data from alternative ELF files
Current Status: https://github.com/JetSetIlly/Gopher2600-Docs/wiki/Current-Status
v0.33.0
Changes from v0.32.1
- improvements
- ELF uses less memory
- High memory usage is a direct consequence of the rewind system
- ELF memory is only recorded if it the memory block is volatile
- Recorded memory is compressed (using a very simple RLE algorithm)
- ARMv7_M architecture
- Marginal performance improvement in cycle counting
- Television can now cause emulation to break into debugger
- eg. if VSYNC is absent or too short, etc.
- Toggled via preferences window (television tab)
- FPS overlay in playmode shows VBLANK/VSYNC information
- Timeline window in debugger shows VSYNC trace
- Debugger shows break condition in toolbar
- Information shown is currently very rough
- Holding down the STEP buttons in the control window is now faster
- changes / bug fixes
- DPC+ more careful about resetting fraction fetcher counter when setting the fraction fetcher low byte
- Whether the reset happens depends on the version of the driver being emulated
- Supercharger
- Rewind fix in 0.32.0 for fastload implementation was incomplete
- Coprocessor Source Window
- Fixed parsing of comment lines
- Emulator Development
- Fixed profile targets in Makefile
- Changes made in b48d487 limited the functionality of pprof
v0.32.1
Changes from v0.32.0
- Bug Fix (Windows): ROM selector could not step out of the installation folder
I've also noted that the ROM Selector does not currently support volume (drive letter) selection on Windows. I'll add a solution to that in a future release, after some more research/experimentation.