SpectrEm History file:

A little note on version numbers. You may be thinking "that's a high versiom
number for a barely functioning program" but the plan is to emulate a plain
48k Spectrum and when that's done it'll hit version 1.0.

V0.1 - Initial compile

 - All CPU opcodes implemented with the exception of DAA, RLD, and RRD.
   CPU VERY buggy!
 - Line-by-line video code implemented
 - ROM loading implemented

This version appeared to be partially resetting the spectrum until I realised
the video code was reading from the start of the ROM rather than the start of
the RAM! Doh! This means the ROM is getting written all over! :(


V0.11 - Repair and bugfix

 - Video code working correctly
 - Several major opcode bugfixes

A rather worse looking effort than the initial try, this. No sign of any life
on the video side but at least the rom isn't being quite as flattend by buggy
opcodes!


V0.2 - Partial reset!

 - Basic GUI and debugger added!
 - Major opcode bugs fixed

Display! The CPU gets a little way through the reset before flying off into
NOP territory (unwritten RAM). Seeing it get even this little way felt great!
GUI includes 'About', 'Run', 'Exit', 'Debug' buttons.


V0.21

 - GUI upgrade
 - Minor opcode bugfix

Flasher GUI including 'Hide GUI' and enhanced debugger, now with breakpoints!


V0.22 - Near full reset!

 - Basic keyboard input implemented
 - A few minor opcode fixes
 - Gets as far as printing '@' then puts a few pixels on the screen and hangs


V0.3 - File access!

 - Snapshot(SNA) format loading implemented
 - Major debug of call <cond> opcodes. It was pushing the pc if <cond> but
   jumping to the call regardless of <cond>! Not enough bloody braces {} :P
 - Resets as far as displaying '@1982 Sinclair Technologies Ltd' then hangs
 - Debugger fully debugged, now disassembles dd/fdcb prefixed opcodes properly

GUI now includes 'Load'. Most snapshots display their initial screen for a
fraction of a second and the crash. Arcadia, bless its little heart, runs
right through the intro (vertically scrolling Imagine logo and writing
'ARCADIA' on the screen) although the logo graphics are corrupted. It crashes
immediately after this. Keyboard must be broken though as it doesn't do 'Press
any key to continue'.

V0.4 - No ROM writing

 - Now impossible for the CPU to write to the ROM
 - VBlank interrupt implemented - Lots of games now hang on intro screen
   instead of simply crashing.
 - In/Out implemented giving:
 - Full keyboard access (as yet untested)
 - Kempston/Fuller/Sinclair1/2 joystick access via pc keyboard (untested)

Arcadia now gets as far as drawing the (highly corrupted) first level screen
and scrolling the players ship half-way down before it crashes! Lancelot
draws the initial screen with colour cycling and, on pressing a key, draws the
first level (slightly corrupted) before crashing. On occassion it simply locks
leaving this screen visible.


V0.5 - BASIC begins to take shape!

 - Sound output emulated
 - Fixed major bug in rl, rr, rlc, rrc ops (rotate never done!)
 - Fixed keyboard access (botched but may work, untestable due to bad pc
   keyboard access)
 - Fixed vblank interrupt to 1 call per vblank :)
 - PC Backspace key now mapped to Shift+0 keys on Spectrum 

Spectrum BASIC now starts when a key is pressed after a reboot. However, it
fails to correctly parse any commands or program line input. Sound output is
really dodgy on Lancelot but it now plays! Input, however, is not working
correctly. It is very hard to do a jump + right/left. Sound is not emulated
correctly.


V0.51 - BASIC WORKS!

 - Fixed major bug in jp <cond> ops (pc not always correctly incremented)

Command line is now correctly parsed! BASIC hangs when expected to produce
output/error (eg. D Break or 0 OK).


V0.52 - Oh the shame!

 - Fixed major major major bug in SNA loading routine! Now loads 48k memory
   instead of 16k! ARGH!

Everything loads. Input is still poor. The pc keyboard reading routine needs
work. Arcadia fully working; Lancelot fully working; Collosal Caves fully
working. Unplayable due to input problems.


V0.6

   - Finally managed to get input to be responsive.

Several games now partially playable. Lancelot - bug causes last object to be
uncollectable, thus you can't leave the first level. Arcadia - Problems with
the timer and score, thus it doesn't seem to advance levels. Trap Door -
appears fully playable; time line doesn't appear but you still get the score
counting down so that's okay. Various others work with graphical glitches and
speed problems (too fast)- Jetpac, Bak2Skool, JSW, Manic Miner... Collosal
Caves seems to work fine.


V0.65

   - Major opcode overhaul. All rotate/shift ops fixed.
   - Speed locked to 50fps
   - Many games now playable. JetMan now walks in the correct direction. :)

The majority of opcodes have been tested and are fully working. Arithmetic
opcodes need doing and there should be a major improvement in emulation when
they are finally completed. Block transfers and ins/outs still need checking.


V0.66

   - Sound emulation improved a little

Sound generation is now done at a lower level. It seems to provide continuous
tones and pauses at the right places in game music but won't play any notes 
(it's stuck on a single note). This must be dead easy to fix but I understand 
less than nothing about sound generation and physics and such stuff so it may 
take a little while. Arcadia and other programs that did a LOT of sound 
output now run at full pelt, however, which is good.


V0.67 - Name change

   - 8 bit add/sub/cp ops now appear to set flags correctly
   - Several games now run much better (eg. AticAtac)
   - Sound emulation is done through PC speaker (temporarily)
     Quality is very poor.

The program is now called SpectrEm because SpecEm is apparently already used
SpectrEm means that I now have two puns on 'Spectrum', including the rom being
called spect.rom. Clever eh? :)
Sound is now output through the PC speaker because that way at least it works,
albeit badly.


V0.7 - Several nasty bugs fixed

   - Halt opcode now continues CPU emulation on interrupt.
   - The interrupt flip-flops are now loaded from SNA files correctly.

Everything seems to be working dandily now :) No games hang after loading,
BASIC works fine, executing lines and delivering the appropriate error/
acknowledgement message afterwards before returning you to the 'command' line.
There are still speed problems, however. Music plays too fast and many games
run far faster than I remember. Other games, however, seem to run fine, and
timers appear to be running at real time speed (1 second game time ~= 1 second
real time).

V0.75 - More bugs fixed

   - LDIR type ops fixed. Several timing problems solved


V0.8

   - Contended memory now partially emulated
   - CPI/R ops emulated properly now
   - Sound output through SoundBlaster card

Still a problem with the BASIC PRINT <number greater than 0> routine. Produces
strange output. Still some timing problems. SoundBlaster output means that
games which use the Spectrum bleeper a lot will be slowed down.
