Commit graph

80 commits

Author SHA1 Message Date
JetSetIlly
49c223b90f simplified VSYNC and screen roll
changed how 'force' parameter for television.SetReqSpec() works

debugger TV Screen shows drawing pixel in all instances, even in areas
that are "covered" by no-signal area
2025-01-10 17:46:41 +00:00
JetSetIlly
77a5f24659 divided interference preference into RF noise/ghosting
the noise and ghosting level can be set seperately
2025-01-06 21:02:00 +00:00
JetSetIlly
7907239e15 tidied up CRT related fragment shaders
including the removal of 'ghosting' shader. this was useful for
exagerrating the zookeeper brick effect but it wasn't necessary (because
of how we scale the image). also, it was a confusing name with regards
to the ghosting effect inherent in the chroma interference. rather than
change the name I just removed it

the crt 'enabled' setting has been renamed to 'pixel perfect' (which is
an inverted value). I find this easier to think about
2024-12-27 18:38:44 +00:00
JetSetIlly
bbb7ed7833 changed default values for brightness, constrast, saturation
the defaults work well for all three colour methods

all tv specifications use the same gamma value

removed computed CRT bevel effect. removed CRT flicker effect

reverted vignette effect changes

brightness of interference effect regulated to match brightness when
interference effect is disabled

refined scanline/mask effect. now works on Y channel rather than the RGB
2024-12-23 22:25:21 +00:00
JetSetIlly
35c661b280 adjustment of YIQ/YUV signal done entirely in Go
removed tv_color fragment shader. this simplifies the render path
considerably. there's a little extra load on the CPU when retreiving
colour values from the cache and a little more when generating (which
only happens once on startup and when TV controls are changed) but it's
very minimal

SECAM colours generated rather than using a precomputed RGB palette

preferences for TV brightness/contrast/saturation/hue moved to colourgen
pacakge
2024-12-20 22:02:08 +00:00
JetSetIlly
c7431e4512 moved recent ROM preference handling to sdlimgui
this allows us to remove the global DisableSaving flag from the prefs
package. it also allows us to remove the preferences.go file from the
debugger package, simplifying things a little bit

the ReqROMSelector request has been removed from the gui package and
handling from the sdlimgui package. the decision on whether to open the
ROM selector is done entirely inside the sdlimgui package now. this is
good because there shouldn't be any need for the debugger package to
worry about that kind of thing
2024-12-20 14:05:32 +00:00
JetSetIlly
ecb8f15455 simplified prefs.Disk.Load() function
removed the saveOnFirstUse argument. this means the EnableSaving()
function added in the previous commit can be removed

the reason for adding the EnableSaving() was so that we could intialise
the ColourGen type without writing to a preferences file. this was a
problem for testing because it meant that the global ColourGen
initialisation created a preference file for each test, which is
definitely something we don't want

there is still the global DisableSaving flag that would ideally be
removed in the future. it's currently only needed by the
debugger_test.go test which initialises a Debugger instance and
indirectly causes the preferences file to be saved on exit
2024-12-20 14:05:32 +00:00
JetSetIlly
abddcd445e colour generation moved from specification to colourgen package
saving for an individual prefs.Disk() can be disabled/enabled. this was
added because colourgen is currently a global instance. this is fine
because all access to it is implicitely race protected. however, because
it's a global instance, testing packages will trigger it to save, which
we don't want (.gopher directories in package directories)

for the global instance of colourgen (in the specification package)
prefs saving is disabled by default
2024-12-20 14:05:32 +00:00
JetSetIlly
b476f902cf removed scanlines and shadowmask "fine" controls 2024-12-15 18:32:34 +00:00
JetSetIlly
d7adb54642 removed ticker option for GL swap interval
it never worked very well and was likely to cause screen tearing

added SetConstraint() function to the types in the prefs package. this
is used to make sure the old ticker value is replaced with the value
indicating 'sync with vertical retrace'
2024-12-15 18:32:28 +00:00
JetSetIlly
03d46e072e corrected VSYNC behaviour in some instances
the MsPacman VSYNC event (when the bouncing fruit appears) revealed the
error in using the VSYNC history to make a decision

removed the "immediate desynchronise" option
2024-12-14 09:09:58 +00:00
JetSetIlly
393904abcb simplification of the memory sub-system
- preparation for adding 7800 emulation

cpu (6507) package uncoupled from upstream dependencies

- cpu no longer logs execution of KIL instruction
- randomisation of registers on startup can be handled by the called of
  the cpu's Reset() function
- address errors are filtered by an optional IsAddressError() function
  in the Memory interface implementation
