Commit graph

117 commits

Author SHA1 Message Date
JetSetIlly
4d6c37bb52 an unsynced frame will no longer cause the screen to resize 2021-06-18 20:05:13 +01:00
JetSetIlly
35357f93a3 lint fixes 2021-06-16 14:29:35 +01:00
JetSetIlly
1260835b64 reverted to the old resizing method
the simpler method was fine except that it didn't work well with the
strict scaling policy that we introduced in d45e609534.

it was particularly noticeable when moving to full screen when a fully
"extended" NTSC image would not look right unless the ROM really did use
the entirity of the screen. for example Spike's Peak looks okay but
otherwise, there would be enormous black bars.
2021-06-16 14:29:35 +01:00
JetSetIlly
96ede7b67b stepping back across an unsynced frame boundary could panic
added bounds check
2021-06-15 19:03:10 +01:00
JetSetIlly
2333fac99b fps indicator now includes other TV information 2021-06-15 12:04:27 +01:00
JetSetIlly
2af74b16e5 simplified TV resizing
screen size is either the recommended Atari size or the "extended" size
for the current TV spec
2021-06-15 11:40:55 +01:00
JetSetIlly
b0e973a0fd first attempt at screen roll 2021-06-15 06:55:13 +01:00
JetSetIlly
33ad15909e fixed false positive detection of PAL signal
synced frames count is reset on encounter of non-synced frame
2021-06-14 14:55:40 +01:00
JetSetIlly
c6b53916ff lint auto fixes 2021-05-18 18:28:50 +01:00
JetSetIlly
b4619a36a0 lastMaxIdx in television type initialised correctly
new initialisation value means GotoFrameCoords() when pushed from the
debugging screen will not cause an array out of bounds error between
television reset and the first NewFrame()
2021-05-14 21:28:43 +01:00
JetSetIlly
0d88a7035f added PAL60 TV specification
cartridge filename will set TV Spec if mathing string is present

added HASH option to CARTRIDGE command
2021-05-02 10:42:50 +01:00
JetSetIlly
de05480f65 added SetPixels() to PixelRenderer. significant performance boost
this is in addition to SetPixel()
2021-05-01 19:53:20 +01:00
JetSetIlly
ba38357bc0 resizer adds an additional scanline on resize
Man Goes Down screen size is wrong without this

this is on top of the existing additional scanline for Hack Em Pacman.
meaning that Man Goes Down requires an additonal two scanlines.
2021-05-01 19:53:19 +01:00
JetSetIlly
6621cfcd19 fixed TIA plumbing on rewind
this didn't effect the rewinding in practice but none-the-less it was
wrong and had side-effects when using the rewind mechanism for
deep-poking.
2021-04-14 20:25:27 +01:00
JetSetIlly
36e7c3bd61 first pass at deep-poking
implemented deep-poking of playfield values. there may be pathological
instances where this does not work. not all addressing modes have been
added to the deep-poke function.

to be clear, non-playfield graphic elements (player, missile, ball) have
not had this feature added yet.

will probably also require some way of feeding back information, making
it clear what has actually happened or actually changed. changing of an
immediate value should probably trigger a redisassembly.
2021-03-23 11:27:28 +00:00
JetSetIlly
705da4252e STEP command now supports stepping backwards
limitation for the time being on stepping back by color clock

removed ability to step by the more obscure trap targets (registers
etc.)
2021-03-05 13:09:37 +00:00
JetSetIlly
2a5dbffb67 tweaked front/back porch correction in TV implementation
this "fixes" the smooth playfield scroll demo

tweaked how VSYNC signal is counted
2021-03-03 12:00:59 +00:00
JetSetIlly
d6463e0dae lint errors 2021-02-24 06:59:30 +00:00
JetSetIlly
8789a6772c streamlined reflection system
simply interfaces between television and reflection packages
2021-02-24 06:59:30 +00:00
JetSetIlly
16ab693277 corrected supercharger WAV loading of unsigned data
soundfile (WAV or MP3) will stop when cartridge stops looking for tape
data and will rewind when it reaches the end of the file.

