Thomas Harte
51da21b844
Formally introduces keyboard-as-joystick for the Mac, and fixes discovered joystick issues.
...
Specifically:
* digital to analogue conversion not returning to centre;
* Apple II axes being the wrong way around; and
* Apple II buttons using improper selection logic.
2018-06-13 19:22:34 -04:00
Thomas Harte
0b771ce61a
Removes all instances of the copyright symbol.
2018-05-13 15:19:52 -04:00
Thomas Harte
3747d96b22
Corrects Mac paste pathway.
...
Also updates documentation around CSOpenGLView.
2018-05-13 11:12:03 -04:00
Thomas Harte
3ffa9e2751
Ensures complete machine picker state is preserved.
2018-04-03 23:01:12 -04:00
Thomas Harte
c697dd78f0
Ensures a new machine starts as first responder.
2018-04-03 22:22:39 -04:00
Thomas Harte
7dac791290
Causes the machine picker to show as a sheet.
...
Albeit with some user experience issues lingering.
2018-04-03 18:47:07 -04:00
Thomas Harte
cde2faeda6
Makes an unsuccessful attempt to show the new machine dialogue as a sheet.
...
Also corrects the 'open' case versus recent changes.
2018-04-02 23:31:36 -04:00
Thomas Harte
69f520428d
Makes a first, ugly attempt at a 'new machine' dialogue for the Mac.
...
Which has implied getting much more specific about MSX disk drive attachment, and has prompted an excuse to offer the ZX80 with the ZX81 ROM.
2018-04-02 22:42:41 -04:00
Thomas Harte
fca8a58b36
Exposes S-Video option in the Mac UI.
2018-04-01 13:29:04 -04:00
Thomas Harte
0869213c55
Cuts detritus.
2018-03-27 22:00:13 -04:00
Thomas Harte
a3fa9440d1
Renames method better to communicate purpose.
2018-03-22 09:49:36 -04:00
Thomas Harte
6419b0e619
Reintroduces CSMachineDelegate
, allowing the Mac port to switch output audio rate dynamically.
2018-03-22 09:48:19 -04:00
Thomas Harte
da3d65c18f
Devolves time to cycle conversion to machines.
...
Thereby avoids a whole bunch of complicated machinations that would otherwise have been required of the multimachine.
2018-03-21 22:18:13 -04:00
Thomas Harte
83f73c3f02
Installs additional safeguards against unsafe deconstruction.
2018-02-28 22:15:22 -05:00
Thomas Harte
a074ee2071
Possibly fixes ColecoVision input mapping.
...
Also provides symbolic input from the Mac.
2018-02-25 22:47:47 -05:00
Thomas Harte
f237dcf904
Avoids deadlock when one bestEffortUpdate action implies another.
2018-02-19 18:44:12 -05:00
Thomas Harte
7d75e864b1
Ensures thread safety of usages of bestEffortLock
.
2018-02-18 22:09:03 -05:00
Thomas Harte
ddf1bf3cbf
Reintroduces options selection for the Mac.
...
For everything except the Vic-20, anyway. That has a somewhat outdated notion of what an options panel should be, corresponding to the work yet to do on its analyser.
2018-02-12 21:46:21 -05:00
Thomas Harte
622a04aec8
Starts stripping the Mac port of its special machine knowledge.
...
Partly to force myself into moving that stuff into the cross-platform area, but mainly so that dynamic analysis can work equally from day one.
2018-01-24 20:14:15 -05:00
Thomas Harte
0202c7afb2
Consolidates Mac presentation of composite video selection.
...
Moves handling of an RGB/composite into `MachinePanel`, eliminating the need for `ElectronOptionsPanel` and `OricOptionsPanel`; similarly merges the MSX and Electron options panels so as to provide television/monitor selection for the MSX.
2018-01-15 18:36:22 -05:00
Thomas Harte
221c05ca76
Adapts the Mac port to use a Machine::DynamicMachine, thereby eliminating plenty of duplication.
2017-11-24 21:36:22 -05:00
Thomas Harte
542ec4312f
Switched the Objective-C code to using dynamic_cast alone to decide whether to post keyboard or joystick events.
2017-10-15 21:25:56 -04:00
Thomas Harte
f623bff5c3
Removes unnecessary call.
2017-10-06 18:48:51 -04:00
Thomas Harte
f41da83d97
Seeks to eliminate race conditions on the best-effort updater.
2017-09-30 21:34:43 -04:00
Thomas Harte
f86729c4ac
Ensures safe machine release upon window closure.
2017-09-30 20:12:46 -04:00
Thomas Harte
231f13d810
Updates to Swift 4 and Xcode 9's recommended project settings.
2017-09-19 23:06:37 -04:00
Thomas Harte
378f231499
Fully wired in drag-and-drop for media insertion.
2017-08-17 11:00:08 -04:00
Thomas Harte
f68565a33f
Split the static analyser functionality so that it's possible just to ask for the set of media implied by a particular file. Extended ConfigurationTarget so that media alone can be pushed to a machine.
2017-08-17 10:48:29 -04:00
Thomas Harte
54efcb7e2f
Made a game attempt at automatic motor control and ensured setting is initialised correctly from the user defaults.
2017-07-08 19:31:20 -04:00
Thomas Harte
23e989e170
This will likely do for the Swift/XIB side of things: the play/pause button is enabled or disabled as per the user's choice of automatic tape control, and toggles function when pressed. It communicates activity down to the Objective-C[++] layer, giving it a route through to the actual machine.
2017-07-08 19:12:06 -04:00
Thomas Harte
28412150e6
Added controls for controlling the tape motor of the ZX80/81, assuming I can find an automatic option.
2017-07-08 17:59:33 -04:00
Thomas Harte
8e35e913bb
Formally withdrew the 'load automatically' option for the Vic, having removed that option elsewhere.
2017-05-14 16:59:24 -04:00
Thomas Harte
dcd0c90283
Switched time of best-effort updater delegate setting, to avoid a callback before setupClockRate has happened, and therefore before it's clear what should be going on with audio.
2017-02-26 21:58:59 -05:00
Thomas Harte
a86a6367b5
Slightly shuffled to avoid a race condition on the best-effort updater.
2017-02-11 13:17:11 -05:00
Thomas Harte
e5fe37f089
Fixed 'joystick' input.
2016-10-27 19:44:48 -04:00
Thomas Harte
013f0c5317
Finally forced emulation window to front. Also removed min/max heights where they'd crept in and got explicit about the OpenGL view being first responder.
2016-10-24 22:08:24 -04:00
Thomas Harte
c24c1bf3b1
Created an options panel for the Oric. Which involved far too much copy and paste from the Electron. Time to figure out how to generalise this stuff, probably.
2016-10-19 22:56:14 -04:00
Thomas Harte
f6b6ec7009
Cemented new meaningof the audio queue delegate callout.
2016-10-17 08:18:32 -04:00
Thomas Harte
b274d7008c
Added precaution to make sure best-effort updaters aren't mid-update during document destruction.
2016-10-16 22:14:47 -04:00
Thomas Harte
cbc3d28217
Ensured an exception is thrown if no machine to run a file is found. E.g. right now if you tried to open a ZX Spectrum .tap.
2016-10-11 21:03:01 -04:00
Thomas Harte
02bfa8b8de
This should just trust.
2016-10-10 07:45:09 -04:00
Thomas Harte
de397799ed
Pulled away my crazy rationalisation of an audio queue into a circular buffer and decided just to trust the OS. This should reduce latency.
2016-10-10 07:30:00 -04:00
Thomas Harte
cfdd5fb686
By removing its status as a special case, eliminated the Atari 2600 document. It's fairly clear that my date with doing joysticks properly can be deferred only so much longer but this is no worse than previously things were.
2016-10-03 08:01:04 -04:00
Thomas Harte
bf468db73d
Migrated the Vic document to a mere options panel.
2016-10-03 07:42:05 -04:00
Thomas Harte
9e6e84647e
Quick formatting fix.
2016-10-02 22:06:28 -04:00
Thomas Harte
f28881ec6b
... and with the return of stored options and the shift of the aspect ratio to somewhere else (to sit, temporarily), the Electron document is the first of the gang to die.
2016-10-02 22:04:47 -04:00
Thomas Harte
19457621d8
Redistributed ownership of the user defaults key prefix, the Electron now works other than that settings aren't retained.
2016-10-02 21:56:50 -04:00
Thomas Harte
f1b99263e0
Relocated responsibility for loading ROMs, giving an Electron that 'works' (i.e. options aside) again.
2016-10-02 20:39:06 -04:00
Thomas Harte
989a1581da
Migrated analysis logic from the document controller to the document.
2016-10-02 17:04:14 -04:00
Thomas Harte
0c75c2fc41
Disabled all machine-specific document code, to force the migration of functionality. The 2600 works other than the little matter of input.
2016-10-02 16:57:57 -04:00
Thomas Harte
6c6e9830dd
Started factoring the options panels out, in the hope that they'll become the only machine-specific thing. At least in the short term.
2016-10-02 16:31:50 -04:00
Thomas Harte
cd5939501f
Treading water some more, ensured the DFS and ADFS ROMs get to the Electron. It now even inserts the DFS ROM if it has a DFS disk image. Might need to make it a sideways RAM though? Regardless, the next job surely — surely! — has to be to stop avoiding the 1770?
2016-09-20 07:36:57 -04:00
Thomas Harte
7c65c69e0f
Migrated to Swift 3.
2016-09-15 22:12:12 -04:00
Thomas Harte
ee8510984f
Added just enough wiring to restore the 2600 to functionality.
2016-09-15 19:34:45 -04:00
Thomas Harte
40660fe680
Made yet another guess at Commodore analysis. Elevated fast tape-related unnatural speed up to the OS-side mechanisms.
2016-09-12 22:06:03 -04:00
Thomas Harte
908dc40569
If loading automatically, assume that whatever was in the machine target set up the machine and don't override it. Too dodgy? More thought required.
2016-09-08 07:38:34 -04:00
Thomas Harte
8c84f3581a
Attempted to bring some uniformity in application of configurations.
2016-09-08 05:32:17 -04:00
Thomas Harte
50175a9aed
Added logic to try to spot when the first program is BASIC and, if so, what the correct memory model is, then to get that information to the Vic. Though it currently then gets overwritten by the view controller. Grrrr.
2016-09-07 22:17:19 -04:00
Thomas Harte
21e5f407d8
I need to get a bit more definitive on naming but this gets all the way to setting a configuration upon an Electron.
2016-08-31 22:03:42 -04:00
Thomas Harte
29c972f4b8
Added hacky segue into analysis for all Electron formats. Added analyser to try to differentiate Acorn-format ROMs from other things called .rom, which are likely to be numerous.
2016-08-28 12:43:17 -04:00
Thomas Harte
38aec44d85
Made sufficient changes for the Vic itself to believe it can recast a PRG as a tape and insert it that way. So now the ball is in the court of: how the heck are Commodore tapes encoded?
2016-08-15 19:44:41 -04:00
Thomas Harte
6079d30e58
Eliminated waiting here — either the buffer can be enqueued now or it is dropped.
2016-08-14 16:20:24 -04:00
Thomas Harte
5373f6cc57
Completed setting of options, including mapping from country to ROM + television standard.
2016-08-14 14:23:08 -04:00
Thomas Harte
f15d89239f
Made a stab at storage and restoration of country and memory size.
2016-08-14 14:00:08 -04:00
Thomas Harte
df77c2a20a
Added the XIB side of wiring for region and memory size options.
2016-08-14 13:53:14 -04:00
Thomas Harte
285a288c80
Switched to two cycles of options loading, meaning that they get set before files are inserted. Might need some further work?
2016-08-07 21:48:09 -04:00
Thomas Harte
be54d8040e
Made a first stab at having automatic loading be optional. But things are currently arranged such that the machine options are communicated too late to have an effect. So work to do.
2016-08-06 17:39:27 -04:00
Thomas Harte
58297f1baf
Performed the basic metadata and routing for opening D64 files. Realised that I wasn't actually necessarily catching exceptions properly for all file opens, and fixed.
2016-08-01 07:09:15 -04:00
Thomas Harte
18744cd98b
Slightly updated comments, switched to 1540 ROM so as very slightly to improve loading time.
2016-08-01 04:37:30 -04:00
Thomas Harte
6cfc514c2d
Made the rote changes necessary to attempt to open and to supply a G64 to the Vic.
2016-07-10 12:57:17 -04:00
Thomas Harte
1baf21827c
Since the ROM is well disassembled, let's actually try to be a 1541 first.
2016-07-06 22:17:32 -04:00
Thomas Harte
d1eea6943d
Ensured the 1540 ROM gets installed, at least.
2016-07-05 16:54:25 -04:00
Thomas Harte
6dbf16210b
Switched protocol to meaningful name and corrected its omission from the repository.
2016-07-04 19:19:07 -04:00
Thomas Harte
6027cba95f
Factored out the stuff of pushing a fast-loading option onwards and storing it within the user defaults.
2016-06-27 21:38:14 -04:00
Thomas Harte
8741be5c84
Made the slightest possible effort to get TAPs opened and passed to the VIC.
2016-06-25 16:24:52 -04:00
Thomas Harte
b8728285e7
An overridden getter looks more like this in Swift.
2016-06-23 21:09:34 -04:00
Thomas Harte
454e98302d
Slight rearrangement plus a setting of the CSMachine delegate corrects audio after a clock rate change.
2016-06-20 22:18:41 -04:00
Thomas Harte
31b26b8118
Made a first attempt to implement the full top-to-bottom change of clock rates, giving the Atari the ability to change rate when it switches to PAL mode, as it should always have been.
2016-06-20 21:47:27 -04:00
Thomas Harte
3591479571
Fixed mismatch between initial tick box states and communicated switches; ensured they're visible upon launching a game.
2016-06-20 21:31:07 -04:00
Thomas Harte
065ec618c4
Factored out and templated the 6532, finally taking the opportunity to add a means to control the on-console switches of an Atari 2600.
2016-06-19 19:36:34 -04:00
Thomas Harte
ef3ed1f436
Implemented full paste ability for any machine that is a typer.
2016-06-19 16:35:04 -04:00
Thomas Harte
3b71d1a309
Switched to a variable-length buffer based on attempting to hit approximately a certain quality of service.
2016-06-16 21:35:22 -04:00
Thomas Harte
2ee78d42b9
Made an attempt also to trigger updates upon audio packets being returned, and significantly to reduce the size and quantity of those. This should get down to 11ms latency if the output wave is 44100; I might need to scale up the buffer size as the sampling rate increases or this is going to get crazy at 192Khz.
2016-06-16 20:51:35 -04:00
Thomas Harte
00a9f1bf24
Fixed best-effort updater actually to run, finally moved clock rate announcement into the C++ side of things, started working on a mechanism to allow clock rate to be updated.
2016-06-16 20:39:46 -04:00
Thomas Harte
1921a6c469
Rewired the existing cause-an-update route from the OpenGLView through the best-effort updater.
2016-06-16 18:19:23 -04:00
Thomas Harte
e0baaf17f1
Added class prefix.
2016-06-15 08:07:25 -04:00
Thomas Harte
0b221e773f
Fixed ROM naming and sizes, ensured machines without sound outputs don't end up with an audio queue.
2016-06-05 11:20:05 -04:00
Thomas Harte
b29b2a5d08
Added forwarding of a loaded PRG from the Swift document to the wrapper. So I think that possibly completes the Swift side of things?
2016-06-05 09:01:32 -04:00
Thomas Harte
8052ce9223
System ROMs are now supplied to the Vic-20 wrapper, though they stop there. I also factored key forwarding out of the ElectronDocument and into the superclass, depending upon the child conforming to CSKeyboardMachine.
2016-06-05 08:53:05 -04:00
Thomas Harte
363e14a92f
Reorganised system ROMs out of the Mac-specific folder, adjusted Mac code to expect to find them organised hierarchically (as how many os.roms am I going to have?) and added readme files to explain what's missing from the Git repository.
2016-06-05 08:33:01 -04:00
Thomas Harte
06e1db8c85
This now gets as far as missing selectors.
2016-06-04 21:49:03 -04:00
Thomas Harte
404873fe58
Started sketching out infrastructure for Vic-20 support.
2016-06-04 21:43:50 -04:00
Thomas Harte
68a8851c52
Increased parallelism, allowing a simplification in the GL view.
2016-06-02 22:29:09 -04:00
Thomas Harte
8623dc2833
Consolidated a little more within the common code, adding sampling rate selection based on querying the machine.
2016-06-01 19:04:07 -04:00
Thomas Harte
50543e9676
Minor factoring up: the audio queue is now pushed universally by MachineDocument
.
2016-05-31 22:36:53 -04:00
Thomas Harte
c773c3a66c
Started trying to clean up and consolidate on the Swift side of things but time is up for the day.
2016-05-31 22:32:38 -04:00
Thomas Harte
9c89b668ae
Made further attempts to improve synchronisation and interrelated timing between display and machine update.
2016-04-20 22:35:46 -04:00
Thomas Harte
7aa87723a9
Added: key states are all cleared if the window loses focus. Which resolves sticky key issues. Allowing me just to use command+option+O for options and map both command and option as FUNC.
2016-04-19 21:29:10 -04:00
Thomas Harte
86626bbd72
Switched key that maps to FUNC from command to option. Logic is that command may frequently be used for performing an action which changes the key window, in which case we won't realise if it is released.
2016-04-18 19:20:26 -04:00
Thomas Harte
bf29c8e2bf
Fixed mismatch in television/monitor selection, ticked view for drawing concurrently, since it can, removed stray space.
2016-04-18 19:01:15 -04:00
Thomas Harte
94f148e212
Wired in options, at least getting as far as the Objective-C bridge. Then fast loading makes it to the emulated machine, display output type doesn't.
2016-04-18 08:21:00 -04:00
Thomas Harte
6158275ea7
Started adding an options panel.
2016-04-17 21:43:39 -04:00
Thomas Harte
2cc72169ff
Ensured machines can nominate their own aspect ratio windows. Switched to 11/10 for the Electron.
2016-04-11 23:12:56 -04:00
Thomas Harte
7276a06cc0
Added a helper to calculate a visible rect based on output timings, used it to scale the Electron output up to the full window size.
2016-04-11 21:47:23 -04:00
Thomas Harte
28e6517234
Switched away from tracking absolute time to tracking relative.
2016-04-06 20:46:00 -04:00
Thomas Harte
d4be4c4769
Of course, I want min
. Not max
.
2016-04-06 20:27:48 -04:00
Thomas Harte
e885438363
The penny has finally dropped that I can drive the CPU stuff in a manner completely decoupled from the GPU stuff. For much improved parallelisation.
2016-04-06 19:34:34 -04:00
Thomas Harte
5966ac845f
Switched symbols and updated all-RAM 6502 in order to fix unit test target.
2016-03-20 22:48:56 -04:00
Thomas Harte
902017a962
Fixes: drop any processing backlog, try not to allow an Electron document to close mid-draw, perform a frame grab even if the emulated machine is over-processing, really really don't create a CRT until it's safe.
2016-03-20 18:42:37 -04:00
Thomas Harte
9da7716c72
Attempted to simplify threading, thereby allowing machines to be constructed within a valid GL context, and started adding appropriate GL syncs. Which all oddly drops everything to a negligible FPS. Investigation will follow.
2016-03-19 22:46:17 -04:00
Thomas Harte
1c4acfb599
I think this is a prima facie acceptable implementation of the fast tape hack.
2016-03-13 17:39:53 -04:00
Thomas Harte
cfa616d593
Fixed: timing issue versus supplied test ROM was failure to include the Plus 1 ROM in the mix.
2016-03-12 11:51:20 -05:00
Thomas Harte
1e5fe2b2c1
Made an attempt to reestablish the Atari 2600 output connection despite various changes (TODO: generalise that stuff), and to start creating the composite shader.
2016-03-07 21:04:04 -05:00
Thomas Harte
41c09f8c3f
Renamed CSCathodeRayView to CSOpenGLView as it no longer has any CRT-related responsibilities. It just does the GL and manages a serial dispatch queue.
2016-03-05 14:45:09 -05:00
Thomas Harte
bbffbb5dc2
Resolved deadlock if an invalidate call was sent to the Electron while it was in the middle of an update.
2016-02-16 20:35:45 -05:00
Thomas Harte
0527888b15
Endeavoured to ensure safe shutdown.
2016-02-12 22:30:06 -05:00
Thomas Harte
b5bcadb8d3
Reinstated clipped CRT output, with more appropriate ownership of the decision.
2016-02-07 22:18:55 -05:00
Thomas Harte
80e7e5e602
Updated to return old behaviour of drawing only upon changes.
2016-02-04 23:05:47 -05:00
Thomas Harte
e0d51408e4
Onward with carrying this through to the bitter end, this at least results in all the appropriate knowledge and call-ins occuring at the CRT.
2016-02-04 22:28:50 -05:00
Thomas Harte
4554abb755
Made an attempt to be more rigorous in display generation on the Electron, to make sure I deal with mid-line changes to/from blank line mode. Even if it turns out that they generate pixels.
2016-01-29 21:14:13 -05:00
Thomas Harte
e65cd4cf06
Some data is marginally reaching the CPU from the tape.
2016-01-19 22:05:34 -05:00
Thomas Harte
5a39e42413
Wired up enough such that some basic attempt at parsing a UEF occurs.`
2016-01-18 17:06:09 -06:00
Thomas Harte
2779f0e569
Statred working on support for at least the most fundamental file format.
2016-01-18 15:46:41 -06:00
Thomas Harte
38ffcaa262
Here, at last, is _some_ audio output, at least.
2016-01-14 20:33:22 -05:00
Thomas Harte
afde8dac49
Closed the loop such that audio manages to bubble up into Objective-C.
2016-01-13 22:38:59 -05:00
Thomas Harte
d28abdc037
Made an attempt at correct timing, adding support for additional paged ROMs, added file association for .rom.
2016-01-12 22:34:26 -05:00
Thomas Harte
650077feac
Pulled a few things out as constants, zoomed in a little. Still in a 4:3 window though.
2016-01-11 22:18:34 -05:00
Thomas Harte
e93dbdb463
Implemented keyboard input.
2016-01-11 19:48:31 -05:00
Thomas Harte
a900bfed65
Fixed to ensure that frame rendering wraps around, and to properly connect the Electron to its view. Now I need a working pixel shader.
2016-01-09 20:34:22 -05:00
Thomas Harte
0db8938d27
Added the option for the CSCathodeRayView to show only a subsection of the full scan area. Zoomed in a little on the 2600. Put in enough piping to give the Electron sight of its ROMs at least.
2016-01-06 23:14:36 -05:00
Thomas Harte
c69b3256ba
Slightly simplified Swift usage.
2016-01-04 23:44:36 -05:00
Thomas Harte
616dc0b57c
Okay, so this is the absolute bare minimum about of refactoring and wiring necessary to get the [unimplemented] Electron machine pumping.
2016-01-04 23:40:43 -05:00