Thomas Harte
44cdc124af
Switches to providing a full record of changes to disk images, rather than feeding them a track at a time.
...
Gets explicit about `override`s while doing so, to ensure full adaptation.
2017-10-07 19:37:36 -04:00
Thomas Harte
b37787a414
Ensures lifetime-linked track flushing without relying on virtual calls within a destructor.
2017-10-07 19:14:18 -04:00
Thomas Harte
53b99ea248
Uses Disk::flush_tracks to elide replacement of dirty tracks.
2017-10-06 22:07:42 -04:00
Thomas Harte
97a2be71e3
Introduces flush_tracks to Drive, while switching its interface to using Track::Address and adjusting associated integer types.
2017-10-06 21:45:12 -04:00
Thomas Harte
edb9fd301c
Begins this project's conversion to functional-style casts.
2017-10-03 22:04:15 -04:00
Thomas Harte
0fb363ea0e
Adds writing support for HFEs.
2017-10-03 21:24:20 -04:00
Thomas Harte
1cc85615d5
Factors HFE track seeking out from the track fetching method.
2017-10-03 20:33:55 -04:00
Thomas Harte
7b01c1bee6
Revokes direct visibility of is_read_only_ to subclasses of FileHolder.
2017-10-03 19:36:06 -04:00
Thomas Harte
35705c5345
Factors out bit reversing from the HFE class.
2017-10-03 19:12:45 -04:00
Thomas Harte
ef605eda51
Factors out commonalities in SSD/DSD and ADF implementations.
2017-09-30 20:30:15 -04:00
Thomas Harte
326857a84d
Corrects FM/MFM selection when looking for sectors.
2017-09-29 22:48:00 -04:00
Thomas Harte
5dd3945695
Factors out the more egregious similarities between ADF and SSD.
2017-09-29 22:07:23 -04:00
Thomas Harte
19eb975c73
Adds an intermediate step in CP/M directory parsing.
...
To reduce amount of time spent allocating and reallocating buffers.
2017-09-29 21:38:16 -04:00
Thomas Harte
698ffca51b
Recasts the [M]FM parser in terms of the new factoring.
...
Temporarily breaks SSD writing support.
2017-09-29 20:08:36 -04:00
Thomas Harte
fe3cc5c57c
Removes dead pragma.
2017-09-28 20:47:25 -04:00
Thomas Harte
f488854720
Switches Oric MFM DSK serialisation to feeding a track serialisation to a shifter.
...
Thereby eliminates the parser's need to offer get_track.
2017-09-27 22:14:50 -04:00
Thomas Harte
51c0c45e04
Turns MFM bit length into a globally-available constant.
2017-09-27 21:30:09 -04:00
Thomas Harte
c3e1489a8e
Introduces Track::Address, a parallel to Sector::Address to enable more uniform storage.
2017-09-27 21:29:06 -04:00
Thomas Harte
e3420f62c6
Switches the Acorn ADF implementation to using the new track_serialisation/sectors_from_segment route for decomposition of a track into sectors.
2017-09-26 22:05:33 -04:00
Thomas Harte
9f4a407f94
Switches the track serialiser to a more standard header + implementation separation.
...
Also introduces a full priming of the PLL before deserialisation begins.
2017-09-26 22:01:32 -04:00
Thomas Harte
5dda897334
Changes function name to sector_size
— into line with idioms.
2017-09-26 22:00:19 -04:00
Thomas Harte
3982e375e3
Introduces a route from a PCMSegment
to a list of [M]FM sectors.
2017-09-25 19:57:11 -04:00
Thomas Harte
a8524daecb
Marks the move constructor as noexcept, to improve usage with vector
.
2017-09-25 19:53:22 -04:00
Thomas Harte
d1ce764201
Provides SectorsFromSegment, a bitstream to sector converter.
2017-09-24 22:41:16 -04:00
Thomas Harte
8875982e1f
Ensures Sectors are move constructible (and still default constructible), and adds proper const qualifiers to Sector::Address.
2017-09-24 22:40:38 -04:00
Thomas Harte
3319a4f589
Isolates those Sector
fields that describe its address and makes them usable as a set key.
2017-09-24 21:57:21 -04:00
Thomas Harte
c7f27b2db4
Renames MFM.[c/h]pp as per its new remit: encoding only.
2017-09-24 21:40:43 -04:00
Thomas Harte
631f630549
Severs the MFM parser from the overweight single MFM.hpp.
2017-09-24 20:31:19 -04:00
Thomas Harte
2a08bd9ecc
Factors shifting plus stateful [M]FM token recognition out of the MFMDiskController.
...
Given the proliferation of MFM-related classes, establishes a subdirectory for them.
2017-09-24 20:07:56 -04:00
Thomas Harte
f789ee4ff0
Introduces a track to segment decoder.
...
This will be needed to make formats like G64 and HFE writeable, but probably also will be usable to speed up static analysis.
2017-09-23 22:39:19 -04:00
Thomas Harte
d72dad2d1a
Severs the DiskImage implementation from its public header file.
2017-09-22 22:46:31 -04:00
Thomas Harte
698e4fe550
Tidies the Disk
file hierarchy.
2017-09-22 22:39:23 -04:00
Thomas Harte
b5406b90cd
Introduces a new class hierarchy for disk images.
...
Increasing independence of format-specific stuff and generic caching without mangling them into a common namespace, and allowing in some cases for a decrease in read/write blocking.
2017-09-22 20:28:11 -04:00
Thomas Harte
44a56724cb
Speeds up byte decoding within sectors for the ahead-of-time MFM parser.
2017-09-16 20:28:24 -04:00
Thomas Harte
a85909198f
Adds defences against double calls to end writing.
2017-09-16 17:07:36 -04:00
Thomas Harte
da082673d7
Drives now have a finite number of heads.
...
The Amstrad volunteers itself to be single sided. Everything else stays as it was.
2017-09-15 21:18:36 -04:00
Thomas Harte
662d031e3c
Adds exposition on the meaning of a disk controller being in write mode.
2017-09-15 19:14:36 -04:00
Thomas Harte
bf20c717fb
The Drive now no longer produces input when in writing mode — other than announcing the index hole.
2017-09-14 22:32:13 -04:00
Thomas Harte
4d4a0cf1d2
Puts the disk controller back into the loop with knowledge about reading mode, and uses that knowledge to cut off the PLL.
2017-09-14 22:30:40 -04:00
Thomas Harte
82b13e98f2
Implements the real hardware ready test for Drives — motor on plus two index holes.
2017-09-11 22:27:50 -04:00
Thomas Harte
9ac831b09c
Added an additional protection against overflow.
2017-09-11 22:24:24 -04:00
Thomas Harte
96bf133924
Withdraws requirement for DiskController users to specify a PLL multiplier or to provide rotation speed.
...
In the latter case because it's no longer of any interest to the controller, and in the former because I'd rather it be picked automatically.
2017-09-10 22:56:05 -04:00
Thomas Harte
6d6cac429d
Fixes extra time accumulation during track running.
...
Introduces a bunch of further asserts, which aided me in determining the fix, i.e. that Drives being responsible for their own setup_track could double-pump the event loop.
2017-09-10 22:44:14 -04:00
Thomas Harte
dc0b65f9c9
Corrects initial event loop timing state.
2017-09-10 20:51:21 -04:00
Thomas Harte
8882aa496f
Corrected wiring to get advance
signals through to Drive event delegates.
2017-09-10 20:51:05 -04:00
Thomas Harte
0622187ddf
Strips Controller of all capabilities now housed on the Drive.
2017-09-10 19:23:23 -04:00
Thomas Harte
523e1288fa
Updates the MFM parser to use SingleTrackDisk rather than the equivalent withdrawn Drive functionality.
2017-09-10 17:34:52 -04:00
Thomas Harte
1a96cce26f
Implements SingleTrackDisk, a Disk that contains only a single, specified, track.
2017-09-10 17:34:14 -04:00
Thomas Harte
a4e275e1fc
Provides an implementation of Drive's new interface.
...
Mostly lifted from DiskController. `set_disk_with_track` has been withdrawn in favour of providing a suitable wrapper `Disk` subclass, as being an unnecessary complexity and intermingling of concerns.
2017-09-10 17:33:01 -04:00
Thomas Harte
6075064400
Adds the ability to query a TimedEventLoop for its input clock rate.
2017-09-10 17:31:43 -04:00
Thomas Harte
ff6e65cca9
Introduces necessary storage and interface for writing.
2017-09-10 16:23:31 -04:00
Thomas Harte
90d2347c90
Extended to permit subclasses that are interested to get sub-run_for information about event times.
2017-09-10 14:44:38 -04:00
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
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
4465098157
Since it has descendants, gives Storage::Cartridge
a virtual destructor.
2017-08-27 15:19:30 -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
9aa150c338
Abstracts the target platform type out from the static analyser's ownership.
2017-08-27 15:02:13 -04:00
Thomas Harte
c6e6c3fcfb
Resolves all current analyser warnings.
2017-08-24 22:18:44 -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
49285e9caa
Attempted to implement Sleeper in Drive and therefore in DiskController. Also corrected a couple of nonconformant file names.
2017-08-20 11:54:54 -04:00
Thomas Harte
5344e3098b
Minor: made has_disk something that is decided on insertion/deletion.
2017-08-20 10:55:08 -04:00
Thomas Harte
ef07c33741
Merge branch 'Plus10' into MFMParserDensity
2017-08-18 15:48:20 -04:00
Thomas Harte
e559a65ede
Ideally I would be able to kill this multiplier, as it could easily be derived at runtime. But, for now, just turned it up so that the analysis-oriented parser is better at parsing different bit rates.
2017-08-18 15:47:46 -04:00
Thomas Harte
af61a7fa28
Two quick fixes: correctly set segment size, and flip bytes to match HFE's bit ordering to PCMTrack's.
2017-08-17 22:28:00 -04:00
Thomas Harte
c8c1792c3f
Made a first attempt at HFE support.
2017-08-17 22:20:02 -04:00
Thomas Harte
e6683e7f2d
Added the base skeletal stuff of HFE support.
2017-08-17 21:48:48 -04:00
Thomas Harte
0c1714b695
Relaxed a little to allow +10% in track length.
2017-08-17 21:36:14 -04:00
Thomas Harte
2c2dd8073c
Modified to return nullptr if asked for an extended disk image track that doesn't exist.
2017-08-17 15:32:24 -04:00
Thomas Harte
4f8b89772e
Improved logic for detecting when all sense has been derived from a track to spot any repeated track, not necessarily the first one. That avoids sectors that run over the index hold and obscure the first throwing things.
2017-08-17 15:31:53 -04:00
Thomas Harte
733ee5a5c3
Ensured no attempt to put a null track into the cache
2017-08-17 15:30:02 -04:00
Thomas Harte
fedf5a44a6
Imposes a maximum track length.
2017-08-17 15:20:49 -04:00
Thomas Harte
da3e8655e9
Withdrew some caveman debugging nonsense.
2017-08-17 13:25:19 -04:00
Thomas Harte
42ad670ec8
Fixed: catalogue bitmap is in blocks, not sectors.
2017-08-17 12:47:47 -04:00
Thomas Harte
468770b382
Removed debugging nonsense.
2017-08-15 22:06:58 -04:00
Thomas Harte
6cfc3daacb
Introduced a test within the disk controller so as not to request illegal tracks from disks, instead automatically substituting an 'unformatted' track. Which is just empty.
2017-08-15 21:52:12 -04:00
Thomas Harte
7b92b235e1
Further upped assert
s, thereby discovering the mistake I'd recently introduced: seeking properly within the event source as per its potential left-clipping, but then not allowing for that in the calculated current time.
2017-08-15 16:25:46 -04:00
Thomas Harte
c196f0018f
Upped the assert quotient.
2017-08-15 16:15:09 -04:00
Thomas Harte
73080d6c36
Added an easy way for disk controllers to clamp termination of written data exactly to the index hole.
...
This commit also temporarily provides a whole load of extra logging and minor logic improvements from the 8272. I'm mid-flow on finding a particularly vicious error in its handling of writing; wait for the pull request. But, at least: now waits for the first part of a post-ID gap before writing data, and attempts partially to handle appearance of the index hole during writing a track. More work to do on that though.
2017-08-15 16:05:10 -04:00
Thomas Harte
9541a2a5f0
Corrections: seek_to
now takes the segment_start_time
into account, correcting a windowing error where segments overlay other segments. Also added some asserts while bug hunting, and corrected the steps taken when inserting a longer-than-a-track segment so that each is correctly windowed.
2017-08-15 15:54:09 -04:00
Thomas Harte
944222eba4
Added: write_id_data_joiner
can now be instructed not to write the first portion of gap. Which makes more sense as an option, to avoiding splicing errors.
2017-08-15 15:29:23 -04:00
Thomas Harte
a366298022
Factored out the standard [M]FM gap and mark groups, to increase 8272 readability and because it's pretty-much certain I'll need them again if ever I try to tackle e.g. the 8271.
2017-08-14 16:03:35 -04:00
Thomas Harte
4df9307d25
Factored out the dull and repetitious stuff of writing n bytes of the same value.
2017-08-14 15:50:36 -04:00
Thomas Harte
cefec7a19f
Sought more robustly (i.e. less repetitively) to handle dispatch, including cancelling seeks where appropriate.
2017-08-14 10:37:39 -04:00
Thomas Harte
1011143dbe
Sought to correct my interpretation of 'gap 3'.
2017-08-13 21:52:48 -04:00
Thomas Harte
750f2cb883
Flagged as not read-only, at least for now, to allow 8272 writing tests definitively to function.
2017-08-13 18:54:39 -04:00
Thomas Harte
1576b4500b
Added documentation.
2017-08-13 18:27:00 -04:00
Thomas Harte
e1e9a06712
Made an attempt at format a track.
2017-08-13 18:05:19 -04:00
Thomas Harte
6e36f8ffa4
Removed index-hole announcement.
2017-08-13 12:50:24 -04:00
Thomas Harte
b0a7208cc7
Strung together a very basic version of 8272 write [/deleted] data. Lots of cases as-yet unhandled.
2017-08-13 12:50:07 -04:00
Thomas Harte
eec42aa7ae
Entrusted further status to drives; also adjusted them to report read only if diskless, which I now believe to be correct.
2017-08-13 11:50:49 -04:00
Thomas Harte
186048a88e
Made an attempt to fix the condition for setting a broken header CRC.
2017-08-12 16:39:32 -04:00
Thomas Harte
daafebe7ac
Moved curly bracket.
2017-08-11 19:19:04 -04:00
Thomas Harte
2d81acb82e
Upped C++ standard to C++14 and added an #if that's intended to use the built-in std::gcd when compiled on C++17 or better. Fixed for new signedness warnings resulting for taking the step to C++14.
2017-08-11 19:18:45 -04:00
Thomas Harte
82ca49c840
Adjusted to avoid calls to ::greatest_common_divisor(numerator % denominator, denominator)
unless necessary.
2017-08-11 19:05:46 -04:00
Thomas Harte
0c8769e335
Just to be safe.
2017-08-11 18:41:08 -04:00
Thomas Harte
83c7d34df2
Switched to populating the sector cache with everything in a track the first time anything on that track is requested. That avoids the problem whereby each request of a non-existent sector costs two spins.
2017-08-11 18:40:16 -04:00
Thomas Harte
a12671010a
Sector
size is now reported, and CRC failures are merely indicated, not cause for a sector to be thrown away.
2017-08-11 16:23:33 -04:00
Thomas Harte
edb088526f
Simplified slightly, and updated TODO as to still-missing functionality.
2017-08-11 14:33:34 -04:00
Thomas Harte
80ebc63101
Updated the SSD file format container to specify sector sizes, now that it's no longer implicit.
2017-08-11 14:30:35 -04:00