tape position slider in debugger
2021-02-15 19:08:38 +00:00
JetSetIlly
9277b88936 coprocessor layer is named based on coprocessor ID
removed optimistion reflection overlay

it didn't show all optimisations that are now done in the TIA emulation
and it was difficult to present the information meaningfully. plus, it's
information about the emulation itself and not about the emulated machine.

cleaned up lint errors
2021-01-31 14:52:55 +00:00
JetSetIlly
fc70fd5505 television frame resizer will now ignore false positives
this means that frames must be consistent for N frames before the resize
is committed to the PixelRenderers.

sdlimgui screen is now correct height to show limits of screen.
2021-01-22 19:27:10 +00:00
JetSetIlly
8dd5b7106e goto button in coprocessor last execution window
rewinds emulation to just after the point the coprocessor program was
last executed
2021-01-19 17:34:43 +00:00
JetSetIlly
91c88d555b renamed all instances of HorizPos to Clock
it's less clumsy when used as a label and it's accurate with regards to
how the VCS is documented. not sure why I thought HorizPos was a better
label. maybe it helped my thinking in the earlier phases of development.
2021-01-19 17:34:43 +00:00
JetSetIlly
ce7d724a02 fixed lint errors 2021-01-19 10:03:27 +00:00
JetSetIlly
e3bb2b023e television resizing less aggressive
resizer counts N frames (currently 5) before committing to a resize.
this gives the ROM change to expand the screen slowly without any visual
side-effect. the supercharger BIOS expands noticeably without this
mechanism.

fixed off by one error for Ladybug and Hack'Em Pacman (and probably
others)

