Thomas Harte
|
45ec5f8eab
|
Eliminated implicit sign conversion.
|
2017-07-21 21:53:27 -04:00 |
|
Thomas Harte
|
1d01acce06
|
Fixed differing types of loop variables and targets.
|
2017-07-21 21:53:05 -04:00 |
|
Thomas Harte
|
6d5807ec4b
|
Fixed sign and ensured that the DataFromString implementation is of the thing declared in the header.
|
2017-07-21 21:24:28 -04:00 |
|
Thomas Harte
|
64865b3f41
|
Signedness fixes.
|
2017-07-21 21:23:34 -04:00 |
|
Thomas Harte
|
163c0f1b44
|
Ensured offset means exactly one thing.
|
2017-07-21 20:58:17 -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
|
e152ed2e61
|
Made an attempt to avoid GCD costs when accumulating Time s with a common clock rate (/divisor).
|
2017-07-21 18:20:27 -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
|
51177e4e1f
|
Attempted a different implementation of the PLL, that responds to changes only once.
|
2017-07-16 16:49:04 -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
|
4489f120f9
|
Eliminated foolish double indirection on phase history.
|
2017-07-15 22:40:38 -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
|
33d16ae0cd
|
Fixes: individual static analysers reset tapes, for potential successors. The ZX81 file analyser no longer overruns its buffer upon receiving a file that is shorter than 11 bytes.
|
2017-07-12 21:34:08 -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
|
d853841dd5
|
Further lightened up my file-is-ZX81 check.
|
2017-07-10 20:44:13 -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 |
|
Thomas Harte
|
87ee8450fe
|
Minor rejig: it's much more likely that something that can't be distinguished is a ZX81 program. TODO: some sort of BASIC token parsing, to be more confident.
|
2017-06-22 20:23:14 -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
|
e6e6e4e62b
|
Adds an extra character for padding the ZX81 table.
|
2017-06-12 22:08:11 -04:00 |
|
Thomas Harte
|
626737b9fa
|
Started mucking about with some string conversion routines. Not finished yet.
|
2017-06-12 21:32:36 -04:00 |
|
Thomas Harte
|
22de481557
|
Made an attempt to get .p/.80 checked and as far as the emulated machine.
|
2017-06-12 19:41:59 -04:00 |
|
Thomas Harte
|
77aa3c187e
|
Rebranded ZX80O as ZX80O81P, with an eye to making it accept ZX81 .p files. Adjusted the initial selection part of the static analyser appropriately.
|
2017-06-11 21:38:32 -04:00 |
|
Thomas Harte
|
ee0283c985
|
Modified to use an in-memory buffer for file contents.
|
2017-06-11 21:35:09 -04:00 |
|
Thomas Harte
|
2c6414ce11
|
Adjusted to allow inspect_waves to swallow a gap before a bit if necessary, increasing the opportunities for its call.
|
2017-06-11 18:31:09 -04:00 |
|
Thomas Harte
|
e5aea632ee
|
Updated curly bracket placement.
|
2017-06-11 17:29:22 -04:00 |
|
Thomas Harte
|
c2bc9a8c62
|
Ensured no namespace collision in double-include guards.
|
2017-06-11 16:41:15 -04:00 |
|
Thomas Harte
|
256ba4028b
|
Rejigged to eliminate semi-duplication of the is-a-file test.
|
2017-06-08 21:52:13 -04:00 |
|
Thomas Harte
|
b07af2660d
|
Adjusted to make sure that the very end of a tape is properly measured.
|
2017-06-08 21:33:35 -04:00 |
|
Thomas Harte
|
bc0d70b2f7
|
Added: a shout-out when the tape has been exhausted.
|
2017-06-08 21:32:27 -04:00 |
|
Thomas Harte
|
c6e48dfd56
|
Given that a final gap is semantically part of describing tape contents, ensured one formally appears before declaring that the tape has ended.
|
2017-06-08 21:31:54 -04:00 |
|
Thomas Harte
|
c775db50ef
|
Ensured no out-of-bounds accesses.
|
2017-06-08 21:31:03 -04:00 |
|
Thomas Harte
|
ee4c8b5ad2
|
Ensured final byte plays out.
|
2017-06-08 19:51:49 -04:00 |
|
Thomas Harte
|
d8b76e31c3
|
Added and improved the is-this-ZX80-stuff test. It seems some bytes are going missing in the to->from tape conversion.
|
2017-06-08 19:49:18 -04:00 |
|
Thomas Harte
|
7e10c7f9d8
|
Relocated the ZX80/81 concept of a 'file' out from Tape into Data, given that it's an exact duplicate of memory.
|
2017-06-08 19:09:51 -04:00 |
|
Thomas Harte
|
c47128f433
|
Widened tolerances and ensured zero bits aren't prematurely discarded.
|
2017-06-07 17:50:03 -04:00 |
|
Thomas Harte
|
8aab9acc10
|
Eliminated use of the zero level; now definitively returns a low/high input.
|
2017-06-07 17:39:29 -04:00 |
|
Thomas Harte
|
dbd2944c13
|
Took an initial run at the ZX80/81 parser.
|
2017-06-07 17:27:05 -04:00 |
|
Thomas Harte
|
4603fa6f24
|
Extended explicitly to support a token of lookahead, which is pretty much what was on offer anyway. Also corrected instance variable names, as per better adoption of C++ norms.
|
2017-06-07 17:21:57 -04:00 |
|
Thomas Harte
|
60300851ea
|
Started sketching out a tape parser for ZX80 and '81 files. I think this'll help me to verify whether the .O input is working.
|
2017-06-07 10:12:13 -04:00 |
|
Thomas Harte
|
58312ea2b7
|
Updated to new standardisation on curly bracket placement.
|
2017-06-07 10:05:43 -04:00 |
|
Thomas Harte
|
cb534d8b85
|
Corrected comment.
|
2017-06-07 10:05:16 -04:00 |
|
Thomas Harte
|
4677cebf40
|
Rejigged to correct: spaces go after bits, not after bytes.
|
2017-06-06 18:29:15 -04:00 |
|
Thomas Harte
|
7399f3d798
|
Caveman debugging in place, it looks like this file is returning nonsense.
|
2017-06-06 18:18:55 -04:00 |
|
Thomas Harte
|
faeecf7665
|
Made sure that there's nothing but silence at the end of the tape, even if the .O file is too long.
|
2017-06-06 18:16:47 -04:00 |
|
Thomas Harte
|
8c1769f157
|
Made a quick attempt at serialising from ZX80 .O to waves.
|
2017-06-04 16:59:26 -04:00 |
|
Thomas Harte
|
655809517c
|
Ensured that there is a subclass of file that is entrusted to load .O/.80 files, and that the code routes such files to it, noting that it should consider whether a ZX80 is required.
|
2017-06-04 16:37:03 -04:00 |
|
Thomas Harte
|
5d91a2600d
|
Permitted ROM-style PRGs that are not a power-of-two in size, and added extra safety checks on loading data from a tape.
|
2017-05-08 22:15:35 -04:00 |
|
Thomas Harte
|
2807e3134f
|
Implemented speedy header finding. So that's half of it.
|
2017-05-07 20:32:48 -04:00 |
|
Thomas Harte
|
e01f3f06c8
|
Completed curly bracket movement.
|
2017-03-26 14:34:47 -04:00 |
|
Thomas Harte
|
f94f34f053
|
Made an attempt at read track. Which means process_input_bit can't just swallow syncs any more; it now reports them as tokens of type ::Sync.
|
2017-01-01 20:39:19 -05:00 |
|
Thomas Harte
|
b3c33d993a
|
Made an attempt to explain the requirements placed upon Disk subclasses that wish to support writing.
|
2016-12-31 15:30:48 -05:00 |
|
Thomas Harte
|
8eb21c6702
|
The "MFM...Byte"s aren't MFM-specific, they're relevant to both FM and MFM encoding. So renamed them. Also slimmed syntax within MFM.cpp mostly where emigration from the Acorn disk analyser had left a residue of lengthy namespace specification.
|
2016-12-31 15:25:11 -05:00 |
|
Thomas Harte
|
52b850a3f5
|
Quick extra: make sure parsed tracks don't overflow the 6400 byte space available in an MFM disk. Which might be better expressed as 6250?
|
2016-12-31 12:51:52 -05:00 |
|
Thomas Harte
|
cfbab1448c
|
Switched to a track parsing that disallows synchronisation values within sector contents.
|
2016-12-31 12:23:08 -05:00 |
|
Thomas Harte
|
12549ff412
|
Might as well get the file offset before entering the critical section; also moved the lock guard down more explicitly to group with the second set of actions.
|
2016-12-31 11:48:46 -05:00 |
|
Thomas Harte
|
6f0b5427e4
|
Made an attempt to avoid repetition of sync bytes.
|
2016-12-31 00:20:00 -05:00 |
|
Thomas Harte
|
0123b37213
|
Made an attempt to include sync values in the stream and properly to align.
|
2016-12-31 00:11:31 -05:00 |
|
Thomas Harte
|
ea4d85e1cd
|
The virtual disk constructed is the same across all tracks. So why not just request zero?
|
2016-12-31 00:10:35 -05:00 |
|
Thomas Harte
|
f217d508b8
|
Completed first attempt at write support for Oric disk images.
|
2016-12-30 23:12:46 -05:00 |
|
Thomas Harte
|
1f625fad66
|
Decided that if this is an [M]FM parsing function then it should be something more intelligent than a mere PLL record. Which I guess conveniently implies Oric DSK-esque behaviour. But properly defined, rather than very vaguely.
|
2016-12-30 23:10:52 -05:00 |
|
Thomas Harte
|
632b3c63b1
|
Added the infrastructure necessary for Oric disks to appear writeable to the machine and to receive changed tracks.
|
2016-12-30 22:51:48 -05:00 |
|
Thomas Harte
|
d581294479
|
Added get_track to get the PLL output for a complete track.
|
2016-12-30 19:59:23 -05:00 |
|
Thomas Harte
|
0f399b0a0c
|
Made type conversion explicit.
|
2016-12-30 19:59:01 -05:00 |
|
Thomas Harte
|
3b29e6a473
|
Ensured SSD and ADFs are grown if required.
|
2016-12-30 18:08:12 -05:00 |
|
Thomas Harte
|
07dacff42d
|
Added writing for Acorn ADF disks, plus appropriate TODOs in both similar bits of boilerplate.
|
2016-12-30 18:03:30 -05:00 |
|
Thomas Harte
|
c85450648f
|
Fix: make sure copies have proper event lengths. Also made it much clearer what's going on with the initial copy to the heap.
|
2016-12-30 17:55:46 -05:00 |
|
Thomas Harte
|
c740d9655a
|
Fixed: index_count_ may have been left high by a previous call; reset it just in case.
|
2016-12-30 17:55:06 -05:00 |
|