- Error field removed from execution.Result type

all references to interface{} replaced with any
2024-11-23 14:56:37 +00:00
JetSetIlly
f66d020907 added lint target to Makefile
checks that linters exist before proceeding. project URL for each linter
in the Makefile comments

only go-errorlint and unconvert used at the moment

fixed all lint errors for the added linters
2024-11-23 14:56:36 +00:00
JetSetIlly
fab6eb1507 renamed television halting conditions 2024-07-06 22:09:39 +01:00
JetSetIlly
dd1706530b added VSYNC preferences for new VSYNC system
removed now unused VSYNC preferences used by the old system
2024-06-11 13:58:14 +01:00
JetSetIlly
fa2866c45d sdlimgui preferences correctly initialised on first use
this fix is very important because without it, the frame queue is set to
zero. this means that the display is likely to be very choppy creating
a bad impression of the emulator for first time users
2024-05-05 17:00:38 +01:00
JetSetIlly
c827d70c5b gui/crt package is now gui/display
colour preferences are now independent of CRT preferences
2024-05-05 11:35:51 +01:00
JetSetIlly
d32262adff simplified how gui implements and handles notifications
debugger no longer sends play, pause notifications to the gui. the gui
polls for that information as required

govern package now has SubState type to complement the State type.
StateIntegrity() function enforces combinations of State and SubState,
called from debugger.setState() function

playmode notifications reworked and contained in a single playmode_overlay.go
file. this includes the FPS and screen detail

preference value sdlimgui.playmode.fpsOverlay replaced with
sdlimgui.playmode.fpsDetail. still toggled with F7 key

coproc icon moved to top-left corner of playmode overlay and only
visible when FPS detail is showing

when FPS detail is showing multiple (small) icons care shown. when it is
not showing, a single (large) icon is shown according to the priority of
the icon. eg. pause indicator has higher priority than the mute
indicator
2024-04-12 18:20:29 +01:00
JetSetIlly
5c7e122d3e screenroll effect moved into crt effects shader
removed VSYNC synchronise on power option

these changes simplify the screen.go file and fixes the relationship
between the debugger TV screen and screen roll that was sometimes seen
(depending on when the emulation was switched to the debugger)
2024-01-28 18:34:52 +00:00
JetSetIlly
24d4f2531e DPI aware font scaling
font sizing for non-freetype font rendering
2024-01-22 08:10:16 +00:00
JetSetIlly
fd53a04918 crt effect improvements
improved interference noise. using perlin noise rather than gold noise

shine/vignettes is smoothed out by small amout of perlin noise if
interference is not active
2023-11-26 14:47:41 +00:00
JetSetIlly
e462abcfa8 moved coprocessor/developer illegalAccesses into dedicated faults package
renamed references to illegal accesses to faults. the new name is
simpler and more flexible

faults locking was already independent of source lock

single MemoryFault() function in coproc developer interface

simplified faults window
2023-07-28 06:03:58 +01:00
JetSetIlly
732c433cd2 tidied and simplified test package 2023-07-06 13:49:18 +01:00
JetSetIlly
cb8d27a98d removed fast sync option 2023-03-05 17:24:11 +00:00
JetSetIlly
3aa5885ebe removed curated pacakge. replaced with wrapped errors
curated package predated the standard errors package introduced in
go1.13

the standard package does a better job of what curated attempted to do

the change of package also gave me a opportunity to clean up the error
messages a little bit
2023-02-13 21:58:39 +00:00
JetSetIlly
178f05f17b updated go minimum version to 1.20
applied gofmt to source tree to update the documentation comments
2023-02-12 13:09:07 +00:00
JetSetIlly
aa3670aeae ARM Flash latency moved from prefs to architecture.Map
the latency of "Flash" in the UnoCart is different to the Flash in the
Harmony

future versions will rename the internal use of Flash and SRAM to slow
and fast memory, or something like that. The labels can then be applied
depending on the cartridge type
2022-11-06 21:05:59 +00:00
JetSetIlly
43dcc085f0 screen roll now connected to VSYNC rather than change of Hz
clearer policy for setting of refresh rate

FPS display in playmode displays icon to indicate no VSYNC. removed
"atari safe" message (nice idea but requires work)
2022-08-03 22:51:21 +01:00
JetSetIlly
c20b20d5f7 clarified some concepts in the prefs package. "fixed" the Generic type 2022-05-16 13:05:26 +01:00
JetSetIlly
1a39e8674c audio mute options will be saved automatically on program exit 2022-05-13 15:32:00 +01:00
JetSetIlly
deb0887165 atarivox implementation will not produce sound if audio is muted
audioEnabled preference values renamed to audioMute

