fixed corner case caused by RSYNC being triggered on the first scanline
fixed some presentational issues (Nan and Inf floats) caused by running
an ejected ROM
possible to switch from playmode to debugger when ROM selector is active
in all situations.
rewind.String() now produces correct summary in all instances
rewind reset on frequency change (in addition to the existing rule about
number of states). timeline no longer reset on this type of rewind
reset.
adjust coordinates function uses the correct zero value for color
clocks. the error could be seen on STEP BACK FRAME when the execution
would stop near clock 0 rathre than clock -68
execution states are recorded and appended to the history every frame
regardless of the snapshot frequency schedule. they continue to be
trimmed in the usual way. on emulation halt meanwhile, the current
coordinates are recorded which is more flexible and allows for video
cycle granularity.
new counter package added (sub-package of reflection)
this new counting method is fast enough to be run while in playmode,
which means that historical timeline information is immediately
available in the debugger
switch between debugger and playmode with F6 or backtick key
pakage debugger remains for now but it will be renamed to emulator or
something like that. playmode package removed.
commandline options for both debugger and playmode are the same
currently, with some playmode features being lost (temporarily)
(zero being whatever SDL detects as the silence value for the sound
card - usually zero).
the error was noticeable when a ROM used a non-zero silence value and
simply an unchanging value instead (which the speaker treats as silence
- because the cone never moves).
queuing audio signals from the television signal array used all signals
from the beginning of the array but because of the way the television
writes to the array the first couple of entries have probably never been
written to. in other words, a audio value of zero was sneaking it's way
into the audio queue, creating a buzz.
affected moviecart ROMS
update userinput.EventKeyboard to support Repeat keypresses
in playmode rewind forward/backward occurs on shift-left or shit-right
cursor keys (with repeat)
removed the pause feature (sdlimgui) that caused two-frame kernels to
appear "complete" when paused.
a) it wasn't consistent
b) it can cause single-frame kernels to shimmer
c) it doesn't really work with the rewind system
it'll be addressed in a future commit
sdlaudio added to the television as a realtime audio mixer. television
implementation altered to handle realtime audio.
audio is better than what it was but still room for improvement I think.
Instruction boundaries can be inferred by the debugging input loop,
which is the only place it is requred. reworked GetAdjustedCoords() in
the televsion package (now called AdjCoords()) to cope with this.
ReqState() is totally replaced by GetCoords()
makes it more convenient/clearer when working with all three coordinate
values (frame, scanline and clock)
changed all packages to GetCoords() where appropriate
caused by changes introduced in dda5ed5d5c
taking the clock/scanline values from LazyTV was a good idea but the
time it takes for the lazy system to update is just long enough for the
old value to be visible.
an additional argument to PixelRender.SetPixels() is required but it
can't be helped.
all signals are now sent with SetPixels(). this simplifies PixelRenderer
implementations. removed the current flag, that information can be
obtained with television.GetState()
AbsoluteMaxScanlines increased to 313. this is to accomodate ROMS that
use the absolute limit of the PAL specification and turn off VSYNC such
that it tips over into the extra line.
TIA now puts both audio channels in the SignalAttributes separately
it is up to television.AudioMixer implementions to mix the two
channels as required
sometimes a television frame will be "shorter" than previous frames.
previously the television only sent the signals for the shorter frame,
this could play havoc with PixelRenderers under certain circumstances;
particularly visible under rewind conditions.
this was noticed when rewinding a moviecart over frames between the
attract screen and the beginning of the movie.
to fix this. the television now sends null signals (video black) for
every required signal in the current frame (whatever size that might be)
there doesn't seem to be any performance penalty
this may also be connected to a rewind bug that causes the screen redraw
to be incorrect. this fix is a boundary check similar to another
boundary check that would disguise the screen redraw bug
This allows a single call to SetAudio() and for the loop to happen
inside that function - as opposed to looping over the slice and calling
SetAudio() multiple times
the measurement was/is limited by a one second clock pulse but we were
checking to see if the pulse had ticked every TV clock. we now only
check the pulse every frame.
this simplifies the sdlimgui/screen type in addition to the NewFrame()
and Resize() functions in the PixelRenderer interface
will allow better overview and summarising of television performance
playscreen F7 window shows "total scanlines" rather than "visible
scanlines"
TV frame will never resize if frame is unsynced
Play-screen FPS counter shows target frame frequency
sdlimgui playscreen: screen will not roll on first couple of non-synced
frames. the screen is tolerant of the odd rogue frame.
gui vsync options renamed to monitor sync to clarify distinction wth
emulated television VSYNC
if VBLANK is used by the ROM then non-black pixels are used to size the
screen, otherwise we take the VBLANK as intended (while still obeying
the safe top/bottom values