Thomas Harte
d9a7ef9e46
Edging towards audio output; the speaker is given appropriate input and output rates, and then updated with current divider and enabled/disabled status.
2016-01-13 21:03:43 -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
3437781abd
Started sketching out an interface for sound generation. Which made me realise that the CRT in CRTDelegate was redundant, since C++ has namespaces.
2016-01-12 16:54:09 -05:00
Thomas Harte
6112f4ef6b
Withdrew soft filtering for now; until the sampling frequency is passed on it's not sufficiently rigorous.
2016-01-12 16:42:16 -05:00
Thomas Harte
75d6ec354b
Added some very basic filtering in RGB mode.
2016-01-12 16:27:09 -05:00
Thomas Harte
49a36ec9ac
Added F12 as break.
2016-01-11 22:35:52 -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
ce916ebd6a
Fixed runaway frame generator.
2016-01-10 23:32:57 -05:00
Thomas Harte
3d6f20b7b9
Output, at last! Though sync is clearly way off.
2016-01-09 21:53:33 -05:00
Thomas Harte
09df218c01
Some output! Showing that three lines of solid sync isn't smart. But here it is.
2016-01-09 21:48:53 -05:00
Thomas Harte
b4f31edea3
Made an attempt to get RGB output mode up and running, and showing at least a box where pixels would be.
2016-01-09 21:32:56 -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
716bb3281b
This at least now connects up a CRT, though it never talks to it.
2016-01-07 22:26:49 -05:00
Thomas Harte
47a7654c00
Added just enough that this is probably a successful boot. I guess I'm going to need to get invested in graphics next? Hmmm.
2016-01-07 21:01:13 -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
bfd9957c81
You now get an Electron only if you ask for a new file. That'll do for now while it's the only thing that one might want to start without supplying a file. The 6502 now starts from a defined point — being reset. The Electron is starting to grow the absolute most simple buds of its memory map.
2016-01-06 21:09:49 -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
Thomas Harte
43ab8bbad5
Okay, so then here's a first shot at the Objective-C -> C++ bridge for the Electron.
2016-01-04 23:16:37 -05:00
Thomas Harte
ab45c1d530
Started working on a shell for the Electron emulation, including factoring out the common CRT delegate -> Objective-C bridging, serial dispatch queue and frameskipping logic from the Atari 2600 shell.
2016-01-04 23:12:47 -05:00
Thomas Harte
22fa024546
Added document XIB.
2016-01-03 20:46:39 -05:00
Thomas Harte
aa0714fe27
Started sketching out an Acorn Electron emulation, as it's a platform I'm familiar with and will force me to figure out PAL decoding. Factored out NTSC-specific parts of the display decoding logic and hence added RGB output mode.
2016-01-03 20:41:43 -05:00
Thomas Harte
96503a3ac5
Switched to nicer nullable/nonnull syntax.
2016-01-02 17:59:21 -05:00
Thomas Harte
feeedbe33b
The standard Xcode versioning updates. Nothing of substance.
2016-01-02 17:57:23 -05:00
Thomas Harte
5feef2110f
Added a very basic attempt at shadow mask emulation.
2015-09-24 21:23:16 -04:00
Thomas Harte
63b648be65
Switched down to four samples per pixel, just more than half as many, to fit into a vec4. Edges aren't as smooth but I'm wondering whether it'll make much odds when I implement a shadow mask.
2015-09-17 19:25:15 -04:00
Thomas Harte
5d6bee4927
Of course, being in-phase means being the cosine wave.
2015-09-10 21:30:39 -04:00
Thomas Harte
6a0b4e86c8
An Xcode beta version bump, nothing more.
2015-09-05 17:21:36 -04:00
Thomas Harte
53e699516b
Disabled multisampling unless and until I can get the per-pixel cost down.
2015-09-05 17:21:16 -04:00
Thomas Harte
39027b675d
Fixed YIQ conversion and made sampling pattern slightly more rational.
2015-09-05 17:09:24 -04:00
Thomas Harte
80cf3d9301
Formally gave the 2600 responsibility for providing the code that decodes one of the things it has put into a buffer into a composite sample.
2015-09-03 12:28:16 -04:00
Thomas Harte
ac8fc9a1a0
Experimenting with pre-encoding luminance and chrominance separation over on the
...
CPU as otherwise the GPU does them repetitively and more awkwardly (as it's working purely in floats). It means uploading twice as much data though, so I don't
know. Still only half as much as the RGBA path of a few days ago. Will experiment.
Also slightly adjusted division of responsibility in the fragment shader per the
desire to have the `sample` function owned externally.
2015-09-03 11:15:23 -04:00
Thomas Harte
11acf3f2d3
Made some further minor attempted improvements.
2015-09-02 20:51:56 -04:00
Thomas Harte
161450942a
Removed outdated comment. This is better now than it was.
2015-09-02 17:20:23 -04:00
Thomas Harte
0d6094d842
Attempted very basic vectorisation, plus some minor other clean-ups.
2015-09-02 17:17:22 -04:00
Thomas Harte
f60ba4f487
Added a note about horribleness to the source. You never know who's looking.
2015-09-01 22:38:15 -04:00
Thomas Harte
cb6e6e8acb
It's the worst fragment shader you'll ever see. The worst. But this attempts NTSC composite video emulation, artefacts included.
2015-09-01 22:36:45 -04:00
Thomas Harte
5fe0cff692
Fine. I'll accept 'bin' files if I must.
2015-08-19 21:36:50 -04:00
Thomas Harte
a62c7f5c56
At last! Discovered CRT scanning bug; was always moving by the full proposed run length along the scan, not the time until the next event. Using this, have implemented proper vertical sync at last (I think). Have disabled scanline banding too, as now everything meets up it's more helpful to be able to see with clarity.
2015-08-18 22:22:47 -04:00
Thomas Harte
462a791ed3
Ensured that no backlog accumulates of cycles to run. Otherwise the background queue was lagging behind.
2015-08-18 21:13:54 -04:00
Thomas Harte
ca6b54536e
Added fire and reset inputs.
2015-08-18 20:58:05 -04:00
Thomas Harte
bc805a90fe
Wired up joystick directions, at least, and fire button presses get as far as the C++. But there's some latching to figure out before they'll work.
2015-08-18 20:33:24 -04:00
Thomas Harte
902795d61c
Switched vertical sync detection method, at least for now. They never happen automatically (I need to fix that) and just always take effect if detected in the lower half of the display. PAL/NTSC is determined just by looking at the refresh rate.
2015-08-18 00:17:03 -04:00
Thomas Harte
a693c081f8
Switched on the appropriate compiler warnings re: signed comparisons and implicit conversions. Fixed all less-than-explicit calls.
2015-08-16 16:08:29 -04:00
Thomas Harte
1cc479affd
Removed redundant GL call.
2015-08-16 15:40:03 -04:00
Thomas Harte
391789e75c
Removed stray space.
2015-08-13 23:22:51 +01:00
Thomas Harte
cbe76ea5d5
Got rid of the thread hopping in order to redraw the GL view. Which appears to help significantly with total application cost.
2015-08-13 22:01:25 +01:00
Thomas Harte
0e52b7365e
Removed redundant code.
2015-08-10 16:42:25 +01:00
Thomas Harte
eb23a493e5
Switched back to one texel per colour clock, at least for now. Attempted to break _RGBA assumption within the cathode ray view.
2015-08-05 23:36:04 -04:00
Thomas Harte
fd36f13baf
The cathode ray view no longer hard codes the frame size. So that's one less coupling. Doubled pixel output size to give sufficient sampling detail to capture the NTSC colour clock (ummm, hopefully).
2015-08-05 21:45:47 -04:00
Thomas Harte
67e82c713f
Broke assumption that every item in a vertex description is a short, specifically turning lateral into a byte. Which buys me a byte for phase, if that's sufficient.
2015-08-05 21:12:33 -04:00
Thomas Harte
5644b3a1cc
Fixed scanline sizing and fill issues, as well as shortening vsync to the correct Atari length.
2015-08-05 20:55:27 -04:00
Thomas Harte
5313b48ebd
I'm ashamed to admit, I: played with numbers until enough things looked stable such that I can investigate other things. Discovery: my PAL autodetection was way off. Fixed, hopefully.
2015-08-02 20:32:18 -04:00
Thomas Harte
6e52e5df1c
Full separate 'lateral' usage is go. Also probably at some point I need to throw in a phase property, which this new flexibility will help with.
2015-08-02 14:32:29 -04:00
Thomas Harte
3ab6585789
Started making the format of data included in a CRTFrame less a matter of variously hard-coded magic constants. Which will allow me to separate the idea of an internal lateral position from the direct texture coordinate, avoiding precision sampling errors at the top and bottom.
2015-08-02 14:25:21 -04:00
Thomas Harte
be421587ad
Eliminated the vertical retrace counter; vertical retrace ends when the beam gets back to the top.
2015-08-02 13:48:35 -04:00
Thomas Harte
9c91f1a2eb
Added an attempt at NTSC/PAL autodetection, based on number of missed vertical syncs.
2015-07-31 18:04:33 -04:00
Thomas Harte
a5d66e9dd6
Factored out a few more constants, started trying to ensure there's enough slack and the mechanisms in place for the CathodeRayView to hold onto two frames if it desires, for potential phosphor simulation, switched once again to additive blending — much more like a real CRT — and added a sine function across the width of spans per my understanding of how an electron gun actually fires.
...
Why do all this when overall timing is still so far off? It helps me more easily see how overall timing is so far off.
2015-07-31 17:47:10 -04:00
Thomas Harte
e4615cda2e
Switched back to unrealistic solid raster beams for the time being.
2015-07-30 23:01:59 -04:00
Thomas Harte
cfe758daa0
A tweak here, a tweak there, to help with debugging.
2015-07-30 21:29:40 -04:00
Thomas Harte
98efae2536
Reintroduced emergency vertical sync — so that output occurs even when the emulation isn't catching syncs properly — and switched some spaces to tabs.
2015-07-30 17:16:49 -04:00
Thomas Harte
828ae66a45
It appears ARC extends its reach into C++ nowadays. Fixed additional retain cycle.
2015-07-27 21:17:53 -04:00
Thomas Harte
3c25ead1f3
Started working out some of my retain cycles and general failures to release. Switched .mm filename so that Xcode will stop getting confused when I try to switch between implementation and interface files.
2015-07-27 21:15:10 -04:00
Thomas Harte
1cbebdafcc
This now uploads only a portion of the source buffer if possible. Which is usually possible.
2015-07-27 20:58:51 -04:00
Thomas Harte
1f229ee6f7
More tweaks to provide a stable image, at least for the time being.
2015-07-27 20:18:25 -04:00
Thomas Harte
01109d441b
Made an attempt at NTSC colours. Hard coded in RGB, not composite. Short cuts, tsk.
2015-07-27 19:04:03 -04:00
Thomas Harte
662e7942ac
Enabled multisampling. This is hardly an expensive use case.
2015-07-27 16:57:11 -04:00
Thomas Harte
b9cf6fd4dc
Implemented a virtual skew control, hard coded to what is conveniently exactly the right number.
2015-07-27 16:44:47 -04:00
Thomas Harte
caffe56a2d
Slightly expanded width of cathode ray gun, decided to figure out exactly how to deal with off-by-one lengths and precision at a later date, ensured that failure to catch vertical sync doesn't cause out-of-bounds buffer access on the hard-coded, assumed large enough, 512x512 data textures.
2015-07-27 00:28:47 -04:00
Thomas Harte
65bb31d55b
With around about a thousand issues, not the least of which being sometimes unsafe memory accesses, I've at last got pixels on screen.
2015-07-26 23:50:43 -04:00
Thomas Harte
cd0a62d21e
With a slight tweak to the informal protocol used for 6502 memory access cycles, ensured the wait strobe actually halts the CPU, to give a more accurate linking of machine time to real time.
2015-07-26 15:55:19 -04:00
Thomas Harte
6252f6030f
Switched to idiomatic source name, ensured latest project name is in all appropriate header places, threw texture coordinates slightly into the shader mix.
2015-07-26 15:25:11 -04:00
Thomas Harte
e53fbcf9ea
Reshuffled to make the OpenGL view explicitly a conduit for CRT-style output, and to give it responsibility for frame drawing. Which is still an awkward thread hop for the time being, but I've yet to read up on the advocated approach to multithreading with an NSOpenGLView; it looked like special provisions were available.
2015-07-26 15:13:46 -04:00
Thomas Harte
78a91b67c5
Quickie: make sure the correct context is adjusted; use the intended convertPointToBacking:.
2015-07-24 23:42:19 -04:00
Thomas Harte
ecb2898bd5
The overall architecture of who has responsibility for what is now very askew but: the CRT now outputs a tightly packed short buffer, with the probable OpenGL destination in mind. So it's now all fixed arithmetic internally. CRTFrame is reduced to a plain C struct with the intention that the OpenGL view will take responsibility for it and stop doing the back-and-forth sprint on getting buffer data. The Atari 2600 now outputs explicit blanks rather than level blacks for its border, so that it's easier visually to debug the CRT in its form as far as it has currently progressed: to drawing lines where the cathode ray gun would run while outputting pixel. I note that I'm still not quite getting vertical sync right yet — I'm just accepting it anywhere in teh frame — but that should be an easy fix.
2015-07-24 23:29:45 -04:00
Thomas Harte
5ab47e600a
Got through the requisite amount of invisible pain to get something onto my GL display. But clearly this is factored in entirely the wrong way. Work to do.
2015-07-24 20:37:08 -04:00
Thomas Harte
31338ef754
Okay; having no minimum size is a user experience nightmare. Fixed.
2015-07-23 22:54:17 -04:00
Thomas Harte
44e8ffd01c
Ensured windows start and remain 4:3, made sure I request a GL 3.2 context and that an exception is raised if I call any old-fashioned GL functions.
2015-07-23 22:51:53 -04:00
Thomas Harte
02c786520a
More fiddling in the margins in advance of doing the OpenGL stuff: window now supports full-screen display.
2015-07-23 20:53:26 -04:00
Thomas Harte
b9721d1d3f
Okay, treading water slightly, ensured window content is correct aspect ratio.
2015-07-23 20:50:50 -04:00
Thomas Harte
7276c77027
A full communication pathway now leads to Atari2600.mm (for now) being in possession of a frame and receiving a command to draw, with a suitable OpenGL context being active and whatever is drawn subsequently appearing.
2015-07-23 20:45:07 -04:00
Thomas Harte
0611646181
This then is what the serial dispatch queue and the triple buffer achieve together: I can post the runs over to the main thread for processing while emulation continues separately.
2015-07-23 20:16:48 -04:00
Thomas Harte
e7237c7bd5
Switched to forcing all processing onto a common queue and piping the completed frame over into the Objective-C class.
2015-07-23 20:07:35 -04:00
Thomas Harte
5203f31bf4
Reintroduced a console examination of the output runs being received after fixing a failure to complete or restart frames over in the CRT; weirdly it seems that sync is being obeyed but raster position is off. So work to do.
2015-07-22 20:45:10 -04:00
Thomas Harte
065050115f
Made an attempt to switch to a triple-buffering scheme for CRT outputs, with an eye towards asynchronicity.
2015-07-22 20:33:20 -04:00
Thomas Harte
963cb2f6fb
Attempted to switch to slightly more meaningful names within the CRT and implemented a delegate to investigate output. Working on it.
2015-07-22 18:15:18 -04:00
Thomas Harte
2d0f861474
Incoming: a 'CRT' class, to receive information intended for a cathode ray tube. To decode sync, etc.
2015-07-19 13:36:27 -04:00
Thomas Harte
12746b35e3
Ensured there's no overflow while changing base.
2015-07-19 10:54:19 -04:00
Thomas Harte
195c8a87d8
Introduced enough logic that the Atari 2600 is being run, at least. No output yet though because (i) it has no-one to send output to; and (ii) there's nobody that knows how to display output. Hmmm.
2015-07-16 22:14:40 -04:00
Thomas Harte
4496493e85
Performed the bare necessary steps to get my little OpenGL view to create a CVDisplayLink and then repaint itself in time with the display.
2015-07-16 21:16:21 -04:00
Thomas Harte
1df2c48668
Introduced my GL view as the window content.
2015-07-16 21:01:49 -04:00
Thomas Harte
3e0679235a
This now goes just far enough to create an instance of Atari2600::Machine and push a ROM to it. Next jobs are to get a basic CRT emulation wired up, outputting to the window.
2015-07-16 20:40:46 -04:00
Thomas Harte
24c0579b94
Shuffled things and guessed at things until the Xcode project was happy being subservient to the project proper.
2015-07-16 20:27:31 -04:00