Thomas Harte
a42ca290cb
Reformulates the Oric more cleanly into the modern world.
...
Specifically: now that the implementation is contained within the CPP file, there's no need to embed the keyboard, tape player and VIA port handler as private classes. Also the pain of additional syntax is reduced, so the keyboard has been bumped up to a fully data-hiding class. I've also transferred overall ownership of the tape player, AY and keyboard up to the Oric itself, with the VIA merely being wired to them, and added a whole bunch of extra documentation.
2017-09-04 18:22:14 -04:00
Thomas Harte
da09098e49
Updates clipped area per latest CRT response to vertical sync.
2017-09-04 17:51:02 -04:00
Thomas Harte
24b3faa427
Deconstitutes the 6522 into component parts, templated and non-templated.
...
Adjusts the Oric, Vic-20 and C-1540 accordingly, albeit with the quickest possible solutions.
2017-09-04 14:26:04 -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
148591b7f2
Hid most of the Oric innards, and corrected a potential multi-thread access error emanating from the Mac side of the world.
2017-08-16 14:35:53 -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
3947347d88
Introduces active input handling for the AY and uses it in the CPC to give proper, active keyboard input, rather than push-on-select, which was only ever a temporary hack. Also maps a few more keys for the Amstrad.
2017-08-15 22:47:17 -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
e6854ff8db
Corrected typo: the input to an AY is BDIR, not BCDIR.
2017-08-01 17:06:57 -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
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
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
c1527cc9e2
Reduced back-and-forth between Cycles
and int
s within the Oric.
2017-07-24 22:46:31 -04:00
Thomas Harte
efdac2ce8c
The 6522 is now a ClockReceiver
.
2017-07-24 22:29:09 -04:00
Thomas Harte
55ecb0c022
Converted the Microdisc into a ClockReceiver
.
2017-07-24 21:51:13 -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
b82bef95f3
Decided to follow through on Cycles
and HalfCycles
as complete integer-alikes. Which means giving them the interesting range of operators. Also killed the implicit conversion to int as likely to lead to type confusion.
2017-07-24 20:10:05 -04:00
Thomas Harte
6369138bd1
Converted the Oric's video output into a ClockReceiver
.
2017-07-22 23:11:30 -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
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
52d9ddf9e5
Gave the binary tape player a more logical assignment of wave level to output level. Which miraculously appears to have been the issue with the ZX80/81 tape loading — the inconsistency of silences seems to have been the issue.
2017-06-21 22:13:24 -04:00
Thomas Harte
2562306802
Merge branch 'master' into Z80
2017-05-16 21:05:00 -04:00
Thomas Harte
a5075d9eb5
Formalised the reasoning behind the colour phase fix-up and made it an opt-in per-caller value. Only the Oric currently needs to opt in.
2017-05-16 20:31:39 -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
90151e2094
Fixed to ensure a known initial control register value, which has taken effect.
2016-12-28 18:49:32 -05:00
Thomas Harte
a568172758
Made steps towards proper CRC generation. Am currently comparing against Oric disk images, as — amongst other things — they include precomputed CRCs.
2016-12-28 18:29:37 -05:00
Thomas Harte
e62be03673
Removed endianness assumption.
2016-12-10 19:10:33 -05:00
Thomas Harte
a5683dfb21
Removed now untrue comment.
2016-12-10 15:19:48 -05:00
Thomas Harte
0e71802b92
Reduced Oric video to single nibble constants. Removed attempt at asynchronous flush as no longer required.
2016-12-10 14:17:46 -05:00
Thomas Harte
580f347727
Fixed Oric SCART mode by having it change what it's giving to the CRT based on which shader it knows will be active.
2016-12-10 13:55:56 -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
6cdd41e5a9
Added direct use of the colour ROM, uploading 16 bits per pixel to contain the entire ROM composite wave.
2016-12-09 22:17:10 -05:00
Thomas Harte
3b5962b171
This is an initial attempt at using the actual Oric colour ROM values for composite video generation.
2016-12-09 20:01:27 -05:00
Thomas Harte
c304db0f5a
Deintegrated the busy flag and the interrupt request line, as the latter is reset by status reads. Which also means I can start reporting the WD INTRQ line status directly from the Microdisc. That appears to be correct, rather than honouring the Microdisc IRQ select there.
2016-12-06 21:16:29 -05:00
Thomas Harte
2003b514aa
Switched the typer to postfix underscores.
2016-12-03 10:55:50 -05:00
Thomas Harte
81ee834530
As well as a bunch of logging, reinstated rotation position preservation across tracks.
2016-12-02 18:36:47 -05:00
Thomas Harte
93c573bfa9
Implemented missing status bits (other than the index hole), and a head loading delay for the Microdisc.
2016-12-01 21:13:16 -05:00
Thomas Harte
442986ee2c
Introduced a head loading path for 1793 machines.
2016-12-01 20:12:22 -05:00
Thomas Harte
82899f2f47
Ensured flag setting is atomic, removed duplication of interrupt request versus busy, found better names for the personality testers, unified delegate protocol.
2016-12-01 07:41:52 -05:00
Thomas Harte
9b6c5e814a
Now that it can be more explicit, this should admit that it's '93-based, not '73.
2016-11-28 16:22:35 -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
e9d6566e9c
Of course, changing the IRQ enable may immediately change the IRQ line. Signal if so.
2016-11-26 09:35:44 +08:00
Thomas Harte
73d30b9c00
Corrected typo.
2016-11-25 21:30:45 +08:00
Thomas Harte
12956901d6
Filled in some register mirrors.
2016-11-25 21:28:11 +08:00
Thomas Harte
54246c8f1a
Interrupt enabling works the other way around I think, and both registers with only one bit defined should probably return '1' in all other places?
2016-11-25 21:24:59 +08:00
Thomas Harte
8be81f6ebd
Supplied disks are given to the Microdisc.
2016-11-25 20:53:38 +08:00
Thomas Harte
4af678d2ed
Gave the Microdisc a clock signal, added just enough of force interrupt to avoid a spurious belief that a type 3 command has started.
2016-11-25 20:51:39 +08:00
Thomas Harte
5c019ad1c0
Okay, so it looks like both ROM paging flags are the opposite of what I previously had.
2016-11-25 20:42:40 +08:00
Thomas Harte
5be45c6c50
Ensured proper default behaviour.
2016-11-25 20:30:27 +08:00
Thomas Harte
d33f3b9224
This is the broad strokes effort at enabling Microdisc emulation.
2016-11-25 20:15:48 +08:00
Thomas Harte
7c2d9f3752
This seems to be right, per http://wiki.defence-force.org/doku.php?id=oric:hardware:floppy_disk_controller_wd1793
2016-11-22 22:35:43 +08:00
Thomas Harte
5ebc1c63ff
Switched video to postfix underscores, for consistency.
2016-11-22 22:28:45 +08:00
Thomas Harte
707763f80b
Added Microdisc storage to the Oric class, switching all instance storage to postfix underscore while I'm here.
2016-11-22 22:22:00 +08:00
Thomas Harte
0c3644f350
Made a second parse at logic. We'll see.
2016-11-22 22:12:32 +08:00
Thomas Harte
03843bf934
Unified delegates. Let's keep it easy for the caller.
2016-11-22 22:11:11 +08:00
Thomas Harte
13a608a8c2
Added what may be correct paging logic.
2016-11-22 22:09:52 +08:00
Thomas Harte
363db695e8
Started implementation of the Microdisc selection logic.
2016-11-22 08:12:53 +08:00
Thomas Harte
ea33a28695
Any Oric-format disks that are inserted now make it all the way to the Oric, along with a request to emulate the Microdisc. It has received a copy of the ROM. The ball is entirely in its court now.
2016-11-21 20:59:25 +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
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
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