Thomas Harte
d83178f29d
Makes an attempt at implementing all missing TZX 1.20 blocks.
...
Towards that aim, simplifies CSW handling so that even regular RLE compression uses a static grab of file contents.
2018-02-22 21:28:12 -05:00
Thomas Harte
21efb32b6f
Integrates the static and nascent dynamic analyser namespaces.
2018-01-24 21:48:44 -05:00
Thomas Harte
def82cba49
Makes MSX tape parsing more tolerant to phase.
...
Also reintroduces proper file type association for TSX on the Mac.
2018-01-10 21:54:15 -05:00
Thomas Harte
98a9d57c0b
Imputes the alignment requirement for CAS headers.
...
Also stops adding a spurious 0xff as the final byte on the tape.
2017-12-29 10:42:18 -05:00
Thomas Harte
c481293aca
Liberalises CAS interpretation.
...
It seems to be an even weirder file format than I thought; it can contain only ROM-formatted data but seemingly often contains blobs that the ROM cannot write.
2017-12-29 09:56:58 -05:00
Thomas Harte
5fd0a2b9ea
Attempts to pull reimplementations of TAPION and TAPIN better into line with originals.
...
Also improves whole flow of the fast tape hack that uses them.
2017-12-28 22:48:04 -05:00
Thomas Harte
c4950574ea
Introduces an attempted reimplementation of the MSX BIOS's two main tape reading entry points.
2017-12-26 22:19:37 -05:00
Thomas Harte
0b297f2972
Adds some appropriate costs to the tape players.
2017-12-26 22:13:28 -05:00
Thomas Harte
cbba6a5595
Ensures final few bytes of a CAS file aren't dropped.
2017-12-23 19:54:42 -05:00
Thomas Harte
0a079b0f94
Attempts to fix failure to distinguish end-of-file.
2017-12-23 19:32:24 -05:00
Thomas Harte
9a7e974579
Corrects skipping of every other file, and transition from bytes back into header.
2017-12-23 19:20:04 -05:00
Thomas Harte
f4d414d6e4
Removes stray line break.
2017-12-23 18:42:04 -05:00
Thomas Harte
b4bfcd4279
Switches to an attempt to break the .CAS into files ahead of time.
...
Hopefully the better to insert appropriate lengths of header and gap.
2017-12-23 18:41:50 -05:00
Thomas Harte
e8ddff0ee0
Makes a first, messy, attempt at serialising CAS files into audio.
2017-12-21 22:34:03 -05:00
Thomas Harte
28fb1ce2ae
Removes unnecessary logging.
2017-12-20 21:39:17 -05:00
Thomas Harte
0bb24075b6
Immediate fixes: TSX is seemingly TZX 1.21; the tape motor control works the other way around.
...
Input is not yet being recognised.
2017-12-19 22:17:42 -05:00
Thomas Harte
db6d9b59d0
Attempts to implement TSX support for the MSX.
2017-12-19 21:53:04 -05:00
Thomas Harte
68a2895753
Adds enough static analyser to get to the MSX itself as the point of failure in SDL/kiosk mode.
2017-11-25 13:18:24 -05:00
Thomas Harte
792061a82b
Corrects warnings in the CSW, CPC DSK, ZX8081 data encoding, and PRG and binary cartridges.
2017-11-12 17:46:06 -05:00
Thomas Harte
282e5c9d3e
For GCC's benefit, added impossible default options.
2017-11-12 16:45:31 -05:00
Thomas Harte
ede47d4ba7
Improves type safety within CSW file support.
2017-11-12 16:42:53 -05:00
Thomas Harte
5aef81cf24
Commutes cross-platform #pragma mark
s to //MARK:
s.
2017-11-12 15:59:11 -05:00
Thomas Harte
2e15fab651
Doubles down on <cX> over <X.h> for C includes, and usage of the namespace for those types and functions.
2017-11-11 15:28:40 -05:00
Thomas Harte
cb0f58ab7a
Corrects order-of-initialisation errors in the CPC (again), TextureBuilder, TextureTarget, Z80, MFM parser and binary tape player.
2017-11-10 22:57:03 -05:00
Thomas Harte
d9e56711ce
Corrects order-of-initialisation errors in the Amstrad CPC, Vic-20, Oric, Commodore File, MFM disk controller, UEF and Commodore tape parser.
2017-11-10 22:47:10 -05:00
Thomas Harte
46e7c199b2
Corrects improper initialisation order of the Commodore .tap and CRTMachine::Machine.
2017-11-10 22:08:40 -05:00
Thomas Harte
fabaf4e607
Adds missing include files, corrects bad include paths and eliminates the Clang-specific __undefined
.
2017-11-10 21:56:53 -05:00
Thomas Harte
cb015c83e1
Eliminated C99-style struct initialisations.
2017-11-10 19:14:19 -05:00
Thomas Harte
2203499215
Enables -Wreorder and corrects a few of the more trivial fixes thereby suggested.
2017-11-09 22:14:22 -05:00
Thomas Harte
6e1d69581c
Eliminates a variety of end-of-line spaces.
2017-11-07 22:54:22 -05:00
Thomas Harte
f95515ae81
Eliminates a large number of instance of end-of-line tabs.
2017-11-07 22:51:06 -05:00
Thomas Harte
e384c50580
Switches FileHolder to have a usage much closer to FILE *.
...
Thereby opens a route for file format implementations such as that appearing for CPC DSK that create an in-memory copy and perform a full rewrite.
2017-11-02 22:32:00 -04:00
Thomas Harte
ad9df4bb90
Commutes uint8_t *
, uint16_t *
, uint32_t *
, size_t
, off_t
and long
to functional-style casts.
2017-10-21 22:30:15 -04:00
Thomas Harte
e983854e71
Converts all uint8_t
and uint16_t
casts to the functional style.
2017-10-21 21:50:53 -04:00
Thomas Harte
ec999446e8
Commutes int
and unsigned
casts to the functional style.
2017-10-21 21:00:40 -04:00
Thomas Harte
5e3e91373a
Switches all unsigned int
and double
casts to functional style.
2017-10-21 19:49:04 -04:00
Thomas Harte
7c8e830b90
Adjusted the Acorn tape parser to avoid signed left shifts.
2017-10-17 22:34:49 -04:00
Thomas Harte
edb9fd301c
Begins this project's conversion to functional-style casts.
2017-10-03 22:04:15 -04:00
Thomas Harte
698e4fe550
Tidies the Disk
file hierarchy.
2017-09-22 22:39:23 -04:00
Thomas Harte
a3e2d142e3
Extends UEF support to include chunk 0005, the target platform description, which is exposed via TargetPlatform::TypeDistinguisher
.
2017-08-27 15:43:09 -04:00
Thomas Harte
56dd677e9c
Creates a virtual interface that can be adopted by classes that are able to provide some insight as to target machine.
2017-08-27 15:19:03 -04:00
Thomas Harte
0cbc1753b9
Quick fixes: the binary tape player now considers talk to the sleep observer only if motor control changes. The Amstrad CPC no longer attempts to use the component argument to identify the caller, since this
will often be that of the superclass and not that of the derived class known to the CPC.
2017-08-20 13:18:46 -04:00
Thomas Harte
8fdc5012e4
Updated TapePlayer
and BinaryTapePlayer
to be sleepers.
2017-08-20 12:18:36 -04:00
Thomas Harte
a3b16b6dfa
Further beefs up the list of chunks that this TZX parser can either comprehend or skip.
2017-08-03 12:13:41 -04:00
Thomas Harte
2d2cefb0b0
Adjusted factoring to introduce support for block 10.
2017-08-02 14:36:47 -04:00
Thomas Harte
2fd071e45d
Made an honest attempt at outputting turbo speed data block data. The CPC now at least starts to load.
2017-08-02 14:24:34 -04:00
Thomas Harte
d7a5c3f49a
Added support for the ID 20 block and fixed a minor error in my skip-the-contents version of block 11: length is three bytes long, not two. This gives me enough structure properly to get to the end of my current test CDT, albeit without making any of the noises.
2017-08-02 14:12:34 -04:00
Thomas Harte
819761f9fb
Fixed another uninitialised pointer.
2017-08-02 13:56:35 -04:00
Thomas Harte
9d953421d8
After a quick check, added a couple of other _delegate initialisations. I should probably find a way to template this.
2017-08-01 07:07:43 -04:00
Thomas Harte
4b5e9ffb83
Ensured is_at_end_
is initially cleared by default.
2017-07-27 22:22:43 -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
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
8a2bdb8d22
Converted the TimedEventLoop and the things that sit atop it into ClockReceiver
s.
2017-07-24 21:19:05 -04:00
Thomas Harte
b3ae920746
Converted the DPLL and disk controller classes to be ClockReceiver
s.
2017-07-24 21:04:47 -04:00
Thomas Harte
6633537fb8
Discovering that there is such a thing as P81 — a ZX81 file without the name omitted — added support for it. Extended FileHolder while I was here to retain the file name and be able to supply its extension, as my quick-fix test-the-last-character approach to o/p/80/81 discrimination stops working with p81 thrown into the mix and this feels like the correct factoring.
2017-07-22 16:02:25 -04:00
Thomas Harte
313b36944f
Ensured that the final bit of a tape isn't dropped even if the tape ends exactly after it, by not posting a false pulse, being less restrictive about what can cap a bit, and in any case using a long gap as the end-of-file bookend.
2017-07-22 15:41:33 -04:00
Thomas Harte
456fdda6c2
Ensured that the mark_end step can't overwrite another recognised symbol.
2017-07-22 15:40:22 -04:00
Thomas Harte
64865b3f41
Signedness fixes.
2017-07-21 21:23:34 -04:00
Thomas Harte
2d8e7e9f8b
Removed reference to a parameter long-since dead.
2017-07-21 20:46:25 -04:00
Thomas Harte
a026998682
Marginally optimised set_offset
to avoid reset
s when possible.
2017-07-21 20:43:20 -04:00
Thomas Harte
06ea81fdb2
Made sure that unrecognised waves don't block the symbol queue, and allowed any type of nonsense to be skipped before finding a byte.
2017-07-21 20:23:26 -04:00
Thomas Harte
d69b1e2d11
Switched parsing logic to looking only for upward zero crossings, that being my new understanding of the ROM.
2017-07-21 19:39:38 -04:00
Thomas Harte
a3e0024980
Chopped time accumulation out of the default Tape
process because it's proving to be sufficiently expensive for a TZX as not to be worthwhile. Introduced a cheaper position capturing/restoring method.
2017-07-21 18:55:03 -04:00
Thomas Harte
d9a2c32aca
Made an attempt to obey the proper TZX rules on gaps, and to hit the common-clock-rate Time
optimisation.
2017-07-21 18:21:12 -04:00
Thomas Harte
70af075012
Determined what appears to be an appropriate workaround for the ZX81 TZX that I've managed to obtain.
2017-07-19 21:28:33 -04:00
Thomas Harte
c8cee88e33
Ensured that a stopped tape outputs a false
level and took an extra safety check in instantiation.
2017-07-18 22:49:11 -04:00
Thomas Harte
35296017b5
Clarified meaning of is_high_ flag and ensured it is honoured properly.
2017-07-17 21:36:05 -04:00
Thomas Harte
130d598ec9
Corrected some minor out-of-style breaks, and ensured that the name of ZX81 files is returned.
2017-07-17 19:52:54 -04:00
Thomas Harte
0350925c1e
Started sketching out greater support. Mostly TODOs right now, but pulse sequence and pure tone are implemented. I probably also need at least the CSW block to hit everything you might see in a ZX80 or ZX81 tape. Then I can worry about the rest when I have a way to test them.
2017-07-17 19:38:15 -04:00
Thomas Harte
94e3dd0d4f
Merge branch 'master' into TZX
2017-07-17 19:07:05 -04:00
Thomas Harte
eafdd7dbd7
Corrected decompressed size expectations: it may be up to five times the size of the number of waves, as waves are up to five bytes in length.
2017-07-17 19:04:25 -04:00
Thomas Harte
127b584e79
Ensured that resetting a TZX resets the is-at-end flag.
2017-07-17 07:52:28 -04:00
Thomas Harte
2179edc7fe
Adjusted to allow the very first thing found to be data, and ensured that unrecognised symbols break files just as gaps do.
2017-07-17 07:43:47 -04:00
Thomas Harte
9108495586
Added a safety seek.
2017-07-17 07:35:53 -04:00
Thomas Harte
fa617eac6b
Spotted that pilot and data segments have different encodings — of course! — and attempted to adapt.
2017-07-17 07:34:10 -04:00
Thomas Harte
b63971caf7
Took a first, incorrect, shot at TZX chunk 0x19, the generalised data block.
2017-07-16 22:40:38 -04:00
Thomas Harte
7327da6350
Switched the nascent TZX
to use the new PulseQueuedTape
.
2017-07-16 22:06:56 -04:00
Thomas Harte
8f72fc4a44
Factored out from the UEF implementation the concept of being a tape that has a queue of pending pulses and manages that queue.
2017-07-16 22:04:40 -04:00
Thomas Harte
238348c885
Performed the initial wiring to announce that this application supports TZX files and to route them to the ZX80/81 static analyser. The TZX class itself does not yet do much beyond basic validation. I think it'll be easiest if it follows in UEF's footsteps in queuing up pulses ahead of time, so some factoring out is now required.
2017-07-16 21:33:11 -04:00
Thomas Harte
b3861ff755
Reduced copying of Pulses.
2017-07-16 19:49:31 -04:00
Thomas Harte
c2bc34fd87
Eliminated the PLLParser class. I think the proper abstraction if and when another machine requires PLL-esque parsing is probably to template out the Acorn wiring of a PLL to a Parser, and/or generalise the Acorn shifter. It'll be easier to decide when the time comes.
2017-07-16 19:25:26 -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
e5188a60dc
Settled on the new average-of-length approach to a PLL window sizing, eliminating the old errors-of-phase approach. Since it anchors automatically to the original target clocks per bit, killed the explicit mention of a tolerance.
2017-07-16 19:03:50 -04:00
Thomas Harte
e71d13c090
With the new PLL implementation, switching to a deeper window size returns the Acorn tape parser to: working.
2017-07-16 17:12:12 -04:00
Thomas Harte
c8575fe6e0
Mild clean ups, and a tweak to permitted top and bottom phase.
2017-07-16 13:39:08 -04:00
Thomas Harte
253f9603ed
Split the normal tape parser class into two in order to add a new option: a PLL-driven tape parser. Decided to see what happens if I attempt to use that to parse CSW Acorn data.
2017-07-15 19:07:35 -04:00
Thomas Harte
b743566339
Corrected under-request of data: was erroneously supplying the size of input as the expected size of output.
2017-07-15 15:19:03 -04:00
Thomas Harte
648618d280
Tweaked bit timing decision.
2017-07-13 21:26:05 -04:00
Thomas Harte
ae1a130843
Fixed: length of 0 is a special case.
2017-07-13 20:57:27 -04:00
Thomas Harte
f09fe30af5
Attempted a full implementation of CSW. All in memory for now.
2017-07-12 21:23:59 -04:00
Thomas Harte
33eadb5549
Started taking further steps towards CSW support; reading the ZLib documentation is next.
2017-07-11 22:41:10 -04:00
Thomas Harte
368bff1a82
Added a shell class that will one day be able to parse CSW files, plus the logic and metadata to instantiate it when a CSW presents itself.
2017-07-10 21:43:58 -04:00
Thomas Harte
bcb7c27cc4
Given that I'm not racing this any more, turned the intended 1 second back into 1 second.
2017-07-08 19:21:33 -04:00
Thomas Harte
2f42874fd3
Another fix to deal with real-time fighting: allow 8 and 18 pulses to be recognised as 1s and 0s. That's because the hand-off from ROM routines to parsing may occur very shortly before the first pulse of a valid sequence, making it look like there's a ghost. A cleaner solution needs to be found, probably revolving around allowing parsers to be attached to tapes and therefore to run constantly.
2017-07-06 22:33:03 -04:00
Thomas Harte
84d0e9b4cd
Accept a pulse that begins exactly on seek_time as being found while seeking.
2017-07-06 22:31:45 -04:00
Thomas Harte
a53011f778
Extended intro and outro length because right now I'm racing this myself. Can return to normal once tape motor control is implemented.
2017-07-06 22:31:12 -04:00
Thomas Harte
919fc48cc5
Fixed dumb out-of-bounds access error.
2017-06-22 22:28:50 -04:00