Thomas Harte
90c7056d12
Started devolving timed event loop logic down to the drives, moving them closer to modelling real life.
2017-09-10 14:43:20 -04:00
Thomas Harte
96648df5fe
Ensures all parts of the Electron have a fully-defined initial state.
...
Specifically to resolve an error with shift being pressed at startup due to a failure to establish a default value for that flag, but applying the same principle across the board.
2017-08-31 22:29:24 -04:00
Thomas Harte
ee71be0e7e
Added the option not to include ready line support in the 6502 core, and took advantage of it in the Electron, Oric and Vic-20 implementations. Also tagged those as forceinline and/or override final where applicable.
2017-08-21 21:56:42 -04:00
Thomas Harte
f68565a33f
Split the static analyser functionality so that it's possible just to ask for the set of media implied by a particular file. Extended ConfigurationTarget so that media alone can be pushed to a machine.
2017-08-17 10:48:29 -04:00
Thomas Harte
75208b0762
Moves the Electron implementation behind a more opaque interface, in line with changes elsewhere.
2017-08-16 15:33:40 -04:00
Thomas Harte
42b5b66305
Remove the 6502's use of runtime polymorphism in favour of ordinary templating.
2017-08-16 11:56:52 -04:00
Thomas Harte
bbb17acf3a
Expanded interface so that an external machine caller can request a string be typed without any knowledge of whatever it intends to do re: CharacterMappers. Which is immediately useful in paste functionality.
2017-08-03 11:50:50 -04:00
Thomas Harte
ad3a98387f
Within the Typer
framework: hatched out CharacterMapper
as a distinct thing from the target for keypresses, better to formalise responsibility but also to make it easy cleanly to sever that stuff into its own little part.
2017-08-03 11:42:31 -04:00
Thomas Harte
4abd62e62b
Standardises on const [Half]Cycles
as the thing called and returned, rather than const [Half]Cycles &
as it's explicitly defined to be only one int
in size, so using a reference is overly weighty.
2017-07-27 22:05:29 -04:00
Thomas Harte
968d2bb8ba
Brought Typer
into the new run_for
orthodoxy, making it easier to clock consistently regardless of unit. Which necessitated adding a negative operator for WrappedInts.
2017-07-27 21:53:45 -04:00
Thomas Harte
9ef232157b
Revoked the operator bool() on WrappedInt as providing an indirect means for implicit but incorrect assignment to unwrapped ints. Got explicit about run_for
intention and simplified HalfClockReceiver slightly by building a lossy and a flushing conversion to Cycles into HalfCycles. Adapted the all-RAM Z80 properly to return HalfCycles.
2017-07-27 21:38:50 -04:00
Thomas Harte
8361756dc4
Switched definitively to the works-for-now approach of requiring an explicit opt-in where somebody wants to clock a whole-cycle receiver from a half-cycle clock.
2017-07-27 07:40:02 -04:00
Thomas Harte
cda223ffc0
Added explicit signedness cast.
2017-07-25 22:49:03 -04:00
Thomas Harte
279c369a1f
Switched to Cycles as the result from the 6502 perform_bus_operation
, helping slightly to clarify what you're intended to return and reducing type jumping within the 6502 implementation.
2017-07-25 22:21:09 -04:00
Thomas Harte
296c7cec05
Adopted flush
widely.
2017-07-25 20:42:51 -04:00
Thomas Harte
75d67ee770
Relocated ClockReceiver.hpp as it's a dependency for parts of the static analyser, and therefore needs to be distinct from the actual emulation parts.
2017-07-25 20:20:55 -04:00
Thomas Harte
a1e9a54765
Eliminated redundant uses of ClockReceiver
and sought to ensure that proper run_for
s are inherited all the way down.
2017-07-25 20:09:13 -04:00
Thomas Harte
8d1dacd951
Clean ups along the Electron::Tape line: ensured that the ClockReceiver is opted into only once, and that its run_for
propagates all the way along the chain.
2017-07-25 20:01:30 -04:00
Thomas Harte
40339a12e1
Formalised the use of a cycles count with a divider, bringing a few additional plain-int users into the fold.
2017-07-25 07:15:31 -04:00
Thomas Harte
90bf6565d0
Reduced int/Cycle conversions in the Electron and on the Atari 2600, where the current framework makes it possible to do so.
2017-07-24 22:53:13 -04:00
Thomas Harte
a6e377aa57
The Electron's video is now a ClockReceiver
.
2017-07-24 22:36:42 -04:00
Thomas Harte
915f587ef1
Updated the Electron's tape class to be a ClockReceiver
.
2017-07-24 21:36:30 -04:00
Thomas Harte
b7f88e8f61
Filter
is now a ClockReciever
, affecting all sound output devices.
2017-07-24 21:29:13 -04:00
Thomas Harte
8a2bdb8d22
Converted the TimedEventLoop and the things that sit atop it into ClockReceiver
s.
2017-07-24 21:19:05 -04:00
Thomas Harte
2ff157cf7a
Switched CRTMachine over to use Cycles
as an explicit statement of units, and followed through on the effects of that.
2017-07-22 22:17:29 -04:00
Thomas Harte
83628b285b
Experimentally turned the 6502 into a clock receiver. No problem encountered.
2017-07-22 21:52:21 -04:00
Thomas Harte
dddb30477b
Used a different inner-loop variable, for clarity.
2017-07-21 21:52:08 -04:00
Thomas Harte
3f609e17b3
Factored out the table-lookup approach to being a typer, and adjusted so as definitely to limit myself to positive offset table lookups.
2017-07-21 21:18:51 -04:00
Thomas Harte
b3861ff755
Reduced copying of Pulses.
2017-07-16 19:49:31 -04:00
Thomas Harte
1d3ae31755
Abstracted the concept of an Acorn shifter away from being a PLLParser. The Acorn tape parser now skips using that class and uses the shifter. The actual Electron also uses the shifter. So the two are completely aligned. Net result: the Electron should successfully load exactly when static analysis was successful.
2017-07-16 19:24:01 -04:00
Thomas Harte
481487f084
Oh yuck, it looks like I've repeated this same test in two different places. Must figure out where to factor it out to. But in the meantime, the emulated Electron has just loaded its first CSW.
2017-07-13 22:39:30 -04:00
Thomas Harte
353c854734
Removed a TODO that is no longer appropriate.
2017-07-09 22:06:50 -04:00
Thomas Harte
eb8a2de5d6
Settled definitively on flush
as more communicative than synchronise
(and slightly more locale neutral); culled some more duplication from the Z80.
2017-05-15 07:38:59 -04:00
Thomas Harte
0808e9b6fb
Pulled the 6502 into a CPU namespace, making it an instance of something that has micro-opcodes and schedules them, and factoring out the formulation of a register pair.
2017-05-14 22:08:15 -04:00
Thomas Harte
e01f3f06c8
Completed curly bracket movement.
2017-03-26 14:34:47 -04:00
Thomas Harte
aff69dbc34
Resolved spurious static analyser issue; screen mode will always be 0–6 but it doesn't know that. Setting a non-zero divider doesn't feel worth worrying about for a cleaner compile.
2017-02-11 13:35:22 -05:00
Thomas Harte
f3d9aec8fc
Fixed Electron's support for automatically booting floppy disks.
2017-01-08 14:47:41 -05:00
Thomas Harte
8cd1575891
Similar fix to that over in Oric land: ensure a known, effective initial value for the Plus 3's control register.
2016-12-28 18:52:36 -05:00
Thomas Harte
4fca30b81f
Made the Plus 3 less chatty, documented invalidate_track
.
2016-12-25 21:06:58 -05:00
Thomas Harte
3805e3d17d
Ensured base address is set properly at construction.
2016-12-22 22:46:02 -05:00
Thomas Harte
63107cd492
Tidied, very slightly.
2016-12-15 19:49:25 -05:00
Thomas Harte
a555c5762a
Rearranged code, hopefully into a more logical grouping.
2016-12-15 19:47:04 -05:00
Thomas Harte
4a7ddaf2e9
Added documentation and a quick note to self.
2016-12-15 19:43:04 -05:00
Thomas Harte
f61176cd7d
Reinstituted something of the don't-do-pixel-work-until-an-affecting-write-occurs optimisation.
2016-12-15 19:20:14 -05:00
Thomas Harte
c1c70a767a
Attempted fully to reinstate proper timing.
2016-12-15 18:52:16 -05:00
Thomas Harte
0326316bb8
Reinstated whole-frame counting. Thereby to reinstate proper interrupts.
2016-12-15 18:09:49 -05:00
Thomas Harte
b58b11fc93
Switched to a table-based dispatch of line-by-line actions, primarily to simplify.
2016-12-15 18:07:46 -05:00
Thomas Harte
fd541e1142
An early draft; dealing with the issue that not all cycles are necessarily consumed in a single call. Incomplete; broken. Committing for cross-machine visibility.
2016-12-12 08:01:10 -05:00
Thomas Harte
be7e05e109
Started attempting to move total responsibility for display-related interrupts and RAM timing into the video.
2016-12-11 18:34:49 -05:00
Thomas Harte
c5cf8d9531
Ensured the video subsystem correctly handles requests to run over a frame boundary.
2016-12-11 16:17:51 -05:00
Thomas Harte
52028432e1
Restored some semblance of output.
2016-12-10 22:19:10 -05:00
Thomas Harte
0aae1bd1ef
Fixed calculation of termination cycle.
2016-12-10 21:35:41 -05:00
Thomas Harte
c43e481a33
Started factoring video out of the Electron.
2016-12-10 21:07:52 -05:00
Thomas Harte
a549fd1ecc
Introduced the ability simply to piggy-back off the CRT's natural phase for the colour burst, thereby eliminating a couple of redundant independent attempts in the Oric and Electron.
2016-12-10 13:42:34 -05:00
Thomas Harte
eb3a1fbfb7
Commuted remaining Electron underscores. It would be nice also to factor out the video, but the time hasn't come yet.
2016-12-03 13:01:01 -05:00
Thomas Harte
4fac538a57
Factored out the Electron's speaker and adjusted instance variable naming.
2016-12-03 12:41:02 -05:00
Thomas Harte
d1d93829cf
Factored out the Tape and switched it to postfix underscores.
2016-12-03 12:18:08 -05:00
Thomas Harte
2003b514aa
Switched the typer to postfix underscores.
2016-12-03 10:55:50 -05:00
Thomas Harte
2f459690d4
It would appear the 1770 and 1773 actually differ in relation to the (non-sensical) ability not to spin-up for a Type 2, and whether a side compare can occur. So the WD1770 class now requires a personality to be specified. Which it singly fails to honour.
2016-11-26 23:29:30 +08:00
Thomas Harte
09f965e6a9
Fixed potential bug whereby inserting a disk into a drive that hadn't been lazily allocated yet but had already been selected wouldn't take effect.
2016-11-22 08:11:57 +08:00
Thomas Harte
311f8c0b47
Restored audio.
2016-11-16 11:10:07 +08: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
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
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
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
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
ee8510984f
Added just enough wiring to restore the 2600 to functionality.
2016-09-15 19:34:45 -04:00
Thomas Harte
8c84f3581a
Attempted to bring some uniformity in application of configurations.
2016-09-08 05:32:17 -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
c0402d0c2b
Gave tapes their own namespace.
2016-08-27 17:09:45 -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
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
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
88964ceac0
Eliminated plain pointer passing for object types.
2016-07-04 19:33:55 -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
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
2bd71e7e9b
.reset
is the more normal way to reassign a unique_ptr
.
2016-06-23 20:52:44 -04:00
Thomas Harte
b6dd38dad3
Corrected type safety warning.
2016-06-19 21:41:01 -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
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
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
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
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
9b64f64db7
Attempted to normalise some style decisions.`
2016-04-24 22:32:24 -04:00
Thomas Harte
d221c712b0
Ensured GL context is active when destructing CRTOpenGL.
2016-04-24 20:34:25 -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