missing doc files for crt and crt/shaders packages
2021-01-18 23:37:57 +00:00
JetSetIlly
510c155989 clarified (and corrected) reset procedures 2021-01-14 12:37:38 +00:00
JetSetIlly
49a8de6c31 removed lint errors
menu entries for windows can have diferent labels to the window title.
(this was already a feature but it is now more clear/onvenient. change
prompted by lint error).
2021-01-11 17:40:52 +00:00
JetSetIlly
d9b535f228 audio signal pushed when pending pixels are pushed
doesn't seem to be more efficient than before but it makes more sense to
do it like this.
2021-01-09 18:26:46 +00:00
JetSetIlly
8f6eec130a corrected TV behaviour when VSYNC is not encountered
fixes Lili NTSC rom (and improves Andrew Davies' chess ROM)

fps limiter more reliable. more accurate at low frame rates.
2021-01-08 18:48:23 +00:00
JetSetIlly
b16b59291a television pauses rendering on rewind
replacement for GuiStateRewinding request removed in previous commit

particularly effective when rewind snapshot frequency is greater than
one frame

colorterm should now work correctly with RawEvents and RawEventImm (I
don't really use colorterm anymore but this corrects an oversight)
2021-01-03 11:39:27 +00:00
JetSetIlly
1bfe27e3ed speeded up lazy breakpoint checks for disasm window
rewind system feels smoother and quicker. fixed bug in TV plumbing
introduced by recent commit

removed StateRewinding / StateGotoCoords requests. it was slowing things
down and it seems other recent changes have removed the need for them in
the first place (purely visual reasons).
2021-01-03 08:57:50 +00:00
JetSetIlly
76b36a4d80 cartridge rewinding is now more flexible
cart ram/static areas show changes across time

supercharger TV reset after tape load no longer resets frame number.
this affected the rewind system and how it stores historical data.

improved responsiveness of service loop polling
2020-12-31 17:19:33 +00:00
JetSetIlly
418de49ba1 ARM timer ticks forward correctly
VCSReturnChannel so the television can inform the VCS about a change in
television spec. The VCS uses this information to forward clock
information to the cartridge.Step function

DPC and DPC+ music generators now use correct VCS clock value in all
instances
2020-12-30 20:45:07 +00:00
JetSetIlly
919e510180 small reworking of FPS slider and frame limiter
deadlock prevention for new service loop - caused by serviceWake channel
being serviced on both ends in the same goroutine. fixed with
select/default construct

fixed bug which caused screen-cursor being shown when emulation is
running
2020-12-30 20:45:07 +00:00
JetSetIlly
d2ee20ed8c better CPU usage in debug mode when nothing (or very little) is happening
FPS measured even when fpscap is not active. measurement will be
done more reliably.

FPS indicator will always remain on top of playscreen

spelling mistake in Makefile .PHONY list
2020-12-30 20:45:07 +00:00
JetSetIlly
133e9e34ab toggle fps indicator in playmode (F12)
toggle fullscreen in playmode (F11)
2020-11-27 22:02:55 +00:00
JetSetIlly
890eec5c72 altered how time.Ticker is reset in television limiter
correct gui state restored after rewind
2020-11-27 21:11:01 +00:00
JetSetIlly
cbc1b8b7f5 fixed television for ROMs that VSYNC late
NewFrame() non-synced is now only called if VBLANK is off

this fixes: flappy, the chase screen on Hack'Em Pacman, ProTennis; while
not breaking ROMs that deliberately do not send VSYNC like (Andrew
Davies' Chess ROMs)
2020-11-25 22:35:09 +00:00
JetSetIlly
7e18cbbfb8 improved video performance
screen will buffer a small number of frames it can use to smooth out
variations in the speed at which frames come from the emulation

results in better synchronisation for flicker kernels
2020-11-24 23:29:51 +00:00
JetSetIlly
cd16b81b8a another attempt at a universal TV resizer
introduced the idea of safe-areas more forgiving than the Atari defined
safe-areas. may need tweaking
2020-11-22 22:59:43 +00:00
JetSetIlly
968ae27079 setPendingPixels() correctly loops over renderers before pixels
limits number of times critical section is entered

frame limit set correctly on change of tv specifcation
2020-11-22 12:49:14 +00:00
JetSetIlly
2fd42f52fa television passed by reference in all instances
suports changes made in previous commit
2020-11-20 12:18:43 +00:00
JetSetIlly
8b5a5a5e41 replaced signal history array with a made slice of the same length
fixes executable bloat problem as described here:
    https://github.com/golang/go/issues/42729
2020-11-19 21:28:39 +00:00
JetSetIlly
de7cee9aa6 television.String() takes pointer to television instance
copying by value was noticeably slow in regress with TV state
2020-11-18 23:01:06 +00:00
JetSetIlly
d438244fbe PixelRenderer reset when TV is reset
rewind frequency limit improved
2020-11-11 07:00:15 +00:00
JetSetIlly
9f6ffdf5d0 television saved state did not include all resizing information
- this caused issues during rewinding

simplified signal history in television storage

simplified pixelrenderer.NewFrame()

simplified pixel management for GUI screen implementation

frame limiter turned off for rewind events
2020-11-10 22:04:03 +00:00
JetSetIlly
7e4539ba90 first attempt at rewinding to screen coords using mouse on debug screen 2020-11-08 20:44:00 +00:00
JetSetIlly
a412275d41 improved rewind performance and accuracy
binary searching of rewind entries
2020-11-08 19:48:44 +00:00
JetSetIlly
7e74bcac25 reflection works with rewind system
rather than taking a snapshot of the reflection system, rewind replays
the emulation from the previous frame. this is a considerable saving
in memory. it also allows us to remove the signal history from the
television state information saved by the rewind system. this is also a
significant memory saving.

more efficient memory use possible I think by saving every other frame
or every third frame and allowing the emulation to run to fill in the
interim frames. this would require folding the input recording system
into the rewind system.

TIMELINE <n> function doesn't work as required just yet

screen refresh could be better on rewind plumbing

occasional deadlock when moving rewind slider
2020-11-01 21:21:32 +00:00