djnzx48 wrote: ↑Fri Oct 12, 2018 3:04 am
Yeah, I agree that targeting the actual machine is preferable. The reality is though that not everyone owns real Spectrums, and many people are forced to use emulators as their only option. Personally I'd like to write programs for platforms that people will run them on, and I'd say Spin, SpecEmu and Spectaculator together probably make up the majority of emulators in use, without considering clones.
Even if you ignore emulators you still have to deal with compatibility issues, such as the contended memory banks being different on the +2A/+3. I know emulators aren't official Spectrum models, but they're in wide use so it's reasonable to want to support them.
And it's not just a binary decision. You can develop for the Spectrum primarily but still have emulation/additional hardware in mind, for example with ULAplus.
Sure. Perhaps, I didn’t express myself clearly. I didn’t mean to say you should go out of your way to write software that will only work properly on real hardware. Quite the opposite, in my book, it would be a mistake to go out of your way to write software that will only work properly
on a particular emulator, even if it happens to be the most popular emulator.
Yes, it’s difficult enough to create workarounds for all the models of the real Spectrum. Aside from RAM contention differences, here are a few other quirks of the real hardware:
1. 48/16K Spectrums display colors differently from all the subsequent iterations. Darker colors exhibit smaller differences between their bright and non-bright variations (e.g. bright blue and non-bright blue look virtually identical). I’m not aware of any emulator that ever attempted to implement this behavior.
2. The 48K/128K/+2 Spectrums are affected by something commonly referred to as the ULA snow effect, if the I registered is pointed to a particular range of values and the CPU is accessing contended memory. Some emulators can reproduce this effect to a certain degree of accuracy. None (that I know of), reproduce it 100 percent correctly. Many, simply ignore this quirk altogether. Note: At least one Spectrum game—
Vectron (1985)—used it deliberately as a special effect.
3. Timing differences between all three Spectrum architectures—48K/128K/+2A. These have been mostly accurately implemented in many emulators, especially those that are being actively maintained.
4. Reading from certain ports (e.g. any port with Bits 1 and 15 reset) will cause the 128K/+2 machines to reset/hang. Some emulators don’t implement this behavior, or implement it incorrectly.
5. The floating bus behaves differently on the +2A/+3 than it does on other models. Since we’ve extensively studied and fully described its behavior in late 2017, only SpecEmu and Spectramine have correctly implemented it.
6. Issues 1 and 2 of the Spectrum 48K return different values when port $FE is read from. This causes some games that use simplified (and incorrect) keyboard polling routines to not work on later Spectrum models. Some emulators do offer an option to enable this behavior, but not all.
7. The Z80 has its own set of quirks, and not all emulators implement its behavior accurately.
8. No emulator is, of course, capable of displaying the Spectrum output at its native 50 fps. This isn’t the fault of any particular emulator, naturally, but rather the systems they runs on: most modern computers are locked to a 60 Hz refresh rate.
The above is by no means an exhaustive list, by the way.
So, given than no emulator implements all the quirks of the real hardware 100 percent correctly, how do you find the lowest common denominator? Do you just drop features or implement workarounds so that your game runs okay on the oldest and buggiest emulator? Do you think emulator authors will be incentivized to implement any of the missing features or fix the existing bugs if developers try to go out of their way to work around
the emulators’ shortcomings?
I don’t know exactly when the first Spectrum emulator was written, but I think it’s a safe bet to say it was some time in the 1990s. People have had over a quarter of a century to figure out how to accurately emulate a very inexpensive and fairly simple 8-bit computer form the 1980s. How come no-one has done it yet? I don’t know the exact answer to that question (but am aware of the technical hurdles), yet I’m pretty sure it’s partly due to the complacency of Spectrum developers. Because regular gamers are rarely very demanding. The colors are slightly off? Who cares . . . The sound isn’t quite right? Who cares . . . The timing is not super accurate? Who cares . . . As long as I can run
Manic Miner or
Jet Pac . . .
Now, by no means do I dismiss the efforts of emulator authors. I fully understand that it’s a tremendous task in and of itself, especially if you don’t have access to real hardware or the knowhow of reverse engineering it. I myself primarily use emulators for development and most of the testing, and only use real hardware for final testing and fine tuning. But I don’t cut features or abandon techniques or otherwise compromise my code to cater to the shortcomings of a particular emulator. Nor do I add features that will only work in a particular emulator,
unless they also work on real hardware.
That’s my philosophy in a nutshell.
Pegaz wrote: ↑Fri Oct 12, 2018 11:10 am
Emulators are very important and the best of them already behave practically as real Spectrum.
Their benefits will be even greater in the future, as there will be less and less working Spectrum around.
For me, every Spectrum is equally important , whether its based on emulator, fpga or some other non-original hardware.
Otherwise, even Amstrad models might not be considered as original hardware too.
With the emulators, Spectrum will drastically extend its life span and user base, without them it will only become just a piece of hardware in the museum.
Yes, but what do those emulators actually
emulate? The Spectrum or the emulator author’s idea of what the Spectrum should have been like? I’m all for the preservation of the Spectrum. (I doubt many people will share our passion to the same degree it after our generation finally kicks the bucket, though.) But let’s preserve the
actual Spectrum, to the best of our abilities. While the actual machines still run and while the people who understand, or can figure out, how they work are still around.
I’m not an activist at heart, but I do feel like we need to form a lobby to persuade emulator authors to try to make an effort and work on improving the
emulation, rather than adding features to their oeuvres. However, I know what most of them will say (and I completely understand them): “We’re just doing this for fun. We’re not working for you. We don’t get paid for this, anyway, and simply spend our free time to do the things we love. If you want your bloody ‘super-accurate emulation,’ do it yourself.”
A man can dream, though. A man can dream . . .