this is to facilitate the differentiation of muting and disabling
AtariVox output. muting of AtariVox is a subset of audio mute.
2022-05-13 11:30:55 +01:00
JetSetIlly
c8772f5b55 window state saved to disk. reloaded in next session 2022-04-29 13:50:33 +01:00
JetSetIlly
08cdd445b1 updated PlusROM network header 2022-04-06 14:55:02 +01:00
JetSetIlly
74be5fce2b ARM clock speed tunable in preferences window
ARM flash latency also added but not exposed in preferences window
2022-03-13 19:13:41 +00:00
JetSetIlly
eade7ea7be readded patch, multiload and wav options to the commandline
removed experimental hiscore client (never used)
2021-12-11 09:56:39 +00:00
JetSetIlly
dd706b392b preferences for the comparison emulation can be added on the command line
added commandline stack functions to the prefs package
2021-12-05 20:17:43 +00:00
JetSetIlly
89191d9a5a clarified some preferences concepts
set defaults for revisions, rewind and ARM tabs of the prefs window (in
addition to the CRT tab). set defaults button labelled appropriately

fixes some race conditions caused by pre/post hooks on prefs values -
prefs values are generally goroutine safe, except when pre/post hook is
defined
2021-12-05 20:17:43 +00:00
JetSetIlly
c01da89970 increased range in GUI for scanline sync speed
updated prefs label to clarify the intent of the value
2021-11-20 15:21:24 +00:00
JetSetIlly
af940e9ecd better interaction of window geometry preference saving with fullscreen setting
*.windowSize and *.windowPos preference values replaced with single *.windowGeometry value

prefs package type now have a pre-hook (called before new value is set).
existing hook/callback clarified to be a post-hook (called after new
value is set).

prefs generic type now handles prefs.GenericGetValueUndefined to
indicate that the value cannot be ascertained at this time (the prefs
package should use the most recent previous value instead)
2021-11-05 17:58:35 +00:00
JetSetIlly
c7df494261 added scanline / shadow mask intensity. removed "brightness" setting.
reduced intensity of the interference effect
2021-10-23 15:57:10 +01:00
JetSetIlly
e5bd938b41 renamed paths package to resources package
ResourcePath() is now called JoinPath()

UniqueFilename() moved to a new package named unique and renamed to
Filename()
2021-10-03 13:32:08 +01:00
JetSetIlly
9a5fb8fd1f updated README and lint fixes 2021-09-16 12:34:05 +01:00
JetSetIlly
3749dd1fbb fixed debugger audio-enabled preference affecting playmode audio
callback functions called on prefs.Set() even if value hasn't changed
2021-09-01 16:03:50 +01:00
JetSetIlly
590bdbc1bc added "notification" preferences
altered slightly how sdlimgui preferences are handled. debugger and
playmode now load and have access to all preferences. the only
difference remains window position and size.
2021-08-23 21:02:23 +01:00
JetSetIlly
f008c13156 types in prefs package use atomics rather then mutexes
pref types are likely to be called in critical sections. to make the
prefs package easy to use, values in the types were protected by
mutexes, this is relatively expensive however. with the exception of the
generic type, critical sections are now protected with atomics.

small performance improvement
2021-08-14 09:57:36 +01:00
JetSetIlly
ae6e8acf79 refined how RESPx works under HMOVE conditions
renamed some preferences for clarity. amended description tests and
preferences window to match
2021-07-25 18:44:12 +01:00
JetSetIlly
ef0d25e45e immedate ARM mode does no cycle counting
small performance improvement when in immediate mode. modified last
execution window to say if execution was in immediate mode or not (to
explain the absence of cycle count)

removed stale ARM preferences

updated screenshots and README
2021-07-11 12:39:08 +01:00
JetSetIlly
40e10de6a3 Go: replaced iotuil functions with io equivalents 2021-06-25 10:10:56 +01:00
JetSetIlly
00801443c1 ARM cycle stretching now differntiates between MAM mode 1 and 2
ARM MAM mode is set according to cartridge mapper driver

Preferences changed to specify this or whether to override it with a
particular value.

Removed the other MAM control preferences

Removed Flash/SRAM information from the last execution window
2021-06-18 20:05:13 +01:00
JetSetIlly
cee40a6fad replace all path function calls with filepath function calls
again, not one that is noticeable on Unix but can upset Windows because
of the different directory separator.
2021-06-05 14:38:14 +01:00