Thomas Harte
311f8c0b47
Restored audio.
2016-11-16 11:10:07 +08:00
Thomas Harte
8b40ae03ca
Extended analysis to spot IRQ and NMI vector changes, for titles that simply adjust those then exit. Ensured Oric emulator can type and load quickly on an Oric 1 just as well as on an Atmos.
2016-11-15 11:05:53 +08:00
Thomas Harte
e2cdfae8a7
The emulated Oric now has access to both versions of the BASIC ROM and picks between them based on the static analyser's recommendation.
2016-11-15 10:39:16 +08:00
Thomas Harte
9c550c594a
Moved audio work back into its own thread, but this time it queues up an all happens only upon a flush. Hopefully to resolve synchronisation cost concerns.
2016-11-09 21:17:50 -05:00
Thomas Harte
64827931bf
Switched the Oric implementation simply to rely upon the Storage-level tape parser. So now there's only one, authoritative one of those.
2016-11-07 21:57:58 -05:00
Thomas Harte
45b169f341
Made a few mapping fixes, clarified where the default reset code lives, ensured the Oric and Vic clear their keys when the typer ends.
2016-11-05 15:28:03 -04:00
Thomas Harte
338904fffe
Made similar cleanings of the Electron and Vic.
2016-11-05 15:07:57 -04:00
Thomas Harte
9fb9d92437
Made the typer much more able to help out, and thereby tidied and separated the Oric's typer.
2016-11-05 14:47:09 -04:00
Thomas Harte
626e719fab
Added sanity checks on loading quickly.
2016-11-03 22:50:49 -04:00
Thomas Harte
a7e4c0c3b5
Switched to a ROM trap for typing.
2016-11-03 22:21:05 -04:00
Thomas Harte
8c70dc5891
Implemented typer for the Oric, and I'm starting to think the code is a bit too repetitious. Refactoring will be forthcoming. Added CLOAD"" as the loading command for all Oric software.
2016-11-03 22:14:40 -04:00
Thomas Harte
9c2df231ce
Made fast loading optional.
2016-11-03 07:59:30 -04:00
Thomas Harte
e9f1a6a79d
This appears to be it. The secret? Don't worry about the stop bits. They're just processing time. Latch onto the next start.
2016-11-03 07:34:48 -04:00
Thomas Harte
827a919368
This is an initial attempt at reading actual tape data. It loses sync though.
2016-11-02 22:30:53 -04:00
Thomas Harte
419629ee6e
Completed proof of theory for fast loading. It's just an around-the-back direct-to-file hack for now though.
2016-11-02 21:09:49 -04:00
Thomas Harte
bb58caff52
Merge branch 'master' into FastOricTape
2016-10-31 22:11:03 -04:00
Thomas Harte
21604376e6
Reintroduced clocking of the AY and boxed in the range of the master divider a little further.
2016-10-30 22:51:08 -04:00
Thomas Harte
33512988fb
Added a basic cycle skipper plus some notes.
2016-10-30 22:39:47 -04:00
Thomas Harte
b04ba41951
Moved code out of header.
2016-10-30 20:16:58 -04:00
Thomas Harte
3b52ab0d37
Cut some dead state.
2016-10-30 20:16:52 -04:00
Thomas Harte
58f888c6ad
Limited CRT calls.
2016-10-30 16:21:20 -04:00
Thomas Harte
1ff9b474bf
Made an attempt to make execution flow through this loop more straightforward for a branch predictor.
2016-10-30 15:30:39 -04:00
Thomas Harte
7843a244b0
Ensured emulation doesn't enter an infinite loop if the user attempts to read beyond the end of a tape.
2016-10-28 22:23:25 -04:00
Thomas Harte
4fab794747
Added a direct-to-two-cycles emulation path for 6522 owners.
2016-10-27 21:13:25 -04:00
Thomas Harte
2eda0b3c86
Attempted to simplify the logic behind the most common 6522 usage.
2016-10-27 21:06:31 -04:00
Thomas Harte
30d4a7c662
Fixed: blinking means ink vanishing and appearing. Nothing else.
2016-10-24 21:58:15 -04:00
Thomas Harte
09687a2e2f
Removed errant newline.
2016-10-20 21:30:12 -04:00
Thomas Harte
44910d90ba
Adjusted aberrations in semicolons.
2016-10-20 21:20:13 -04:00
Thomas Harte
6292ac5b26
Yet more .hpp clean(s)ing.
2016-10-20 21:15:21 -04:00
Thomas Harte
c5948ef177
Evicted more header-resident code.
2016-10-20 21:05:32 -04:00
Thomas Harte
d335991e60
Shifted code out of the header.
2016-10-20 20:53:17 -04:00
Thomas Harte
9c956f83b8
Made it slightly more clear that the correct test is conformed to.
2016-10-20 19:23:36 -04:00
Thomas Harte
21cfb39ed9
Added 60Hz output support.
2016-10-20 07:34:23 -04:00
Thomas Harte
5c69728625
Introduced a memory fuzzer, and ensured the Oric uses it.
2016-10-19 21:31:50 -04:00
Thomas Harte
734b575d30
Ensured no attempt to write to pixel storage if none was available.
2016-10-19 21:17:27 -04:00
Thomas Harte
ca28e3c64e
Ensured the AY is pumped linearly, not exponentially.
2016-10-18 22:21:06 -04:00
Thomas Harte
9669a5ec9b
Switched to a more authentic interfacing to the AY.
2016-10-18 19:32:15 -04:00
Thomas Harte
988bbb5ab1
Ensured AY registers aren't rewritten just because of a synchronise event. A stall prior to figuring out proper bus logic, clearly.
2016-10-17 08:05:57 -04:00
Thomas Harte
1a57e89ff0
Altered phase so that it now merely accounts for accumulated error across a frame. Can probably do better.
2016-10-17 08:04:15 -04:00
Thomas Harte
61ad0f8bdc
Fixed inverse characters, added an extra per-frame phase change, based on empirical observation, ensured header guard won't become ambiguous.
2016-10-16 22:14:01 -04:00
Thomas Harte
a67afb7efa
Switched to a tight crop on the pixel part of the display.
2016-10-15 21:43:46 -04:00
Thomas Harte
a608bbebfb
Performed enough wiring to put the onus back onto OricTAP to do appropriate things.
2016-10-15 21:32:59 -04:00
Thomas Harte
6d7c3f6ac2
Factored out the now-sampling binary-level tape player from the Vic and connected it up to the Oric.
2016-10-15 21:21:18 -04:00
Thomas Harte
9730e8247f
Ensured propagation of synchronise messages, added enough to do plain tone. Probably. So: noise and envelopes missing. And it's all far too quiet.
2016-10-15 21:04:21 -04:00
Thomas Harte
51bdac27ae
Made some AY advances; it's now being polled for samples and collecting more information on what it needs to output.
2016-10-15 17:45:39 -04:00
Thomas Harte
da9c9ad51a
Added in the missing keys; added variable phase to the video.
2016-10-14 22:39:27 -04:00
Thomas Harte
288d10c253
Got some keyboard reaction.
2016-10-14 21:44:15 -04:00
Thomas Harte
3dbb602419
This seems to be a bit more likely.
2016-10-14 21:36:59 -04:00
Thomas Harte
138eabcff4
Continued in my effort to wire up a keyboard. Will need further to continue.
2016-10-14 21:35:15 -04:00
Thomas Harte
d8e4c488c2
Started iterating towards having an AY and a fully-working keyboard.
2016-10-14 21:18:03 -04:00
Thomas Harte
8867ad647c
Made an attempt at implementing the loopbacks necessary for diagnostics.
2016-10-13 21:47:12 -04:00
Thomas Harte
41e7eff6c8
Added a VIA. Now it's time to find out how poor my 6522 emulation is.
2016-10-13 20:50:55 -04:00
Thomas Harte
c9962f6502
Made an almost complete implementation of video. Just one row of the diagnostics cartridge seems to be off, showing thw wrong character set.
2016-10-13 19:34:29 -04:00
Thomas Harte
69920a4979
Made some basic first attempt at parsing video attributes; ensured lowest byte of ROM is readable.
2016-10-13 07:59:11 -04:00
Thomas Harte
ae48ad1bb4
Meaningful text! Albeit with the initial 'O' of 'Oric' missing. I guess control codes and NMIs next?
2016-10-12 22:03:54 -04:00
Thomas Harte
120b2d9e33
Switched to using a diagnostic ROM for now, as it'll definitely boot without initially requiring either a 6522 or AY. Have some forms appearing which imply I'm not doing badly, at least up to not knowing where I'm supposed to get character pixels from.
2016-10-12 21:52:47 -04:00
Thomas Harte
1f857c619b
Fixed timing issues. Static box of frame achieved!
2016-10-12 21:42:36 -04:00
Thomas Harte
304f0999cd
Made a faulty but hopefully creditable attempt to demarcate an Oric frame.
2016-10-12 21:29:21 -04:00
Thomas Harte
8c8a71107e
Added just enough wiring to add something that will generate the video, one day.
2016-10-12 19:20:23 -04:00
Thomas Harte
e6937d8003
Ensured that the ROM gets installed. So next for some video action?
2016-10-12 18:51:02 -04:00
Thomas Harte
4a062c616f
Added enough wiring to get Oric TAPs through to a completely unimplemented Oric emulation.
2016-10-11 22:20:13 -04:00
Thomas Harte
922dd6a586
Hit up the other two kinds of audio generator.
2016-10-07 17:10:00 -04:00
Thomas Harte
de658b70d7
That's thread safety, subject to the async task queue being made to work...
2016-10-07 17:02:36 -04:00
Thomas Harte
2d26feb073
Added mappings for the previously-missing characters @, [ and ].
2016-10-04 22:03:53 -04:00
Thomas Harte
f9ee6803df
It's likely this should be set at startup too, based on latest info.
2016-10-03 22:16:10 -04:00
Thomas Harte
97304e22f0
Adjusted per tests on StarDot; it appears the tape interrupts may fire during audio output, as if in tape output mode.
2016-10-03 20:03:14 -04:00
Thomas Harte
dae6b45464
Ensured the always-on bit of the interrupt status register is indeed on.
2016-10-03 19:15:31 -04:00
Thomas Harte
cd1ab09701
The Vic-20 now inserts ROMs again.
2016-09-29 20:15:25 -04:00
Thomas Harte
79412dc84d
Upped MFM clock cycles, switched back to using the typer for the ADFS and adjusted ADFS ROM slots.
2016-09-28 21:28:34 -04:00
Thomas Harte
4db086949a
Made an attempt to add MFM decoding to the 1770; ensured something is returned when reading the Plus 3 status register again.
2016-09-25 21:38:52 -04:00
Thomas Harte
572d5587d9
Made a first stab at enabling multi-disk machines and thereby obeying (some of) the Plus 3's status register.
2016-09-25 21:24:16 -04:00
Thomas Harte
9bbcbd1001
Renamed class, intending to turn a Disk::Drive
into literally just that, and have a thing with a PLL that consumes events be a Controller
.
2016-09-25 20:05:56 -04:00
Thomas Harte
7f4c78139c
Attempted to ensure that ADFS disks get to an appropriately-configured Electron. Not immediately sure why the shift press isn't working; doesn't need to be dealt with immediately.
2016-09-25 19:59:46 -04:00
Thomas Harte
6084020ab3
Added shift-break as a better way to boot suitable disks. Continued attempting to clean the 1770.
2016-09-25 14:11:22 -04:00
Thomas Harte
ce4100e5b9
Fixed slots for DFS and ADFS to sideways RAM; continued working on the 1770 to get as far as trying to get the body of a sector.
2016-09-24 22:04:54 -04:00
Thomas Harte
8db0030068
Fixed ROM loading by the Electron, turned the WD1770 into a 'disk drive' (it'll do for now), persuaded it to get all the way through a very specifically convenient type 1 command.
2016-09-20 22:14:33 -04:00
Thomas Harte
3b97b038b9
Corrected and sketched out state machine far enough to get to a complaint about unhandled work.
2016-09-20 15:56:31 -04:00
Thomas Harte
e358057440
Added a WD1770 run_for_cycles
call. So I really can now move that as far as reporting that it has no disk?
2016-09-20 07:42:17 -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
a9e65e9b7a
Tweaked disk side density, added call-outs to a WD1770 if the Electron had one (albeit without run_for_cycles
yet as I need to figure out the clock rate), added a shell of the basic functions of the WD1770. No implementation yet.
2016-09-19 22:06:56 -04:00
Thomas Harte
64f2538b1f
Added CRC checking to DFS comprehension; fixed a bunch of places where I'd used Objective-C's #import
rather than #include
.
2016-09-19 08:16:06 -04:00
Thomas Harte
142254a478
Resolved failure to open disks that arrive through analysis.
2016-09-17 18:11:58 -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
e3571e8b9e
Added insurance against an infinite loop should the tape be exhausted.
2016-09-12 22:22:23 -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
e54a2326a3
Made attempt to run at zero cost while processing tape input.
2016-09-11 17:34:02 -04:00
Thomas Harte
eeec516fa6
Implemented seeking on tapes, mucked about a bit more with the Commodore analyser, at least temporarily removed cropping from the Vic emulator.
2016-09-11 17:09:00 -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
56c0d70c1f
Gave disks their own namespace.
2016-08-27 17:15:09 -04:00
Thomas Harte
c0402d0c2b
Gave tapes their own namespace.
2016-08-27 17:09:45 -04:00
Thomas Harte
55ada536ac
Added a test call, further mutated result structure.
2016-08-27 14:25:16 -04:00
Thomas Harte
dab3580111
Experimental: can I afford a lower sampling rate if there's a low-pass filter in effect?
2016-08-22 22:18:05 -04:00
Thomas Harte
1541273785
Moved responsibility for throwing in a low-pass filter up to the Vic, appropriately.
2016-08-21 18:13:31 -04:00
Thomas Harte
99157ad6b2
Ensured the 6560 knows its real audio clock on a PAL machine; removed some stray semicolons.
2016-08-19 13:35:34 -04:00
Thomas Harte
e985c72ce8
Removed a dead special case.
2016-08-19 12:23:06 -04:00
Thomas Harte
4edd1214f1
This has now successfully loaded its first PRG-as-a-tape.
2016-08-19 10:58:42 -04:00
Thomas Harte
2935848f35
Adopted header/header/data/data pattern. But still not complete joy.
2016-08-17 08:03:34 -04:00
Thomas Harte
dfe9fb83ef
This proves that bytes are being deposited properly. For the first 36 anyway, and with no announcement.
2016-08-16 21:09:50 -04:00
Thomas Harte
12f8aff65b
Lengths I'd taken seem to have been for dipoles, not single poles. So I just doubled the clock rate. Also I was producing each dipole as high then low, when they should probably be low then high. The Vic now at least recognises that something is happening on the tape.
2016-08-16 19:46:53 -04:00
Thomas Harte
ca2dc6b6c4
Ensured ROMs survive in the new memory model.
2016-08-15 19:56:01 -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
547aefb696
Slightly adjusted PRG strategy, made a note about where next.
2016-08-14 16:36:42 -04:00
Thomas Harte
d9016909ed
Added some wiring for PAL/NTSC mode switching on the Vic, making an attempt to simplify the whole loop of having different clock rates.
2016-08-14 13:33:20 -04:00
Thomas Harte
a547b7e1d8
Took basic steps towards supporting memory expansions.
2016-08-13 17:21:25 -04:00
Thomas Harte
142774be37
Collapsed 6560 template to a more direct loop, albeit with quite a bit still left to fix.
2016-08-09 21:10:53 -04:00
Thomas Harte
12bad8f23f
Turned the 6560 into an ordinary template, similar to the rest of the project, albeit right now with a fairly shonky internal implementation. Fixed a Mac-specific interface sizing issue.
2016-08-09 20:41:05 -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
3e65450a54
Converted the 6560 fully into a template; worked on allowing the typer to run at a much faster rate where hardware has some trigger by which it can request the next key.
2016-08-06 14:33:24 -04:00
Thomas Harte
d832e5e10d
Reduced 1540 PLL to running at 4Mhz. Which is possibly correct (?) Made minor change to avoid divide if possible.
2016-08-02 21:28:50 -04:00
Thomas Harte
5d40d70c92
Fixed 6560 addressing error, added an autotyper for Vic disks (more work potentially needed), fixed semantics for testing whether a 6502 is about to reset.
2016-08-01 10:32:32 -04:00
Thomas Harte
bc10b3ee9a
It appears the problem is as simple as sectors being counted from zero.
2016-08-01 10:08:38 -04:00
Thomas Harte
f5e4ea3351
Some minor tidying, lots more of the caveman stuff as I try to determine what I'm doing wrong.
2016-08-01 09:43:08 -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
b43a7381ae
Fixed framing and first-byte-after-sync signalling. Hacked together as parts of it are, loading now appears to work!
2016-08-01 04:25:11 -04:00
Thomas Harte
41893b5ef6
Put in the absolute minimum logic for drive motor emulation. Drive appears to be attempting head steps.
2016-07-31 19:38:51 -04:00
Thomas Harte
740ea0b7e2
Added overflow-flag setting logic and ensured disk ROM gets through regardless of ROM/disk installation order.
2016-07-31 19:33:18 -04:00
Thomas Harte
0945049cd3
Made attempt to connect sync detect and then apply appropriate windowing, posting bytes to the appropriate place.
2016-07-31 18:29:44 -04:00
Thomas Harte
198fbbedc7
Reeled back all appropriate pieces of caveman debugging.
2016-07-31 13:42:34 -04:00
Thomas Harte
2332f72875
Formalised clock-rate multiplication within disk drives, discovered that the stepper didn't have ideal behaviour for my timed event loop and hence nailed down the semantics a ilttle more.
...
(obiter: the 1540 now appears to discern the correct sequence of bits. Framing is off in my test printfs but that's neither here nor there).
2016-07-31 13:32:30 -04:00
Thomas Harte
8f62211f5e
Wired up the 1540 as a PLL delegate. Which prima facie means it should start receiving a bit stream. Except that I clearly have something in the timing way off — either my flux transitions are far too short or I need to significantly increase the clock rate on the PLL.
2016-07-29 12:08:18 -04:00
Thomas Harte
89a1881fef
Started turning the 1540 into an actual disk drive.
2016-07-29 11:03:09 -04:00
Thomas Harte
ada2f073e0
Completed handing of the disk all the way to the 1540.
2016-07-10 16:24:46 -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
4ca6883f7c
Disabled attachment of a 1540 again, as I probably need to move to opening an actual disk image next.
2016-07-10 08:03:36 -04:00
Thomas Harte
824d9ea92b
Added further comments.
2016-07-10 08:01:16 -04:00
Thomas Harte
d8334edf4a
Started trying to clean up, including commuting the C1540 source file name to match its class name but mainly by adding documentation.
2016-07-10 07:46:20 -04:00
Thomas Harte
c0ab45a73d
Disabled a bunch of the caveman debug logging.
2016-07-09 22:29:11 -04:00
Thomas Harte
f589d639db
Okay, so it seems that sync also works the other way around.
2016-07-09 22:25:44 -04:00
Thomas Harte
693c8b2438
After all that, it seems likely that inputs just aren't inverted for the Vic.
2016-07-09 20:03:38 -04:00
Thomas Harte
656cd211d7
Was transmitting bit levels backwards (probably?); 1540 now acknowledges byte received.
2016-07-09 18:06:49 -04:00
Thomas Harte
7cc4bf3fe7
Hit and hope is getting me nowhere. Time to unit test this thing.
2016-07-09 15:40:25 -04:00
Thomas Harte
8827597363
Messier and messier, but I've at least attempted to implement hardware attention acknowledge.
2016-07-08 19:00:39 -04:00
Thomas Harte
9a08ef61cb
Still fumbling in the margins: made an effort not to imply that the 1540 is forever reading syncs.
2016-07-07 22:13:18 -04:00
Thomas Harte
199c0e27e0
Mostly just random guesses now, to be honest. It's approaching the end of my window for the morning.
2016-07-07 07:16:36 -04:00
Thomas Harte
81e6cc34e5
Per the ROM disassembly, the Vic's VIA outputs are inverted for the benefit of the serial bus.
2016-07-07 06:57:21 -04:00
Thomas Harte
c9479f923b
The inversion of truth was clearly just a problematic API. Got explicit. LineLevel might need to become more pervasive.
2016-07-07 06:44:13 -04:00
Thomas Harte
dcb86a027a
Okay, so the 1540 doesn't toggle the actual attention line. I don't know what it does yet but this helps.
2016-07-06 22:31:14 -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
4f174786b5
Fixed potential buffer overrun.
2016-07-06 21:39:09 -04:00
Thomas Harte
f64cd8cfcb
Quick fixes properly to declare the DriveVIA, to ensure its interrupts take effect, and to wire ATN IN to CA1 rather than CB2.
2016-07-06 20:22:46 -04:00
Thomas Harte
428fcdb978
Centralised and improved serial logging.
2016-07-06 07:46:21 -04:00
Thomas Harte
8819711bc8
Threw in the second VIA as a currently clearly incorrect thing.
2016-07-05 22:22:09 -04:00
Thomas Harte
93c2bb80a2
Improved a comment, added independent C[A/B]2 input mode.
2016-07-05 21:11:51 -04:00
Thomas Harte
6c4fa4ec5d
Improved commenting and initial state communication.
2016-07-05 20:57:31 -04:00
Thomas Harte
1e6d90de17
Made an attempt properly to deal with initial bus state.
2016-07-05 20:52:33 -04:00
Thomas Harte
c3b7d24293
It appears that the attention line is also wired to CB2. So the ball is back in the 6522's court.
2016-07-05 19:19:46 -04:00
Thomas Harte
11fc43aa04
Made an attempt to allow the 1540 to talk back to the Vic, and to receive interrupts. Also slightly disambiguated debugging logging.
2016-07-05 19:12:43 -04:00
Thomas Harte
d16b79073e
Further fleshing out: added a serial port for the serial bus.
2016-07-05 17:27:02 -04:00
Thomas Harte
d1eea6943d
Ensured the 1540 ROM gets installed, at least.
2016-07-05 16:54:25 -04:00
Thomas Harte
86dabd007b
Furthered fleshing out of the 1540. Though it doesn't yet receive a ROM so won't even attempt to do anything meaningful.
2016-07-05 16:39:18 -04:00
Thomas Harte
a25fcc7190
Made a first attempt at wiring back serial port input.
2016-07-05 16:10:54 -04:00
Thomas Harte
d2cded7b59
Attempted to separate out the concept of a serial port and a serial bus, since the bus may be shared, and to establish half duplex communications from the Vic.
2016-07-05 14:55:20 -04:00
Thomas Harte
0d3d0fbe4d
Created a namespace for Commodore
and an empty container file for the 1540[/1] implementation.
2016-07-05 13:28:27 -04:00
Thomas Harte
97751a9d86
Took the preliminary steps necessary to wire up a serial port.
2016-07-05 10:55:47 -04:00
Thomas Harte
a49f2b41cc
Added C++ side of things. I think.
2016-07-04 21:48:25 -04:00
Thomas Harte
8db44eed3e
Added a default implementation of Speaker::skip_samples
.
2016-07-04 20:48:27 -04:00
Thomas Harte
bfa237397d
Settled on assigning to nullptr
as the appropriate style for emptying shared_ptrs; fixed the Vic properly to release its output resources.
2016-07-04 20:34:11 -04:00
Thomas Harte
88964ceac0
Eliminated plain pointer passing for object types.
2016-07-04 19:33:55 -04:00
Thomas Harte
82b0bc9b58
Discovered that this is another meaningful usage of using
.
2016-07-04 19:10:10 -04:00
Thomas Harte
7e5b631e30
Cut some dead code.
2016-07-01 19:02:29 -04:00
Thomas Harte
7fa010a463
Attempted to add support for the most basic of control line output, and slightly to optimise the Vic.
2016-07-01 19:01:22 -04:00
Thomas Harte
ed8f4d0476
Added some minor additional bits of documentation.
2016-06-30 08:46:29 -04:00
Thomas Harte
0182b0483a
Added a 'power on' flag that is set automatically at construction but can be declined. Saves all that stuff of every machine having to set and then unset the RST line, and fixes an Electron bug related to that.
2016-06-29 19:13:24 -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
e3e6bbb785
Removed the colon again, until I can educate myself a little further.
2016-06-26 21:38:03 -04:00
Thomas Harte
69d78dfdb3
Removed logging.
2016-06-26 21:36:26 -04:00
Thomas Harte
1439ca0580
Added a quick automatic issuing of the 'LOAD' command.
2016-06-26 21:34:37 -04:00
Thomas Harte
843d1fdca7
Added some extra logging while trying to determine what's going on; added interrupt clearing for the control lines.
2016-06-26 21:30:06 -04:00
Thomas Harte
2a2c3da5d4
Added hardwired tape present bit.
2016-06-26 19:50:49 -04:00
Thomas Harte
c306d705e1
Made a quick first attempt at all-the-way-through tape wiring for the Vic.
2016-06-26 19:43:09 -04:00
Thomas Harte
37ba42a52f
Factored out the stuff of playing a tape, started basic sketch of the Vic-related classes.
2016-06-26 19:03:57 -04:00
Thomas Harte
d5e50f5ea0
Got a bit more explicit about how ports are identified on the 6522.
2016-06-26 12:30:01 -04:00
Thomas Harte
8d9eb30d82
So it sounds like the user-port VIA might actually be connected to NMI?
2016-06-25 16:31:35 -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
2bd71e7e9b
.reset
is the more normal way to reassign a unique_ptr
.
2016-06-23 20:52:44 -04:00
Thomas Harte
e05003c176
Discovered that the VIC and the VIAs can be simultaneously selected. Adjusted bus appropriately.
2016-06-22 17:34:42 -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
88e2b382e5
Made an attempt at a full and thorough 6532 implementation (and got a bit more explicit about flag size in the 6502).
2016-06-20 18:57:35 -04:00
Thomas Harte
b6dd38dad3
Corrected type safety warning.
2016-06-19 21:41:01 -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
65413f078c
Factored out the 6532, eventually to make it testable.
2016-06-19 18:57:40 -04:00
Thomas Harte
6dd8ea67c9
Tested and trimmed delay on typing if resetting.
2016-06-19 17:27:23 -04:00
Thomas Harte
05cb47709e
Implemented Utility::Typer
for the Electron. So that now also receives pastes.
2016-06-19 17:25:35 -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
3fc472d5cb
Expanded typing to include phase for machines that need to go through multiple keypresses to reach a certain state, expanded Vic to be able to type most things (still bodged on lowercase though), and to schedule a 'run' if it's supposed to be loading into RAM, spotting that opportunity actually to do so.
2016-06-19 13:46:53 -04:00
Thomas Harte
e7aeed2f03
Established a general pattern for machines that can type things. Started working on the Vic typing itself.
2016-06-19 13:10:52 -04:00
Thomas Harte
f4915c5ad6
Fixed test and added basic implementation of data direction.
2016-06-18 17:17:03 -04:00
Thomas Harte
394902f409
Switched to clocking the 6522 by the half-cycle. Very trivial test now passes.
2016-06-18 13:57:10 -04:00
Thomas Harte
595791cee0
Made the base 6522 class more abstract: you must now opt-in if you want the IRQ line to be sent to a delegate.
2016-06-18 08:51:18 -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
fdc854c0c2
Fixed tone channels; made an attempt at loading PRGs that are supposed to go into RAM.
2016-06-13 21:49:59 -04:00
Thomas Harte
5fc36b956c
Attempted most basic sketching of a container for Vic audio.
2016-06-13 19:30:52 -04:00
Thomas Harte
4190b42bbb
No need for these to live separately, I think.
2016-06-13 18:27:18 -04:00
Thomas Harte
19b2f46488
Fixed accesses to colour memory.
2016-06-12 11:06:19 -04:00
Thomas Harte
4fec625b19
Minor cleaning, implemented clearAllKeys
.
2016-06-12 10:38:21 -04:00
Thomas Harte
167ed9b8bb
Added enough to load a PRG as a ROM.
2016-06-11 14:00:12 -04:00
Thomas Harte
3e8d383615
Improved key map. Possibly enough to type some basic BASIC?
2016-06-11 13:19:59 -04:00
Thomas Harte
d1731b1d26
Hacked my 6522 to work. Mistake is in not returning output as input when appropriate — i.e. that I'm ignoring data direction. Also fixed K and L keys.
2016-06-11 13:06:01 -04:00
Thomas Harte
271de23ee6
Ran on in and introduced a bunch more keys, hopefully to help to diagnose.
2016-06-11 12:26:19 -04:00
Thomas Harte
d7c1f5b18a
Made an attempt at hooking up the '2' and '4' keys. A mostly unsuccessful attempt. 2 does nothing, 4 clears the screen.
2016-06-11 11:50:37 -04:00
Thomas Harte
7a241b5ef5
Added just enough hopefully to allow implementation of the keyboard-input VIA.
2016-06-11 11:34:39 -04:00
Thomas Harte
12d1cac751
Merge branch 'master' into Vic-20
2016-06-10 18:23:55 -04:00
Thomas Harte
805e2d15c6
Fixed timing when clock is divided.
2016-06-10 18:20:16 -04:00
Thomas Harte
1ed04fae1e
Resolved 6560 addressing.
2016-06-10 18:12:21 -04:00
Thomas Harte
f3b1d7de82
... and that's a flashing cursor. Keyboard input next!
2016-06-09 22:37:59 -04:00
Thomas Harte
30b7db3979
Attempted a square wave, made the Vic itself responsible for address manipulation re:the 6560.
2016-06-09 22:05:17 -04:00
Thomas Harte
e99055bedb
Attempted switching back to a square wave for the composite video and otherwise implementing what's necessary to get to that flashing cursor — the 6560 returns its scan line and the timing bits of the 6522 are appearing.
2016-06-08 22:15:24 -04:00
Thomas Harte
581eace478
Increased logging slightly, ensured all of colour RAM can be read, slightly improved the 2600 pixel decoder.
2016-06-07 22:01:14 -04:00
Thomas Harte
26ab96868a
Decided to turn the 6522 into a template, since it's a per-cycle thing with variable behaviour. Added appropriate memory map callouts to hit the two in the Vic. Though they don't yet do anything.
2016-06-07 19:15:18 -04:00
Thomas Harte
c7c55528e2
Realised that registers appear also to be readable.
2016-06-06 20:29:39 -04:00
Thomas Harte
64539a2b24
Advanced to having some characters displayed, even though they're obviously very much incorrect and the display is still rolling.
2016-06-06 07:35:35 -04:00
Thomas Harte
9e9e50edb1
Added guess on how colour memory and the 12-bit bus possibly works.
2016-06-05 16:28:06 -04:00
Thomas Harte
2ab21e7a3c
Switched to a real (unexpanded) memory map, meaning that nonsense is no longer being supplied to the VIC.
2016-06-05 16:00:35 -04:00
Thomas Harte
9566c87532
Added enough to the machine that the 6560 can now produce output if it wishes.
2016-06-05 12:11:12 -04:00
Thomas Harte
b56482607e
Added just enough that the 6502 should now be operating correctly.
2016-06-05 11:44:29 -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
f922d38ed2
The Vic now captures the ROMs sent to it and has just enough infrastructure to get to a black screen. Progress!
2016-06-05 10:51:07 -04:00
Thomas Harte
12243c40ad
Kicking the ball a little further down the road, ROMs and PRGs now reach the actual emulated machine.
2016-06-05 09:06:59 -04:00
Thomas Harte
b10a06e700
A CRT is still absent but this moves the ball back into the C++ side's court.
2016-06-04 22:00:50 -04:00
Thomas Harte
404873fe58
Started sketching out infrastructure for Vic-20 support.
2016-06-04 21:43:50 -04:00
Thomas Harte
604862b20b
Fixed playfield/missile and playfield/ball collisions.
2016-06-02 22:36:52 -04:00
Thomas Harte
e3b95b8d2b
Back to asynchronous updates and drawing, to try to improve guarantees on audio latency; experimenting with whether other parts of the approach are fundamentally flawed; added a broad-phase for scheduled updates on the 2600.
2016-06-02 21:22:55 -04:00
Thomas Harte
11073daee1
Issues appear to be around timing generally. Working on it.
2016-06-02 20:15:48 -04:00
Thomas Harte
7aac306a12
Quick fix to the polynomials.
2016-06-02 19:56:02 -04:00
Thomas Harte
253e5a4203
With no regard to performance whatsoever, endeavoured to bring sound to the 2600. It's very scratchy, so something is wrong.
2016-06-02 19:50:16 -04:00
Thomas Harte
1e0fcbbee8
Made a very basic stab at a couple of the tone generators, added straight-through path for the speaker when input rate exactly equals output rate.
2016-06-01 19:53:16 -04:00
Thomas Harte
40c4544fb7
Got the basic sound pipeline pumping, just enough for static-level audio seemingly to work. Berzerk VE says "intruder alert, intruder alert", anyway.
2016-06-01 19:27:04 -04:00
Thomas Harte
8dc66167be
Made an attempt to consolidate the Objective-C++ side of things based on the incoming CRTMachine::Machine
.
2016-05-31 22:16:20 -04:00
Thomas Harte
5c4f35e13f
Finally started on generalising the C++ stuff so as to be able to be able to get a working audio binding on the OS-specific side without further repetition by factoring an appropriate protocol out from the Electron and sketching out the correct speaker class for the Atari. Added a method to ask it what a good output frequency would be.
2016-05-31 21:23:44 -04:00
Thomas Harte
3fc80ea01f
Rethought, hopefully perfecting, sprite timing.
2016-05-30 19:56:36 -04:00
Thomas Harte
8b342f77a9
Made an attempt further to rationalise timing.
2016-05-27 21:51:27 -04:00
Thomas Harte
91d3453cc1
Switched to looking backwards rather than forwards.
2016-05-27 14:33:08 -04:00
Thomas Harte
106ddae907
Sprites are still a pixel off but better; made some attempt to move things outside of the loop.
2016-05-25 21:43:19 -04:00
Thomas Harte
40c2c0bd2d
Minor simplifications and improvements. Still trying to figure out what's causing the non-linear edge addressing.
2016-05-25 21:12:25 -04:00
Thomas Harte
b01b474e36
I'm back to thinking that resets are deferred but pixel counts are live.
2016-05-25 07:32:25 -04:00
Thomas Harte
758806f924
Introduced a separate queue for pixels, which may or may not be correct.
2016-05-24 21:39:57 -04:00
Thomas Harte
0b081831a9
Set up a pipeline for all pixels that attempts to allow for appropriate delays.
2016-05-24 07:58:26 -04:00
Thomas Harte
5c1e594937
Realised there's a clocking delay on starting horizontal move. Which fixes Coke Zero.
2016-05-22 21:45:40 -04:00
Thomas Harte
c3e719c4ab
Added missile-to-player offsetting. Completing the list of graphics-related TODOs.
2016-05-22 17:01:56 -04:00
Thomas Harte
4c6d4d899d
Ensured that resetting the horizontal timer affects phase.
2016-05-22 16:29:53 -04:00
Thomas Harte
df93d7849d
Re-enabled the ball.
2016-05-22 14:38:14 -04:00
Thomas Harte
0242924fb4
Various bits of caveman debugging appearing and disappearing, switched to latching ball behaviour.
2016-05-22 14:26:02 -04:00
Thomas Harte
5e220562e4
Actually, the four-clock delay, with palette taking effect immediately, appears to be correct. So back to the drawing board on that.
2016-05-21 21:44:54 -04:00
Thomas Harte
4eded9b9d0
Re-enabled collisions.
2016-05-21 13:05:36 -04:00
Thomas Harte
b1c84f5402
Counters run every scan line regardless of blank and sync. Also played further with timing.
2016-05-21 12:54:39 -04:00
Thomas Harte
470c90428a
Switched to two-register implementation of VDELP, etc.
2016-05-21 10:26:27 -04:00
Thomas Harte
36d19cb6cf
Made an attempt at properly pumping timers during hmove.
2016-05-21 10:18:15 -04:00
Thomas Harte
a952813036
Fixed missile sizes, played about with ball placement.
2016-05-19 18:30:17 -04:00
Thomas Harte
cf5b8ab92e
This is now approximately back to where it was on Cosmic Ark.
2016-05-19 08:30:10 -04:00
Thomas Harte
40600b4bcb
Made sprite placement consistent at least. Not necessarily yet correct.
2016-05-18 22:07:24 -04:00
Thomas Harte
e61392d3fb
Fixed incorrect duplication.
2016-05-18 21:50:28 -04:00
Thomas Harte
8c7ce1ec3f
Attempted to fix sprite sizing and, again, missile repetition.
2016-05-18 21:41:25 -04:00
Thomas Harte
d013d46337
Fixed object motion decoding and checking of the repeat mask for missile graphics.
2016-05-18 21:36:28 -04:00
Thomas Harte
83ed6a82cf
Fixed: asserting vertical blank doesn't affect underlying timing.
2016-05-18 18:49:40 -04:00
Thomas Harte
877c55b5c5
Threw in missiles. To 'complete' graphics output. Or, rather, to move me on to debugging.
2016-05-18 07:54:44 -04:00
Thomas Harte
354143a78c
Reintroduced an attempt to plot sprites.
2016-05-18 07:51:25 -04:00
Thomas Harte
0b99649b0f
Had a first shot at triggering player and missile resets.
2016-05-18 07:31:05 -04:00
Thomas Harte
b8708b805c
The vertical blank flag now works again.
2016-05-17 22:02:57 -04:00
Thomas Harte
a1e63e8320
Attempted to generalise on pixel counter storage, at least. Further adjusted background timing but I'm still not sure.
2016-05-17 21:41:32 -04:00
Thomas Harte
ad6f405483
Fixed: was off by one on pixels, allowing four extra pixel output cycles per line.
2016-05-17 19:02:32 -04:00
Thomas Harte
c96674b341
Made genuine first approximate attempt at hmove.
2016-05-17 18:35:40 -04:00
Thomas Harte
d170bb14e6
Extended scheduling plans, inserted initial events for hmove, albeit not yet implemented.
2016-05-17 18:21:49 -04:00
Thomas Harte
6a961c4d28
Added something of the ball counter, but without yet a working HMOVE it's prone to error.
2016-05-17 07:18:14 -04:00
Thomas Harte
7d3cf76576
Generalised slightly, to allow events to be queued up to eight cycles in advance; most importantly each event gets to pick its own delay.
2016-05-17 07:09:18 -04:00
Thomas Harte
3d003070b3
Made an attempt better to generalise the idea of things with 4 CLK delays.
2016-05-16 21:54:27 -04:00
Thomas Harte
4ad074fc78
Introduced a four-cycle delay between playfield fetch and display, curing Yar's Revenge. Also disabled barrel roll scanling colouring again. I really need to make my mind up on that.
2016-05-16 19:55:56 -04:00
Thomas Harte
f19ed2e8f8
Started merely attempting to reintroduce the background layer.
2016-05-16 19:04:13 -04:00
Thomas Harte
9d92ad659f
Established the basic timing loop, albeit without clocking delays yet.
2016-05-16 08:01:29 -04:00
Thomas Harte
cca53598d3
Made another run at 2600 colours.
2016-05-14 16:52:24 -04:00
Thomas Harte
8d52765f40
Realised why new shaders weren't taking. Very negligibly decreased Atari drawing cost.
2016-05-12 22:22:24 -04:00
Thomas Harte
6d65bc9b3a
Permitted a wider error window on vertical sync, tidied things up a little and started trying to move towards full implementation of the OpenGL contract.
2016-05-11 22:11:01 -04:00
Thomas Harte
4b3c4082d2
These functions appear correctly to model the NTSC and PAL palettes; the CRT's attempt to switch function doesn't work properly yet though.
2016-05-11 21:07:18 -04:00
Thomas Harte
5a4262d74e
Confirmed: it is inaccurate for a 6502 to self reset at power up. So that responsibility now rests in the machines.
2016-05-10 21:05:52 -04:00
Thomas Harte
1142c86811
Slightly simplified conditional.
2016-05-07 18:38:51 -04:00
Thomas Harte
bf9917707e
Merge branch 'master' into Glitches
2016-05-05 08:31:40 -04:00
Thomas Harte
fea32869b0
Implemented what I now believe to be the real paging logic.
2016-05-05 08:28:06 -04:00
Thomas Harte
87df57195d
Started on an attempt not to treat the various buffers as free to loop within, starting with the input texture.
2016-05-04 07:39:45 -04:00
Thomas Harte
3af97d4069
Eliminated redundant variable.
2016-04-26 19:57:05 -04:00
Thomas Harte
6c567d166a
Fixed colour burst acceptance, switched to an integral single byte streaming of Atari colours.
2016-04-25 20:56:15 -04:00
Thomas Harte
9b64f64db7
Attempted to normalise some style decisions.`
2016-04-24 22:32:24 -04:00
Thomas Harte
7a8d100861
Found a new working formula for NTSC Atari 2600 colours.
2016-04-24 22:02:00 -04:00
Thomas Harte
d221c712b0
Ensured GL context is active when destructing CRTOpenGL.
2016-04-24 20:34:25 -04:00
Thomas Harte
db908a7547
Adjusted Atari to using its non-standard line lengths.
2016-04-24 19:23:30 -04:00
Thomas Harte
9260d97b03
Oh, of course, it's that the output vertex array doesn't get initialised unless there's an RGB shader program. Silly oversight. Fixed. And switched back to TV output for correct colours.
2016-04-24 17:56:36 -04:00
Thomas Harte
d0f9a6c2f5
Added a dump-the-input default RGB output shader. Which at least proves that the Atari 2600 is generally still working.
2016-04-24 17:35:25 -04:00
Thomas Harte
80a3169674
Started reviving the Atari 2600 emulation. Put new startup sequence into place.
2016-04-24 06:56:08 -04:00
Thomas Harte
ae2760e034
Colour phase is now updated and varies per line.
2016-04-21 21:07:29 -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
66f2c10c04
Resolved potential crash if tape requests are made without one inserted. Softened glFinish to glFlush, though I'm still not sure I should strictly need even that.
2016-04-19 21:00:48 -04:00
Thomas Harte
3d53f157de
Output selection now takes effect. So I can stop accidentally committing changes back and forth.
2016-04-18 08:27:58 -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
499f7ace07
Re-enabled working video output for the Electron for the day and consolidated the rough metric I'm using to pick a number of taps for the audio filter.
2016-04-17 20:43:20 -04:00
Thomas Harte
6ff9ffba6c
Switching temporarily to an attempt to draw input runs as if RGB: shader compiles, fixed a race condition on out-of-bounds accesses for the source buffer.
2016-04-17 15:51:28 -04:00
Thomas Harte
104f44f27f
Attempted to improve deinterlacing, gave the CRT full control over blend mode, switched back to 2000000Mhz audio.
2016-04-14 22:20:47 -04:00
Thomas Harte
6a17c2992d
Introduced a compile-time configurable audio divider, set it arbitrarily to '8' for now. Discovered why my graphics aren't centred and added a TODO.
2016-04-13 22:31:59 -04:00
Thomas Harte
026ce0255f
Source runs are now captured, and that buffer appropriately reset.
2016-04-13 22:20:13 -04:00
Thomas Harte
2ea02ed127
A source array buffer is also now created, mapped, unmapped, etc.
2016-04-13 22:14:18 -04:00
Thomas Harte
955e185790
Minor simplification.
2016-04-13 19:19:04 -04:00
Thomas Harte
4d889d9c7f
Made an attempt slightly to simplify the fragment processor, at both ends.
2016-04-12 22:35:11 -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
a3c2cd880e
I discovered a further post on this on the STH forums; apparently the Electron simply asserts sync continuously. No breaks.
2016-04-11 21:01:09 -04:00
Thomas Harte
bdb99ba92f
Corrections back towards composite output: fixed misnamed constant, ensured the CRT doesn't write nonsense to the output buffer, ensured it grows three vertices at a time rather than six when desired. Net effect should be that the output stage is working again, with the input processing remaining to fill in.
2016-04-10 22:56:52 -04:00
Thomas Harte
8701366277
Switched horizontal sync detection back to differential, switched the Electron to an XOR-style sync output (believed to be accurate, but I need to check), fixed some latent issues around vertical sync detection.
2016-04-10 21:34:40 -04:00
Thomas Harte
e617bd2bb3
Turned audio quality up to the maximum, at least for now.
2016-04-06 21:12:22 -04:00
Thomas Harte
5aa6da221f
Shifted responsibility for byte shifts, probably to a more logical place.
2016-04-05 22:19:14 -04:00
Thomas Harte
2248769df9
Pulled a bunch of selection parts outside of the loops. Probably exhausting this angle of attack.
2016-04-05 22:17:44 -04:00
Thomas Harte
8f87973a96
Switched to table-based byte to output conversion.
2016-04-05 22:07:10 -04:00
Thomas Harte
e35456612a
Simplified 40-column to pixel conversion.
2016-04-05 20:44:05 -04:00
Thomas Harte
6dbd20ffde
Expanded interface to rgb_sample to eliminate its need to make assumptions about globals, used expanded interface to compact Electron data to two pixels per byte.
2016-04-05 20:32:55 -04:00
Thomas Harte
7838507a7a
Simplified sound generation.
2016-04-04 22:22:19 -04:00
Thomas Harte
729fddea1c
Switched to integer textures, likely to simplify for most use cases.
2016-04-04 19:39:01 -04:00
Thomas Harte
3ca58b2a57
Attemted further to diminish jumpiness.
2016-03-22 22:07:30 -04:00
Thomas Harte
8cd5d40e00
Made an attempt to reduce the amount of data heading to the GPU.
2016-03-22 21:16:32 -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
fb6fb5d948
Switched to two-phase setup to deal with OpenGL scheduling.
2016-03-20 13:50:13 -04:00
Thomas Harte
aa8a192c7e
Simplified API down to their being a single texture with a specified depth.
2016-03-19 17:37:55 -04:00
Thomas Harte
b074860031
Updated to latest information on interrupt timing.
2016-03-18 21:11:25 -04:00
Thomas Harte
4cd0aa3416
Completed FIR filter based audio output.
2016-03-15 23:37:35 -04:00
Thomas Harte
0edf165401
Fixed sound pitch, though I'm not yet exactly sure why.
2016-03-14 22:52:16 -04:00
Thomas Harte
9a492ac15f
Made a further guess at the state interrupts would probably be left; slightly simplified interface.
2016-03-14 22:42:52 -04:00
Thomas Harte
15120d8fb6
Switched to probably more accurate contended memory, resolved issue of not leaving the tape data received interrupt set when returning a byte from the fast tape, fixing Joe Blade, and tested slightly further to determine that interrupts probably signal upon entry into horizontal sync.
2016-03-14 19:29:28 -04:00
Thomas Harte
fb26b38ff9
This is as simplified as things seem to be able to get without breaking at least Northern Star. Joe Blade et al remain stubbornly broken but I'm not immediately able to determine why.
2016-03-13 19:55:20 -04:00
Thomas Harte
f797e6b5b6
Started taking baby steps towards a genuine unification of the tape interrupt generating code.
2016-03-13 19:45:50 -04:00
Thomas Harte
bc554dedf7
Fixed: attempting to read the screen start address no longer alters it.
2016-03-13 18:50:23 -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
4462bb92f8
Moved interrupt back down to where it's probably meant to be.
2016-03-12 23:18:46 -05:00
Thomas Harte
cdff90f20d
Fixed: setting an interrupt control value with the lowest bit set could result in interrupts that can't be disabled.
2016-03-12 22:55:33 -05:00
Thomas Harte
6327311130
Made an attempt to separate and clarify on tape interrupts.
2016-03-12 20:32:26 -05: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
763d5e8819
Access timing now appears to be exactly on the nail. Disabled automatic interrupt expiration again as I'm not persuaded it's correct for at least the RTC.
2016-03-10 23:12:28 -05:00
Thomas Harte
e305fd9326
Adjusted numbers, empirically.
2016-03-10 22:40:18 -05:00
Thomas Harte
a89225987f
Blank lines are back.
2016-03-10 22:19:54 -05:00
Thomas Harte
b836d74e18
Believing the previous implementation to be overly complicated through premature optimisation, simplified video. It's slightly slower now. Will need work. Immediately to do: figure out how to deal with blank scan lines.
2016-03-10 22:08:50 -05:00
Thomas Harte
20ac630e4d
Some minor optimisations and timing tweaks. Nothing of substance.
2016-03-10 19:58:50 -05:00
Thomas Harte
df3fff51c7
These interrupts apparently last only 64µs at most.
2016-03-10 19:10:53 -05:00
Thomas Harte
f232a12fad
Fixed RAM timings: it's at least two and possibly three cycles to access RAM, and an access that overlaps with video fetch in Modes 0–3 will cost the length of the video fetch rather than somehow finishing in time.
2016-03-10 19:04:43 -05:00
Thomas Harte
c7976dd657
Started trying to clean up my Outputs namespace by moving stuff related to the CRT underneath a separate subnamespace.
2016-03-08 20:49:07 -05:00
Thomas Harte
6dfe877c43
Basic attempts to organise myself into shape for composite output continue.
2016-03-07 21:22:47 -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
cd9c62acca
Still stepping slowly towards a working composite mode, switched the RGB sampling function to returning a vec4
, which may be of benefit to any machine with a brightness part of an RGB signal, and started edging towards at least having the correct GLSL programs ready for converting composite output.
2016-03-07 19:08:26 -05:00
Thomas Harte
3b6c9c15a1
Switching momentarily back to monitor mode, resolved why I was suddenly getting no output upon creating some texture targets.
2016-03-07 18:55:15 -05:00
Thomas Harte
eefd17ed4c
Fixed sync response in composite scan output generation and stored texture coordinates.
2016-03-05 21:52:22 -05:00
Thomas Harte
5c8db71c64
Corrected some constants, ensured both machines (so far) are setting the output device.
2016-03-05 16:19:10 -05:00
Thomas Harte
7839d93344
With the provision of an extra hint to the CRT and, finally, the realisation about why my scans weren't exactly joining up, improved output precision.
2016-02-27 22:39:01 -05:00
Thomas Harte
1c6de7692d
Made an attempt to fix tape output interrupts; offloaded raster width and placing conversion to the GPU.
2016-02-27 20:37:41 -05:00
Thomas Harte
db18c85423
Simplified the run builder rather; put a double check of Electron timing in place.
2016-02-25 22:01:42 -05:00
Thomas Harte
1eea28b692
Disabled some debugging parts, added some others, marked some things as inline. Ticking over.
2016-02-22 23:35:42 -05:00
Thomas Harte
ec3cccbb0d
Working towards HQ UEF support: fixed bug whereby writing to tape output would reset input pulse stepper; added support for chunk 0116 and approximate support for 0113.
2016-02-20 22:03:14 -05:00
Thomas Harte
3754cf4bce
Played about with interrupt timing.
2016-02-20 21:24:02 -05:00
Thomas Harte
574985f9a2
Fixed interlaced timing; switched to a more robust detector for horizontal sync; eliminated some test logging.
2016-02-20 20:29:40 -05:00
Thomas Harte
00f414d757
Made an attempt to reintroduce interlacing and screen modes with gaps. Something's wrong with synchronisation though, so most likely I'm outputting a bad signal.
2016-02-20 17:32:51 -05:00
Thomas Harte
da361be3ee
This might be more accurate? Probably not. Who knows?
2016-02-20 00:13:43 -05:00
Thomas Harte
518c134348
Blank lines are missing (if the double negative can be forgiven) but the framebuffer is otherwise seemingly working well again.
2016-02-20 00:11:23 -05:00
Thomas Harte
a3432120f3
Fixed synchronisation — my two fields weren't of equal length, I wasn't breaking calls to the CRT upon 40/80 transitions, I had the wrong maximum run length. Now I just need to put real pixels back in.
2016-02-19 23:57:57 -05:00
Thomas Harte
1954f7bcbd
Got back to a stable image, at least when staying in a mode. Which is what I was trying to fix. Hmmm.
2016-02-19 23:41:09 -05:00
Thomas Harte
dce1649fc5
Commuted some camelCase variables into more standard C++ underscore names; decided the best fix for the graphics output is to break it down into much simpler chunks. output_pixels is currently a placeholder that simply outputs blank so the current effect is that all data is missing but it should be easy enough now to put pixels back in.
2016-02-18 23:23:49 -05:00
Thomas Harte
0b5417ab44
Made an attempt to put interrupts in the correct places regardless of even/odd field.
2016-02-16 20:36:19 -05:00
Thomas Harte
a01f90ff3e
Attempted a switch to the real PAL visible area and to something a bit like a real phosphor decay.
2016-02-14 21:57:23 -05:00
Thomas Harte
7580d192d5
Fixes: now setting correct frame time estimate, properly enabling the timestamp attribute, and ensuring that the Electron flushes screen work at least once per host frame update.
2016-02-14 19:28:02 -05:00
Thomas Harte
7bd237193d
Edged closer towards realistic timing.
2016-02-13 20:52:35 -05:00
Thomas Harte
341fafd3c5
Adjusted visible area.
2016-02-12 19:52:04 -05:00
Thomas Harte
1d20a29d97
Made an attempt to switch to the flywheels for both vertical and horizontal sync, and to act more appropriately for out-of-bounds sync requests. Lots of tweaking to do, I fear.
2016-02-11 23:43:08 -05:00
Thomas Harte
86017de1fb
Fixed field timing. It's 312.5 lines now, closer to the PAL standard.
2016-02-11 22:12:37 -05:00
Thomas Harte
c66409421e
Switched to generating an interlaced output, that apparently being correct. Enabled a poor man's version of phosphor persistence to smooth things out a little. It's not completely unconvincing.
2016-02-10 23:11:25 -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
2e3ba6bbb2
Removed some logging.
2016-02-07 14:42:40 -05:00
Thomas Harte
6ab425deda
There is now a semi-reasonable amount of screen output again.
2016-02-05 21:35:39 -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
adc6838ba0
Continued slow migration of shader ownership to CRT. Attempted to start debugging the tape interface.
2016-01-27 21:35:57 -05:00
Thomas Harte
96c946b8af
Made a very basic attempt to emulate tape output.
2016-01-24 18:20:55 -05:00
Thomas Harte
ace331d4b4
Got a bit higher level in CRT timing specification. Which internally allows it now to infer the colour clock frequency. Which will be helpful momentarily.
2016-01-23 18:53:20 -05:00
Thomas Harte
cd97617a8a
Bumped the speaker up to the full namespace, since Tape lives there to avoid delegation complexity. Turned the CRT into something the Electron statically owns, fixing a memory leak by simplifying.
2016-01-23 17:45:06 -05:00
Thomas Harte
f4cd0aa38e
Ensured that all relevant information is given to the tape class. Made an attempt not to write to a screen output buffer if we don't have one. Added some debug printing.
2016-01-23 13:09:56 -05:00
Thomas Harte
949c33774a
Fixed failure to set a delegate, slowed tape speed if operating in RAM.
2016-01-23 11:42:14 -05:00
Thomas Harte
43a7d1b7ae
It'll be helpful to be able to isolate the tape interface when I'm faking a fast load. So factored out.
2016-01-23 00:14:44 -05:00
Thomas Harte
0efe4b312c
Disabled my various bits of rate interchange debugging; improved test for when to call update_display due to a RAM write.
2016-01-21 22:16:52 -05:00
Thomas Harte
82cb1c365c
Further simplified inner loops.
2016-01-21 21:35:04 -05:00
Thomas Harte
34640cec93
Started trying to move some logic out of the inner loop.
2016-01-21 21:28:09 -05:00
Thomas Harte
48ddd3c497
Set about documenting the CRT; while doing so decided to add an optional clock divider for input; having done so decided to try to exploit it with the Electron.
2016-01-21 21:17:47 -05:00
Thomas Harte
de7218cdf0
Added a lot of commenting to the CPU6502 definition, simplifying its construction. Added missing nullability modifier to CSElectron. Fixed bad-habit Objective-C style naming on the Electron's Interrupt enum.
2016-01-20 21:55:38 -05:00
Thomas Harte
4c16d34063
Moved set_tape so that the inline definition of get_next_tape_pulse is visible to it. Also eliminated some dead typedefs.
2016-01-20 08:27:25 -05:00
Thomas Harte
280a2292ff
Shushed.
2016-01-19 23:33:15 -05:00
Thomas Harte
9036cf3b7c
Thus did the first UEF load.
2016-01-19 23:03:27 -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
956b90e203
Attempted further to improve latency; added view adjustment for non-4:3 output aspect ratios. The 4:3 is currently hardcoded, so further work will be required.
2016-01-18 23:55:52 -05:00
Thomas Harte
e63b6d22ae
As shown by the commented-out code, the aliasing-adaptation seems to be working. So something is wrong somewhere else.
2016-01-14 21:59:37 -05:00
Thomas Harte
383b2be4c6
Fixed one off-by-one error.
2016-01-14 21:33:27 -05:00
Thomas Harte
8bd04a6be4
Switched model for filter subclasses. Implemented test square[-ish] wave to check for obvious stream errors. None is clear.
2016-01-14 21:27:02 -05:00
Thomas Harte
38ffcaa262
Here, at last, is _some_ audio output, at least.
2016-01-14 20:33:22 -05:00
Thomas Harte
439d452e23
Resolved some errors.
2016-01-13 22:11:33 -05:00
Thomas Harte
49e89a4bcb
I'm not yet completely convinced by my approach to time basing, but it'll probably do? If so then this more or less gets me ready for a point-sampled filtering.
2016-01-13 22:02:39 -05:00
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
84ba4e2900
Tidied a little, started working towards supporting speaker output.
2016-01-12 22:19:56 -05:00
Thomas Harte
75d6ec354b
Added some very basic filtering in RGB mode.
2016-01-12 16:27:09 -05:00
Thomas Harte
cba09b5490
Switched display update and RAM write order.
2016-01-11 22:29:16 -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
72019d0ea3
Made an attempt to get video output correct.
2016-01-11 22:08:30 -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
ccf20299a3
Made an attempt at getting some interrupts all up inside this thing.
2016-01-10 19:06:46 -05:00
Thomas Harte
cc5ba8243e
Fixed: turned out the power-on bit was being cleared.
2016-01-10 17:17:39 -05:00
Thomas Harte
d95414b2eb
I'm not really sure what's going wrong with paging yet but this fixes the 0xc000 byte error.
2016-01-10 12:30:24 -05:00
Thomas Harte
e07981c147
Fixed screen start address.
2016-01-09 22:52:08 -05:00
Thomas Harte
1308332a71
Hard-coded to 40 columns of black and white, here's some text, at least.
2016-01-09 22:39:46 -05:00
Thomas Harte
037602765a
This now correctly (I think) decodes information posted to the CRT. But doesn't yet post it correctly. I'm very close now, I hope.
2016-01-09 22:19:00 -05:00
Thomas Harte
07a041d788
Fixed vertical retrace sync.
2016-01-09 21:54:31 -05:00
Thomas Harte
3d6f20b7b9
Output, at last! Though sync is clearly way off.
2016-01-09 21:53:33 -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
7341f5c341
This is intended to be enough to start producing something of an output. But something's obviously still broken.
2016-01-09 20:26:40 -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
8c1bfa5a05
This is the bare minimum to prove that the ROM is trying properly to boot.
2016-01-07 20:36:27 -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
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
675070c5dd
Very, _very_ minor: switched to normal C++ constructor syntax for simple variable initialisation.
2015-12-06 16:53:37 -05:00
Thomas Harte
5d6bee4927
Of course, being in-phase means being the cosine wave.
2015-09-10 21:30:39 -04:00
Thomas Harte
82aa6d074a
'type' is out, at least for the time being.
2015-09-05 20:25:30 -04:00
Thomas Harte
7fb6c86d9d
Okay, it looks like colour 3 is approximately phase offset 0, and the palette wraps around after 14 entries, not 16. Also got a bit less dependent on floating point accuracy for the step.
2015-09-05 17:10:41 -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
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
043d2f9896
It sounds like the two sync signals are exclusive ORd.
2015-08-19 21:36:33 -04:00
Thomas Harte
c5e480cfae
Threw in missile repeats.
2015-08-19 09:46:57 -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
d21ccddeef
Fixed: _vBlankExtend is now cleared at the correct moment.
2015-08-17 17:54:36 -04:00
Thomas Harte
a33d31d02a
Fixed to allow loading of ROMs less than 1kb in size.
2015-08-17 00:34:01 -04:00
Thomas Harte
df68aeff5a
Fixed: made sure that _vBlankExtend resets itself even on non-pixel lines.
2015-08-17 00:09:28 -04:00
Thomas Harte
414849f166
Confirmed: pixel counters are not paused by programmatic vertical blank.
2015-08-16 17:34:20 -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
410c09cb35
Made attempt not to touch the _collisions registers (which are instance variables) unless the local variables imply it's potentially necessary. So that's a broad phase on collisions, I guess.
2015-08-16 15:39:40 -04:00
Thomas Harte
40cb1cf60d
... and the ball graphic.
2015-08-16 11:24:33 -04:00
Thomas Harte
afaa86a649
Minor thing: skip the internal counter stuff if we're definitely going to end up with a transparent pixel anyway for the player and missile graphics.
2015-08-16 11:23:46 -04:00
Thomas Harte
4b5aabdd54
Attempted to take even more out of the inner pixel loop.
2015-08-13 23:23:04 +01:00
Thomas Harte
92c7d56cc3
Tiny little speed improvement. Every little helps.
2015-08-13 21:50:24 +01:00
Thomas Harte
17bbe27c9a
As an experiment, performed some very basic moving of playfield composition outside of the pixel loop.
2015-08-13 21:32:22 +01:00
Thomas Harte
033655835a
My understanding now is that object position counting will begin the cycle after the call is made, not that cycle, and that the timer loops just once, with the logic for counter pumping being whether the relevant flag is still set, irregardless of whether the counter is still going.
2015-08-13 18:59:23 +01:00
Thomas Harte
323aa27e13
Fixed: paging is based directly on the access, independent of the read/write line (since it isn't actually exposed to catridges).
2015-08-13 15:04:30 +01:00
Thomas Harte
9838e01cc1
Made a first attempt at paging.
2015-08-13 13:24:02 +01:00
Thomas Harte
9ca57b80a7
Minor steps to help with diagnostics; all commented out or merely to benefit with breakpoint placement.
2015-08-13 08:43:10 +01:00
Thomas Harte
6616265d93
Fixed collision tests, added a few more timing tests.
2015-08-13 03:33:45 +01:00
Thomas Harte
d19f8ed507
Removed the implicit reset upon 6502 startup, adding a reset line. Hence all tests now pass again. Added an empty shell for timing tests, the all-RAM 6502 now counting bus cycles.
2015-08-13 00:51:06 +01:00
Thomas Harte
687816d470
Made some attempted simplifications, implemented collisions.
2015-08-13 00:31:57 +01:00
Thomas Harte
aebf636528
Ensured the PIA timer resumes its normal tick rate after being read; fixed those spaces that had crept in where tabs should be.
2015-08-10 16:55:16 +01:00
Thomas Harte
42677f5f83
Fixed association of motion registers and actual registers.
2015-08-10 16:43:45 +01:00
Thomas Harte
2dde2efff0
Attempted to standardise object counters.
2015-08-10 15:09:40 +01:00
Thomas Harte
a228969655
This should happen every fourth cycle.
2015-08-10 08:16:17 +01:00
Thomas Harte
3c27306a8e
My counter was going the wrong way.
2015-08-10 00:33:37 +01:00
Thomas Harte
a4e52cc4db
Made an attempt to switch to a hardware-accurate object timer model. Without yet perfect success.
2015-08-10 00:20:18 +01:00
Thomas Harte
cd67e31e64
Made a first attempt at switching a little closer to TIA's real internal counter setup.
2015-08-09 22:47:11 +01:00
Thomas Harte
987be65a59
Made a quick attempt at reimplementing skip-to-the-end logic for ready waits.
2015-08-09 02:42:01 -04: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
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
5f1d76e855
Can't seem to find any documentation: assumed horizontal sync is generated during vertical.
2015-07-31 18:49:02 -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
c1d1fb65cb
Made an attempt properly to emulate the RDY line and the Atari's use of it.
2015-07-31 16:54:20 -04:00
Thomas Harte
53dd5c8f16
Trying to fix my RDY line emulation. Switched to PAL timings, at least temporarily, since it's starting to make a difference.
2015-07-31 16:44:53 -04:00
Thomas Harte
39bfbf1000
Attempted ball graphics enable delay.
2015-07-30 23:01:28 -04:00
Thomas Harte
78e66d2577
Added an attempt at ball rendering.
2015-07-30 21:30:00 -04:00
Thomas Harte
a95b36a53d
Made first attempt at missile display. In Enduro, at least, one seems to work but the other seems to be absent.
2015-07-30 21:09:18 -04:00
Thomas Harte
1b7846f09b
Made a first attempt at the sprite latches. Hopefully this should make a few more Activision logos, etc, show up correctly.
2015-07-30 20:52:26 -04:00
Thomas Harte
1fa7a77793
Continuing in my attempts to figure out the complete absence of graphics from some games: there are 262 lines on an NTSC screen, not 256. Also ensured that the CRT has a little spare range at the edges so that its generated triangles don't wrap around just because of integer overflow.
2015-07-30 20:07:20 -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
14adcd2096
Had a quick bash at timer overflow.
2015-07-30 16:09:32 -04:00
Thomas Harte
58908b60ac
So, provisionally: this looks like (i) the one cycle to write; plus (ii) the number of cycles to get to the end of the pixels (which is _horizontalTimer+1 for me because _horizontalTimer = 0 is a pixel); plus (iii) one cycle of latency to wake up. Am I making that up? Time will tell.
2015-07-30 15:49:38 -04:00
Thomas Harte
f5475369d6
Fixed foreshadowing of sprites yet to come. Put flipMask back the other way around.
2015-07-30 12:07:28 -04:00
Thomas Harte
f653b5dff3
Made a first tentative attempt at supporting all eight sprite modes.
2015-07-30 11:52:28 -04:00
Thomas Harte
151c6b4421
Quick fix: add one cycle to get to the genuine end of the line (i.e. after cycle 0, not on it). Not 3, with the video then becoming desynchronised from the CPU clock.
2015-07-30 00:00:35 -04:00
Thomas Harte
d1ae2caf91
Did the absolute minimum necessary to get some sprites showing in some capacity.
2015-07-29 23:48:52 -04:00
Thomas Harte
23df94d011
Got at least as far as putting a single dot at the player 0 and player 1 positions. Which may or may not be accurate.
2015-07-29 22:37:37 -04:00
Thomas Harte
164866d613
Collapsed two methods into one, to avoid redundant pixel copying.
2015-07-27 22:12:13 -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
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
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
8efd449834
Switched to a down counter and a reset test that remains unconditional but doesn't depend on % (which seems to turn into a big imul-powered deal). Probably pointless mulling around the edges at this point.
2015-07-26 15:45: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
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
d72287a776
Looked up normal retrace time (it's a lot less than 16µs and 26 scanlines — more like 7 and 10) and that the visible portion of a line is defined to start about 12 µs after the start of hsync, put the first two numbers into my CRT to make that more accurate, then derived a newer guess about what the Atari 2600 does for each of its 228 cycles. The text version of a frame is now looking pretty good. So it's probably time to hit OpenGL and the OS X side of things. Though I'll have a quick look to find out whether I can learn the exact real Atari 2600 timings before moving on.
2015-07-23 19:24:25 -04:00
Thomas Harte
529f61caa1
Removed a stray newline.
2015-07-22 20:45:21 -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
a1a1b15d18
Made a quick attempt to accumulate a list of detected output runs. Which means finally having to specify normal frame height. I'm already at too many magic formulae though, so this will need proper revision when I'm next awake. Definitely my horizontal position advancement is way off.
2015-07-20 23:18:56 -04:00
Thomas Harte
4e4c082a05
Made some minor attempt at proper sync response. I think I've gone way off piste and overcomplicated it.
2015-07-19 23:43:22 -04:00
Thomas Harte
4a1e9fe2a8
Rephrased the CRT as owning an arbitrary number of buffers and vending storage space for pixel output. That much better maps to potential implementations of this thing in GLSL, with ES 2.0's limitations kept in mind.
2015-07-19 21:21:34 -04:00
Thomas Harte
4d1e410150
Fix 1: _horizontalTimer should be treated as read only out here.
2015-07-19 16:51:11 -04:00
Thomas Harte
6f78ecdc9c
Made first genuine attempt at outputting a meaningful CRT stream. Which shows some significant errors. So work to do.
2015-07-19 16:48:14 -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
03a25c8ff2
Fixed playfield pixel logic.
2015-07-19 10:56:04 -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
6558ae1425
Imported what little I have so far in the way of a memory-access cycle complete 6502 and just enough of a pretend Atari 2600 on top to be able to see some playfields in ASCII art.
2015-07-16 19:56:02 -04:00