Thomas Harte
|
df01c78039
|
It's a bit of a mess but this is probably close to appropriate for Oric TAP files.
|
2016-10-11 07:39:48 -04:00 |
|
Thomas Harte
|
abf47efd40
|
Factored out Commodore is-a-ROM test, allowing it to be used from the Commodore analyser and thereby allowing ROMs to get as far as the machine again.
|
2016-09-29 19:39:13 -04:00 |
|
Thomas Harte
|
4010f36238
|
Ensured tape-formatted PRGs reach a conclusion.
|
2016-09-29 19:12:26 -04:00 |
|
Thomas Harte
|
ca53fac732
|
Switched to assuming a single-sided disk, moved out magic constants.
|
2016-09-26 21:20:30 -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
|
523dbb9678
|
This'll do for getting the ADF into the machine.
|
2016-09-25 18:32:26 -04:00 |
|
Thomas Harte
|
de863719d0
|
Made a first attempt at Acorn ADFS support plus the start of a suitable analyser.
|
2016-09-25 17:46:11 -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
|
64f2538b1f
|
Added CRC checking to DFS comprehension; fixed a bunch of places where I'd used Objective-C's #import rather than #include .
|
2016-09-19 08:16:06 -04:00 |
|
Thomas Harte
|
8a1b805d11
|
Fixed file offset calculation for single-sided images.
|
2016-09-19 07:34:10 -04:00 |
|
Thomas Harte
|
b1e7f2dfd0
|
There's no cache and no CRC checking yet, but this is probably a rough outline of an FM parser.
|
2016-09-18 22:03:06 -04:00 |
|
Thomas Harte
|
d1c861d3a5
|
That should be that, I hope.
|
2016-09-18 21:09:32 -04:00 |
|
Thomas Harte
|
02c9a82cb5
|
Edging towards SSD/DSD support. Hold on!
|
2016-09-18 19:32:08 -04:00 |
|
Thomas Harte
|
91cd7e143b
|
Started on the SSD/DSD support. Realised I had ommitted multiple head support from my disk class. Fixed that.
|
2016-09-18 19:21:02 -04:00 |
|
Thomas Harte
|
5409c8ec54
|
Switched PCMSegment s to std::vector ; ensured generated [M]FM tracks are correctly sized, thereby making sure the individual flux windows will be correctly sized.
|
2016-09-18 18:56:35 -04:00 |
|
Thomas Harte
|
d9aaf456f0
|
Adapted pervasively to MSB-first output. Which seems to be correct.
|
2016-09-18 18:46:58 -04:00 |
|
Thomas Harte
|
180c3df2d4
|
Calling it 'number theory' probably isn't accurate but extracted the CRC stuff and started using it for [M]FM encoding.
|
2016-09-18 18:33:26 -04:00 |
|
Thomas Harte
|
55a7418cbf
|
Parameterised to perform FM and MFM encodings, at least subject to CRCs still being missing.
|
2016-09-18 17:16:20 -04:00 |
|
Thomas Harte
|
22eed60d2b
|
Started sketching out basic MFM track encoding. Which possibly even means that the shifters don't need to be public?
|
2016-09-18 16:53:21 -04:00 |
|
Thomas Harte
|
0089c830c6
|
This possibly correctly encapsultes the lowest level of FM and MFM rules.
|
2016-09-18 14:17:06 -04:00 |
|
Thomas Harte
|
bcf91de7e9
|
Declared support for the Acorn disk files, started hammering out an encoder.
|
2016-09-18 13:35:54 -04:00 |
|
Thomas Harte
|
6454508db8
|
Added a quick bit of documentation.
|
2016-09-18 10:30:52 -04:00 |
|
Thomas Harte
|
65b568003d
|
Clarified TODO.
|
2016-09-18 10:29:45 -04:00 |
|
Thomas Harte
|
8c2bf099ad
|
Cut down to one GCD and clarified variable names, getting more explicit about what's going on.
|
2016-09-18 10:24:09 -04:00 |
|
Thomas Harte
|
79ef38b123
|
Attempted to use the new get_cycles_until_next_event method to take some repetition outside of the PLL and drive event loops.
|
2016-09-17 22:02:38 -04:00 |
|
Thomas Harte
|
dbb758aaf1
|
Workaround for a weird bug that suddenly appears to manifest: gzgetc is returning the file name, not bytes from the file. Seems to be related to improper initialisation of the next field within the gzFile header. I can't immediately see where ZLib intends to do that so it's a bit mysterious. But the larger-than-8 readers could probably save time by reading in blocks anyway.
|
2016-09-17 22:01:25 -04:00 |
|
Thomas Harte
|
14a9edcf5d
|
Made an attempt to do the time base conversion upfront, saving a lot of hassle and allowing greater prediction.
|
2016-09-17 19:52:27 -04:00 |
|
Thomas Harte
|
9d6dcb80a7
|
Started work on a GCR parser and the helper functions that lie behind that.
|
2016-09-13 21:53:36 -04:00 |
|
Thomas Harte
|
e3571e8b9e
|
Added insurance against an infinite loop should the tape be exhausted.
|
2016-09-12 22:22:23 -04:00 |
|
Thomas Harte
|
eeec516fa6
|
Implemented seeking on tapes, mucked about a bit more with the Commodore analyser, at least temporarily removed cropping from the Vic emulator.
|
2016-09-11 17:09:00 -04:00 |
|
Thomas Harte
|
1de6097f06
|
Shuffled C stuff out on top.
|
2016-09-08 21:08:03 -04:00 |
|
Thomas Harte
|
24251a2768
|
Negligible indentation fix.
|
2016-09-08 07:49:43 -04:00 |
|
Thomas Harte
|
01e5dae512
|
Threw in 300-baud support. Why not?
|
2016-09-08 07:48:20 -04:00 |
|
Thomas Harte
|
3e925e80a3
|
Added a field-filling constructor for pulses.
|
2016-09-08 07:41:44 -04:00 |
|
Thomas Harte
|
1e7b5330f5
|
More or less rewrote, to use a filled-per-chunk buffer of upcoming pulses rather than working them out as requests come. Which is more straightforward — all the code for a particular chunk goes in exactly one place — and much easier to extend. So threw in a provisional 0104 implementation.
|
2016-09-08 07:41:26 -04:00 |
|
Thomas Harte
|
d7d5f24aab
|
Attempted, at least, to insert a dummy byte as per the specification.
|
2016-09-06 21:51:04 -04:00 |
|
Thomas Harte
|
11850b872d
|
Sought to emulate 0111 as a longer 0110 to test a particular HQ UEF. Some progress. Not great.
|
2016-09-05 18:28:43 -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
|
963a479908
|
Made a quick first attempt at getting a file name from Acorn tape, failing terribly but at least formalising tapes being able to signal their end.
|
2016-08-29 21:53:06 -04:00 |
|
Thomas Harte
|
d1abfc040c
|
Addressed my dithering here: the file format containers themselves should do nothing but inspect the data to find out whether it is of the correct format. The machine steps are there for machine-specific validation. So it's probably easier to treat a binary ROM image just as a binary ROM image. Therefore, the Acorn-specific .rom detection is now in an Acorn-specific area.
|
2016-08-29 08:48:49 -04:00 |
|
Thomas Harte
|
29c972f4b8
|
Added hacky segue into analysis for all Electron formats. Added analyser to try to differentiate Acorn-format ROMs from other things called .rom, which are likely to be numerous.
|
2016-08-28 12:43:17 -04:00 |
|
Thomas Harte
|
d9f0065154
|
Sketched out just enough classes to get through the get-contents-into-memory step of static analysis.
|
2016-08-28 12:20:40 -04:00 |
|
Thomas Harte
|
24938326ac
|
ROMs definitely have no behaviour other than responding to memory accesses. Cartridges might. So picked the more general term. Sketched out a class at least to parse PRG as though it were a cartridge. Hence the static analyser can guess at whether a PRG is a cartridge or an ordinary program.
|
2016-08-27 18:26:51 -04:00 |
|
Thomas Harte
|
a1b3a18d11
|
Started forcing a resolution on ROMs by doing. But have immediately misstepped. Rename coming momentarily...
|
2016-08-27 18:17:40 -04:00 |
|
Thomas Harte
|
82c8459055
|
Minor tidying of namespace usage declarations.
|
2016-08-27 17:18:12 -04:00 |
|
Thomas Harte
|
56c0d70c1f
|
Gave disks their own namespace.
|
2016-08-27 17:15:09 -04:00 |
|
Thomas Harte
|
c0402d0c2b
|
Gave tapes their own namespace.
|
2016-08-27 17:09:45 -04:00 |
|
Thomas Harte
|
8c333059a8
|
Turning this into a slog: gave UEF a more appropriate name, got as far as now having to decide what to do about ROMs as to structure. I guess they're machine specific, so specific classes?
|
2016-08-27 16:40:21 -04:00 |
|
Thomas Harte
|
73ce67bee8
|
Added some documentation of the intention here.
|
2016-08-19 11:04:59 -04:00 |
|
Thomas Harte
|
4edd1214f1
|
This has now successfully loaded its first PRG-as-a-tape.
|
2016-08-19 10:58:42 -04:00 |
|
Thomas Harte
|
2935848f35
|
Adopted header/header/data/data pattern. But still not complete joy.
|
2016-08-17 08:03:34 -04:00 |
|
Thomas Harte
|
e5523dbbed
|
This gets through loading the first(/only?) copy. I tried repeating it with a bit-flipped header, now I'm trying repeating the header with a different file type. More documentation searching to do, I guess.
|
2016-08-16 22:17:08 -04:00 |
|
Thomas Harte
|
1bca9aa2bb
|
Fixed parity: now calculated from the actual byte and works the other way around. The Vic now believes it is loading the actual program. So I guess bytes, headers and the lead-in is working.
|
2016-08-16 21:41:09 -04:00 |
|
Thomas Harte
|
dfe9fb83ef
|
This proves that bytes are being deposited properly. For the first 36 anyway, and with no announcement.
|
2016-08-16 21:09:50 -04:00 |
|
Thomas Harte
|
12f8aff65b
|
Lengths I'd taken seem to have been for dipoles, not single poles. So I just doubled the clock rate. Also I was producing each dipole as high then low, when they should probably be low then high. The Vic now at least recognises that something is happening on the tape.
|
2016-08-16 19:46:53 -04:00 |
|
Thomas Harte
|
3a23d5d8cf
|
Adjusted the check digit.
|
2016-08-15 22:44:36 -04:00 |
|
Thomas Harte
|
dbe47f3f45
|
I've obviously misunderstood something as, as far as I'm concerned, this should at least get me a 'LOADING'.
|
2016-08-15 22:40:05 -04:00 |
|
Thomas Harte
|
7994148f55
|
I'm starting to make a little headway, I think: this performs lead-ins and countdowns, though with no actual data or anything as helpful as that.
|
2016-08-15 22:10:53 -04:00 |
|
Thomas Harte
|
7e2b4554ea
|
This likely forms the Commodore dipoles correctly. It just stays stuck in leader tone forever is all.
|
2016-08-15 20:08:50 -04:00 |
|
Thomas Harte
|
38aec44d85
|
Made sufficient changes for the Vic itself to believe it can recast a PRG as a tape and insert it that way. So now the ball is in the court of: how the heck are Commodore tapes encoded?
|
2016-08-15 19:44:41 -04:00 |
|
Thomas Harte
|
3aa40212f3
|
Fixed minor documentation error; admitted that this class didn't invent the idea of a pulse.
|
2016-08-15 19:37:21 -04:00 |
|
Thomas Harte
|
9d76cd9b60
|
Removed dead instance storage.
|
2016-08-04 21:41:12 -04:00 |
|
Thomas Harte
|
3e90b85ff8
|
Made an attempt to insert proper conversions to/from rotational speed. The Time class is now really turning into a full-on quotient. Might need refactoring.
|
2016-08-04 21:36:39 -04:00 |
|
Thomas Harte
|
e57ab1025d
|
Fixed location calculation, up to a point.
|
2016-08-03 22:33:00 -04:00 |
|
Thomas Harte
|
9af9b28baf
|
Made very first attempt at closing the loop on this. But it's time for work.
|
2016-08-03 08:16:23 -04:00 |
|
Thomas Harte
|
e15241dc3c
|
Added ability to query how long since the new interval was set to the timed event loop. Discovered that LCM will returning the net effect of the common factors only. Otherwise continued iterating towards time preservation.
|
2016-08-03 07:49:00 -04:00 |
|
Thomas Harte
|
a3a3486f54
|
Okay, it's becoming more apparent where the (very mild) complexity will be here. But started moving towards retaining rotation between tracks.
|
2016-08-03 07:33:26 -04:00 |
|
Thomas Harte
|
21f1fa37a4
|
Fixed Time addition, added accumulation of distance into track into the disk drive, added a short circuit for LCM.
|
2016-08-03 07:26:05 -04:00 |
|
Thomas Harte
|
30f8b6baa4
|
Made an attempt to add the necessary extension to Track , with a concrete implementation in PCMTrack , to support time-based seeking, the intended mechanism for not magically spinning the disk back to the index hole upon every head step.
|
2016-08-03 06:59:45 -04:00 |
|
Thomas Harte
|
d832e5e10d
|
Reduced 1540 PLL to running at 4Mhz. Which is possibly correct (?) Made minor change to avoid divide if possible.
|
2016-08-02 21:28:50 -04:00 |
|
Thomas Harte
|
bc10b3ee9a
|
It appears the problem is as simple as sectors being counted from zero.
|
2016-08-01 10:08:38 -04:00 |
|
Thomas Harte
|
f5e4ea3351
|
Some minor tidying, lots more of the caveman stuff as I try to determine what I'm doing wrong.
|
2016-08-01 09:43:08 -04:00 |
|
Thomas Harte
|
a00f9adba3
|
Made a first attempt at D64 support. Made an error somewhere but this should be 90% of it.
|
2016-08-01 08:41:16 -04:00 |
|
Thomas Harte
|
58297f1baf
|
Performed the basic metadata and routing for opening D64 files. Realised that I wasn't actually necessarily catching exceptions properly for all file opens, and fixed.
|
2016-08-01 07:09:15 -04:00 |
|
Thomas Harte
|
ee2a7c9415
|
Added slightly to exposition, to match other formats.
|
2016-08-01 06:54:57 -04:00 |
|
Thomas Harte
|
2799a87218
|
Reduced possibility of overflow on LCM, improved commenting widely, removed one stale piece of G64 bootstrapping caveman stuff.
|
2016-08-01 06:04:55 -04:00 |
|
Thomas Harte
|
198fbbedc7
|
Reeled back all appropriate pieces of caveman debugging.
|
2016-07-31 13:42:34 -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
|
6ee784a893
|
Increased logging; discovered I was packing events together too closely. Now getting some zeros.
|
2016-07-30 04:30:55 -04:00 |
|
Thomas Harte
|
fead524eb5
|
Attempted to give the PLL a litte extra leeway, and fixed PCMTrack length test.
|
2016-07-29 18:52:50 -04:00 |
|
Thomas Harte
|
8f62211f5e
|
Wired up the 1540 as a PLL delegate. Which prima facie means it should start receiving a bit stream. Except that I clearly have something in the timing way off — either my flux transitions are far too short or I need to significantly increase the clock rate on the PLL.
|
2016-07-29 12:08:18 -04:00 |
|
Thomas Harte
|
89a1881fef
|
Started turning the 1540 into an actual disk drive.
|
2016-07-29 11:03:09 -04:00 |
|
Thomas Harte
|
6532b3a8c8
|
Filled in a calculation of clocks per bit that'll do.
|
2016-07-29 07:51:07 -04:00 |
|
Thomas Harte
|
f984de42a3
|
Took some small steps towards having a disk drive that at least can select a track and pump relevant events into a PLL.
|
2016-07-29 07:31:02 -04:00 |
|
Thomas Harte
|
0e581c7607
|
Factored out the stuff of running a timed event loop from the TapePlayer.
|
2016-07-29 07:15:46 -04:00 |
|
Thomas Harte
|
e55db0cfe8
|
Made an attempt to eliminate creeping tape processing accuracy misses, which implied factoring out the GCM and LCD functions, which I then felt didn't really amount to signal processing.
|
2016-07-29 05:19:01 -04:00 |
|
Thomas Harte
|
5c1614ce7b
|
Attempted to simplify, very slightly.
|
2016-07-28 14:35:39 -04:00 |
|
Thomas Harte
|
015cea494d
|
Switched to a much-more straightforward PLL. I think I'm just fiddling now rather than moving forwards. Probably time to move on?
|
2016-07-28 11:32:14 -04:00 |
|
Thomas Harte
|
e061e849d4
|
Had a second bash at the PLL. Probably I should read some of the literature.
|
2016-07-27 16:24:24 -04:00 |
|
Thomas Harte
|
63f39608a6
|
Added just enough to get back to a working build.
|
2016-07-15 20:35:19 -04:00 |
|
Thomas Harte
|
165dbd9651
|
Started fleshing this out a bit. Hopefully.
|
2016-07-15 08:28:34 -04:00 |
|
Thomas Harte
|
0aa90b943b
|
Switched to specifying bit length as a quotient for the purposes of a PCMSegment and verified that I had the logic for picking a Commodore time zone backwards: bigger numbers are faster, not slower.
Started sketching out a DiskDrive class.
|
2016-07-15 06:51:11 -04:00 |
|
Thomas Harte
|
6afd619791
|
Eliminated floating point arithmetic.
|
2016-07-14 19:47:00 -04:00 |
|
Thomas Harte
|
6b4fec37ff
|
Moved down to a single divide.
|
2016-07-14 19:45:08 -04:00 |
|
Thomas Harte
|
481475a0f4
|
Switched to a full-on linear regression. Which causes the current tests to pass.
|
2016-07-14 19:42:01 -04:00 |
|
Thomas Harte
|
6d6b26b99f
|
Actually made things worse.
|
2016-07-14 07:32:27 -04:00 |
|
Thomas Harte
|
d8d3464c56
|
Made a quick-hack attempt at PLL synchronisation. Which doesn't work.
|
2016-07-14 07:31:23 -04:00 |
|
Thomas Harte
|
d1fe07f14d
|
Added test of perfect DPLL input timing.
|
2016-07-12 21:42:23 -04:00 |
|
Thomas Harte
|
94db45456e
|
Started sketching out the basic form here, albeit that it doesn't yet do _the only thing it advertises itself as useful for_.
|
2016-07-12 20:23:56 -04:00 |
|