Thomas Harte
|
7af3de010e
|
Suspected my mode 1 interrupt timing might be off. Reminded myself of the sources. Persuaded myself that it wasn't. Added appropriate comments.
|
2017-08-23 22:25:31 -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
|
e1aded0d95
|
Allows Z80 users to opt out of support for the bus request line. Which both now do.
|
2017-08-21 20:43:12 -04:00 |
|
Thomas Harte
|
6315c22b80
|
Removed repeated checking of bus_request_line_. It's now checked only after each outward perform_machine_cycle .
|
2017-08-20 12:39:45 -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
|
039811ce6a
|
Switched the Z80 to being something a machine has, not something a machine is.
|
2017-08-02 22:09:59 -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
|
9ef232157b
|
Revoked the operator bool() on WrappedInt as providing an indirect means for implicit but incorrect assignment to unwrapped ints. Got explicit about run_for intention and simplified HalfClockReceiver slightly by building a lossy and a flushing conversion to Cycles into HalfCycles. Adapted the all-RAM Z80 properly to return HalfCycles.
|
2017-07-27 21:38:50 -04:00 |
|
Thomas Harte
|
8848ebbd4f
|
Formalised set_interrupt_line's optional parameter as being a count of HalfCycles; corrected PartialMachineCycle.is_wait and effected the proper timing for counter reset on a ZX81.
|
2017-07-27 21:10:14 -04:00 |
|
Thomas Harte
|
37950143fc
|
Attempted to nudge wait timing onto half-cycle boundaries, which expands the number of partial machine cycles the Z80 can post but pleasingly also regularises them. Switched the AllRAMProcessor to reporting half cycles by default and corrected all Z80 tests.
|
2017-07-27 20:17:13 -04:00 |
|
Thomas Harte
|
60e374dca3
|
Merge branch 'master' into Memptr
|
2017-07-27 07:54:25 -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
|
847e49ccdf
|
Corrected timestamp reporting by the all-RAM Z80.
|
2017-07-26 19:47:39 -04:00 |
|
Thomas Harte
|
81a3899381
|
Adjusted the Z80 formally to communicate in terms of half cycles rather than whole.
|
2017-07-26 19:42:00 -04:00 |
|
Thomas Harte
|
9257a3f6d7
|
Added test for 16-bit arithmetic, and fixed implementation.
|
2017-07-26 19:04:52 -04:00 |
|
Thomas Harte
|
6ec4e4e3d7
|
Merge branch 'master' into Memptr
|
2017-07-25 23:01:34 -04:00 |
|
Thomas Harte
|
966b5e6372
|
Adapted the Z80's perform_machine_cycle to return Cycles .
|
2017-07-25 22:25:44 -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
|
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
|
677ed463f0
|
Updated comment per new method name.
|
2017-07-24 21:19:49 -04:00 |
|
Thomas Harte
|
9bff787ee1
|
Corrected for the new, non-integral type.
|
2017-07-24 21:05:07 -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
|
ace8e30818
|
Bubbled the Z80's move into clock receiver territory up into the Z80 test machine.
|
2017-07-23 22:21:39 -04:00 |
|
Thomas Harte
|
ec3aa06caf
|
Removed dangling reference.
|
2017-07-23 22:16:00 -04:00 |
|
Thomas Harte
|
ba088e5545
|
Adapted the Z80 into a clock receiver, which also vends Cycles rather than a raw int within its PartialMachineCycle struct. The objective is to update it to vend HalfCycles within its struct, but I think I need to do some work on cycle/half-cycle arithmetic first.
|
2017-07-23 22:15:04 -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
|
20a6bcc676
|
Added tests for the various LD (nn), rr instructions and corrected implementation to pass.
|
2017-07-22 11:39:13 -04:00 |
|
Thomas Harte
|
eaf313b0f6
|
Added a test on LD A, (DE) and LD A, (BC), and adjusted implementation to pass.
|
2017-07-22 11:20:21 -04:00 |
|
Thomas Harte
|
d51b66c204
|
Expanded test to hit all 65536 possibilities (and not to allocate a fresh Z80 test machine each time, as that's unnecessary and slow), and fixed implementation to pass test.
|
2017-07-21 23:01:35 -04:00 |
|
Thomas Harte
|
540a03f75c
|
Exposed the memptr register.
|
2017-07-21 22:31:42 -04:00 |
|
Thomas Harte
|
9b72c445a7
|
Fixed indexing type.
|
2017-07-21 21:19:46 -04:00 |
|
Thomas Harte
|
aec4fd066b
|
I think I've definitively decided against this model of timing.
|
2017-06-22 21:32:14 -04:00 |
|
Thomas Harte
|
95a6b0f85c
|
Introduced an NMI/wait interrupt timing test, and adjusted the Z80 to conform to information posted by Wilf Rigter.
|
2017-06-22 21:09:26 -04:00 |
|
Thomas Harte
|
b7c978e078
|
Added getters for most of the input lines, and attempted to round out the ZX81's wait logic.
|
2017-06-22 20:11:19 -04:00 |
|
Thomas Harte
|
f0398a6db8
|
Added wait state hooks to the interrupt programs, and added an is_wait query on PartialMachineCycle.
|
2017-06-22 20:07:47 -04:00 |
|
Thomas Harte
|
7eeac3b586
|
Switched R back to incrementing after the refresh cycle. It had snuck to before by virtue of subdivision of the M1 cycle. Which shortened the ZX80 line time, breaking synchronisation.
|
2017-06-21 21:11:00 -04:00 |
|
Thomas Harte
|
0e0ce379b4
|
Renamed MachineCycle to PartialMachineCycle given that it mostly no longer intends to describe an entire machine cycle.
|
2017-06-21 20:38:08 -04:00 |
|
Thomas Harte
|
36e8a11505
|
Sought to simplify the way partial machine cycles are communicated, for ease of machine implementation. Also implemented the wait line.
|
2017-06-21 20:32:08 -04:00 |
|
Thomas Harte
|
45f442ea63
|
Corrected interrupt mode 2: was both failing properly to load the vector address, and failing to read from it.
|
2017-06-21 19:08:48 -04:00 |
|
Thomas Harte
|
db743c90d8
|
Had neglected to count refresh time in my interrupt programs. Corrected. Mode 0 timing test succeeds again. Only Mode 2 is now at fault.
|
2017-06-21 18:58:44 -04:00 |
|
Thomas Harte
|
10cc94f581
|
Attempted to fix interrupt response timing; ensured initial interrupt mode is one that won't jump beyond the interrupt response program table's length, and that the conditionals other than CALL definitely have no alternative program attached.
|
2017-06-21 18:47:00 -04:00 |
|
Thomas Harte
|
108da64562
|
Fixed LD H, (HL) and LD L, (HL) by ensuring that whatever the subclass does goes to a temporary place before updating the address. Corrected the LD (IX+d), n machine cycle test for my new best-guess timing. This should leave only interrupt timing as currently amiss.
|
2017-06-20 22:25:00 -04:00 |
|
Thomas Harte
|
f85b46286e
|
Resolved the timing disparity between LD (HL),n and LD (IX+d), n, hopefully having come up with a convincing theory of timing for the latter.
|
2017-06-20 22:20:58 -04:00 |
|
Thomas Harte
|
184b371649
|
Attempted to get to 'proper' timing for LD (IX+d),n, albeit that proper is a guess.
|
2017-06-20 21:48:50 -04:00 |
|
Thomas Harte
|
b0375bb037
|
Fixed the three LD rr, (nn) operations. Back down to four FUSE failures.
|
2017-06-20 21:32:23 -04:00 |
|
Thomas Harte
|
48942848e7
|
Fixed (Ix+d) read timing. I've put an extra wait cycle into the read, so no need to extend the refresh.
|
2017-06-20 21:15:56 -04:00 |
|
Thomas Harte
|
27ac342928
|
Corrected conditional call timing, and its test.
|
2017-06-20 20:57:23 -04:00 |
|
Thomas Harte
|
25aba16ef8
|
Quickly checking the FUSE tests, corrected a handful of instances where PC should be modified but isn't, correcting around 800 new failures.
|
2017-06-19 22:20:23 -04:00 |
|
Thomas Harte
|
a0d0f383c8
|
Corrected unconditional CALL timing. Conditional's going to require more work because once the wait state is put into the right place, it breaks the assumption under which the Z80 handles conditions — that they're either do something or else do nothing. So that can wait a day.
|
2017-06-19 22:07:36 -04:00 |
|
Thomas Harte
|
cc8f316941
|
Resolved read-modify-write (IX+d) timing, and therefore RLC (IX+d).
|
2017-06-19 20:51:28 -04:00 |
|
Thomas Harte
|
b684254908
|
Introduced further tests down to a failing attempt at RLC (IX+d). Made an initial attempt to fix, failed.
|
2017-06-19 20:33:34 -04:00 |
|
Thomas Harte
|
ba15371948
|
Introduced timing tests for LDI[R] and CPI[R], fixing a latent issue in the rejig of LD BC, nn while I'm here.
|
2017-06-19 19:47:00 -04:00 |
|
Thomas Harte
|
73dbaebbc1
|
Fixed timing of EX (SP), HL/IX.
|
2017-06-19 19:25:53 -04:00 |
|
Thomas Harte
|
e3244eb68e
|
Rephrased internal operation machine cycles as having only an end. So they're now easy to count. Hence the test machine spots them, and a couple more of the current timing subset passes.
|
2017-06-19 07:39:46 -04:00 |
|
Thomas Harte
|
85c6fb1430
|
Explained refresh cycles to the all-RAM Z80.
|
2017-06-19 07:36:11 -04:00 |
|
Thomas Harte
|
54e4643396
|
Corrected non-default refresh cycle lengths. Reduces failures of the currently-tested timing subset from 10 to 4.
|
2017-06-19 07:34:23 -04:00 |
|
Thomas Harte
|
85c5c4405a
|
Ensured that wait states don't appear unless requested (TODO: requesting), and made the output of my timing tests a little easier to parse.
|
2017-06-19 07:30:01 -04:00 |
|
Thomas Harte
|
d668879ba6
|
Started trying to wade back to passing tests. Working on the new timing tests first, and focussing on getting the Objective-C test machine to compile bus operations into machine cycles, which means indicating phase to all-RAM delegates.
|
2017-06-18 22:03:13 -04:00 |
|
Thomas Harte
|
cb140aa06e
|
Managed to navigate back to building.
|
2017-06-18 21:00:44 -04:00 |
|
Thomas Harte
|
6a769d3953
|
Finally dipped below the 20 error threshold that the compiler tops out at.
|
2017-06-18 20:34:46 -04:00 |
|
Thomas Harte
|
3be8ffd826
|
Some correct timings have gone out the window for now, but only the final quarter of the base page now contains compiler errors.
|
2017-06-18 20:31:12 -04:00 |
|
Thomas Harte
|
bb910e14a4
|
Dealt with the CB page.
|
2017-06-18 18:01:33 -04:00 |
|
Thomas Harte
|
69ebbe019a
|
Completed ED page conversion. Rolling onwards...
|
2017-06-18 17:56:48 -04:00 |
|
Thomas Harte
|
0d39672d32
|
Fixing typos here and there, persuaded the first half of the ED table to compile.
|
2017-06-18 17:48:54 -04:00 |
|
Thomas Harte
|
0d1231980a
|
Advanced to getting specific warnings in the ed-page table. So that's progress.
|
2017-06-18 17:25:15 -04:00 |
|
Thomas Harte
|
82a015892b
|
Started adapting to the newly-segmented world.
|
2017-06-18 17:18:01 -04:00 |
|
Thomas Harte
|
194b7f60c5
|
Rephrased to allow non-conditional waits; expanded macros to cover all permitted lengths of read and write.
|
2017-06-18 17:08:50 -04:00 |
|
Thomas Harte
|
ebc7356db5
|
Reformulated the machine cycle slightly to support posting operation plus phase, thereby exposing the segue points at which waits might be inserted. So: to stick to the rule that CPUs expose the minimum amount of information sufficient completely to reconstruct bus activity. This breaks the Z80 for now.
|
2017-06-18 12:21:27 -04:00 |
|
Thomas Harte
|
e1a2580b2a
|
Renamed BusOperation to MachineCycle::Operation.
|
2017-06-17 21:53:45 -04:00 |
|
Thomas Harte
|
efc7f9df37
|
Combined I and R into a register pair.
|
2017-06-17 18:18:28 -04:00 |
|
Thomas Harte
|
aed2827e7b
|
Implemented a rudimentary way to test that instructions take as long as the FUSE tests think they should. Hence discovered that the (HL)-accessing BIT, RES and SET weren't. Corrected.
|
2017-06-12 22:22:00 -04:00 |
|
Thomas Harte
|
b9dbb6bcf8
|
Discovered my timing error: the I/R <-> A loads should take an extra cycle. This means the ZX80 now finally takes the correct 207 cycles per line. Fixed the video output wave to be clocked at the appropriate rate.
|
2017-06-12 18:55:04 -04:00 |
|
Thomas Harte
|
d12e50eb02
|
Corrected "should I adjust history?" tests.
|
2017-06-11 16:41:34 -04:00 |
|
Thomas Harte
|
db30f53ab0
|
Added the capacity to back-date interrupt line changes within a machine cycle, so that machines which time themselves entirely within perform_machine_cycle can still be cycle accurate on those changes.
|
2017-06-11 13:31:02 -04:00 |
|
Thomas Harte
|
b55579c348
|
Fixed usage of flush : the subclass version is definitively used.
|
2017-06-06 17:52:44 -04:00 |
|
Thomas Harte
|
3df6eba237
|
Fixed: my HALT line wasn't actually halting. NOPs followed, but the PC just kept counting.
|
2017-06-05 10:35:03 -04:00 |
|
Thomas Harte
|
e940e02126
|
Added a short circuit to set_interrupt_line, mostly to make breakpoints slightly more convenient to place.
|
2017-06-05 09:37:19 -04:00 |
|
Thomas Harte
|
7f743c6fb0
|
Got explicit about permitted type conversions.
|
2017-06-04 18:40:59 -04:00 |
|
Thomas Harte
|
096551ab3e
|
Made a first attempt to hash out the ZX80's bus. Video output isn't yet going though. Can't seem to find clarity on whether horizontal sync is really programmatic. Let's see.
|
2017-06-04 18:32:23 -04:00 |
|
Thomas Harte
|
c485c460f7
|
Imported the ZX80 and 81 system ROMs (though not publicly), added enough code to post their contents into C++ world.
|
2017-06-04 18:08:35 -04:00 |
|
Thomas Harte
|
d2637123c4
|
Added necessary support to get as far as an empty window when attempting to load a piece of ZX80 software.
|
2017-06-04 17:55:19 -04:00 |
|
Thomas Harte
|
0eebfdb4cc
|
Expanded emulation of memptr, though still incomplete. Reverted zexall tests to zexdoc. Will probably leave memptr until I've an emulated machine as test suites seem to exist, but they're machine-dependant, so figuring out how to isolate them from an architecture will be a lot easier if and when I have functioning machines.
|
2017-06-04 15:39:37 -04:00 |
|
Thomas Harte
|
7811374b0f
|
Started sneaking in memptr emulation, hopefully to get to a working BIT (hl).
|
2017-06-04 15:07:07 -04:00 |
|
Thomas Harte
|
a2f01b4a46
|
Corrected CPx bit 3 and 5 flags. I think only BIT n, (HL) with the famous MEMPTR reliance is preventing a complete pass by Zexall now.
|
2017-06-04 14:59:18 -04:00 |
|
Thomas Harte
|
f5c910beb7
|
Fixed LDIR/LDDR bit 3/5 flags. This seems once again to satisfy FUSE.
|
2017-06-04 14:18:04 -04:00 |
|
Thomas Harte
|
4e014ca748
|
Ensured BIT takes bits 5 and 3 from the computed address if used on indexed pages. That seems to cover 97 failures out of 100?
|
2017-06-04 14:13:38 -04:00 |
|
Thomas Harte
|
1a811b1ab1
|
Eliminated the function call inherent to every decode, and also moved the fixed table of operations into a non-templated base class.
|
2017-06-03 22:19:35 -04:00 |
|
Thomas Harte
|
c26349624c
|
This, of course, should be inline to gain any benefit from the slightly-tortured private implementation.
|
2017-06-03 22:00:57 -04:00 |
|
Thomas Harte
|
b642d9f712
|
Eliminates the 6502's specialised jam handler in favour of the generic trap handler, and simplifies the lookup costs of that as it's otherwise doubling execution costs.
|
2017-06-03 21:54:42 -04:00 |
|
Thomas Harte
|
fd6623b5a5
|
Attempted to bring a common hierarchy to the Z80 and 6502 test machines, particularly with a view to eliminating the special-case Jam stuff on the 6502.
|
2017-06-03 21:22:16 -04:00 |
|
Thomas Harte
|
b304c3a4b9
|
Eliminated the 6502's reliance on the micro-op scheduler.
|
2017-06-03 20:30:07 -04:00 |
|
Thomas Harte
|
3ceef2005b
|
Pulled the Z80 from the MicroOpScheduler inheritance tree as it barely uses the thing, and that allows me to make the MicroOp structure private.
|
2017-06-03 19:17:34 -04:00 |
|
Thomas Harte
|
24c84ca6f5
|
Commented out as-yet-unimplemented features.
|
2017-06-03 19:10:23 -04:00 |
|
Thomas Harte
|
7898f643ac
|
Added bus request/acknowledge logic.
|
2017-06-03 19:09:47 -04:00 |
|
Thomas Harte
|
7bd45d308a
|
Error was simply failure of the interrupt-mode setter. Fixed.
|
2017-06-03 18:58:13 -04:00 |
|
Thomas Harte
|
b3da16911f
|
Tweaked timing of mode 0, per contradictory information. Wrote a failing test of mode 2.
|
2017-06-03 18:42:54 -04:00 |
|
Thomas Harte
|
8c41a0f0ed
|
Added a test to confirm interrupts are disabled, and a response to the interrupt cycle within the all-RAM machine.
|
2017-06-03 17:53:44 -04:00 |
|
Thomas Harte
|
3e9212aaff
|
Plumbed through to allow interrupt tests, wrote an NMI test, corrected the error revealed.
|
2017-06-03 17:41:45 -04:00 |
|