


Version 0.51 / 21 JUL 2002
==========================

- This version only fixes a few little problems with yesterdays release.
It was impossible to proceed to the next level in "Bust-a-Move" because
the flash memory write was incorrect.

- I've added back the performance percentage meter due to popular demand!

- Most of the changes have been to the source code. I've found time to
make a big clean up of the Windows sections, which were the worst (although
the debugger still remains pretty messy, it's been totally isolated).
This version of the code should be much easier to port to other systems.



Version 0.50 / 20 JUL 2002
==========================

- NeoPop is now open source! (under the GPL) I hope there are people out
there who can help improve the sound emulation and fix the remaining
problems. If you have fixed a bug or added a useful feature, please
e-mail me a description of the changes.

- A lot of work has gone into making the code as tidy as possible, but
the focus has really been on the emulation core - The Windows code is
pretty messy, and will probably get a major shuffle at a later date.
I hope the interfaces will remain the same, I think i've covered every
aspect, but probably i've missed something out. This shouldn't cause
major problems for porters... I hope!

- Rather than describe every little thing, let's just say that there
have been a number of bug fixes and optimisations made across the board.
Both executables are also a lot smaller.

- Fixed a bug that was causing residual sound to be played if the next
rom you used had no sound chip initialisation (most PD roms). This was
caused by the sound chips not being reset.

- Added buffered stereo DAC output - seems to work pretty well! The timing
is wrong for all games, but it's a start. The output frequency is
compensated for and the sample is matched to fit. This stops 44Khz mode
playing 4 times faster for example.
Tried to add a DAC buffer data count to prevent overflows and overruns,
however this introduces a lot of noise... 

- Improved sound mixing, should create less noise and distortion.

- Added auto pause when focus is lost or the window is minimised.

- Fixed the communications functions to prevent "Gals Fighters" from
complaining about a link error during the menus. However, this has caused
a similar problem in "Fatal Fury" on the 1P/2P selection, however, this
is far less of a problem.

- Fixed timer interrupt levels

- I've fixed saving of the main window location in the registry.

- Disabled an optimisation in the memory viewer. This has fixed the
crashing bug that was occuring when using the shortcuts.
- The memory viewer now wraps around to 0 after the bios.
- Allowed the memory viewer to alter the rom data - this makes it
easier to test out possible hacks.

- Added HLE support for 'flash write'. The data isn't saved to disk
yet, but the rom is altered and settings are saved beteen resets.

- Hacked "Sonic Pocket Adventure" to ignore it's flash checksum.
It is now possible to proceed past the first level = thanks to Judge_
for	help with getting started on that one.

- Hacked "Metal Slug 2" so that it saves as well.

- Fixed the DAA instruction , finally! 
- Thanks to Judge_ for the code to do it.
	- Improves "CPU Test by Judge_ (PD)" - passes all tests!
	- Fixes the scores in many games
	- Fixes the betting values in gambling games.

- Added RLD and RRD instructions.
	- Fixes "Neo Cherry Master Color"

- Fixed the default hardware window border colour.
	- Improves "Squall (PD)"

- In the debugger, i've made the two breakpoint values so that they can
be copied from, this is more convenient for me when I need to remember
a value between sessions.

- Changed the memory viewer to accept the first 8 digits (previously 6)
for both the address targetter and the editor. This makes it easier to
cut and paste from the register window.
- Made the same change to the primary address box, for the same reason.

- Added colour/greyscale menu option, but it's disabled because the
greyscale core hasn't been written yet.

- Added basic uDMA support, doesn't affect anything ("Fatal Fury", etc);
- Added DMA state saving, new state version... sorry!



Version 0.43 / 12 JUL 2002
==========================

- Sound quality is now as good as it gets! I've implemented a buffered
output after seeing how it was supposed to be done by Pete Bernert and the
PeopsSpu team. This approach has made a tremendous improvement.

- Sample playing is still missing, so you'll have to wait for the 'Sega'
at the start of "Sonic Pocket Adventure" and the intro to "Faseli!" too.

- No core fixes today. Same old bugs!

- Joystick button names are now used instead of numbers in the config
dialog box, this should be more user friendly (and was easier for me than
having to re-write the dialog to support any alternative methods). Thanks
to Nick K for pointing out that numbers weren't actually helpful!

- Added a call to yield the CPU when paused, this will hopefully free up
wasted system resources. Thanks to JAZ for the suggestion. I've still to
add an auto pause option when the emulator looses focus...

- There are still some sound glitches. I have noticed that sometimes the
sound begins to break up. This can be fixed by moving the window around
to reinitialise the buffer. Not ideal, but I've not been able to detect
where the problem is being generated. I suspect that the breakups are
caused by my slow program causing gaps...

- Optimised both builds by 10%, I still need to do more to match the
performance of MGPocket and fix the remaining sound problems.



Version 0.42 / 11 JUL 2002
==========================

- Sound quality has been greatly improved, although there is still some
noise present. It is possible to recognise all of the classic theme tunes
("King of Fighters", "Pac-Man" etc), so i'm quite pleased.

- Sound frequency can be selected from the pop-up menu.

- The program should be able to cope with machines that don't have a sound
card. I haven't tested this fully though - if you have no sound card and
you get a problem, please e-mail me.

- A huge number of core optimisations, that aren't worth going into.
The only thing to know is that performance is much greater than before!
I've removed the performance percentage meter, as it was adding a useless
overhead. Most games should run at a fair speed. It doesn't matter if it
doesn't hit 100% all the time!

- Added cycle counting data for almost all of the instructions. Relative
timing should be correct now.

- Improved graphics emulation accuracy by delaying certain registers until
the next scanline. This has removed the corruption that was visible in many
of the fighting games, among others.

- Removed the graphics emulation hack that was causing "Fatal Fury" to have
an incorrect background colour. It is the only game that i've seen that
disables this colour. The implementation should now be correct all of the
time.

- An interrupt is generated if a write to 0xC000 is made by the Z80. Thanks
to Ivan for that one. Improves "Sonic" internally, I don't see how though.

- Set Vertical Interrupt level to 4 (confirmed correct), not 5 as it was. I
haven't noticed any differences, but it may have removed some artefacts in
rare cases.

- Completely re-written the input update function as it was some of the
oldest and worst code in the whole project. I've switched from the old
buffered input method, to a simple state poll every frame. This has
eliminated the problems of directions locking when the joystick was moved
very quickly, and other annoying issues. (It's also more optimal code)

- Fixed interpretation and disassembly of "POP.w (mem)", this was caused by
a long standing bug in the instruction decoding tables.
	- Fixes "Cool Boarders"
	- Fixes "Sonic Pocket Adventure" (Can't play past first level though)
	- Fixes "NeoGeo Cup '98 Plus Color (JUE)"

- Added faster, more accurate, decoding of addressing mode: (R32 + R8/R16).
This was a problem near the code that caused some special moves in "Gals
Fighters" to crash the game. These moves still cause a lock-up, but the
real reason is unknown.

- The debugger is refreshed more often, so the display is always current.

- Fixed disassmbly of "LD (mem),(nn)" in both byte and word modes.

- Added all of the remaining software interrupts (SWI) 3,4,5 and 6.
Improves "Delta Warp" by adding the blue 'explosion' effect when covering a
tile. I haven't noticed any other improvements elsewhere though.

- The oldest feature on my todo list 'Autofire' has finally been added!

- Reversed the value when debugging the sound chip volumes. I hope this
helps Ivan!

- Added system language selection (English / Japanese). Changing the
option will take effect on the next reset. I didn't want to force a
reset because it may only be an accidental change. I don't think this 
option will be adjusted often. Note: This feature is not connected with
the language of the emulator. Configurable language resources will come
in a later version. This option was easy to implement, configurable
menu / dialog languages won't be so simple for me.



Version 0.41 / 30 JUN 2002
==========================

- Added support for sound emulation today.
Since compatiblility has been raised significantly I decided it was about
time to add sound. I was expecting it to be very difficult, instead it was
relatively painless. I must point out that I cannot take credit for most of
the core sound emulation, it was borrowed from the MAME source code, file
"sn76496.c". I did write the DirectSound interface and buffering code
though! I've never written manual sound generation before, and it would have
taken a lot longer without it. Thanks to everyone involved in writing this
driver.

- Now for the bad news :-) The sound output is quite choppy - I don't think
the timing is 100% accurate. Well, at least it's a start!

- DAC sample playing is not supported as of yet, that means that the intro
to "Faselei!" is silent, along with a few other missing sounds in other
games.

- I've added menu options for muting the sound (if the choppiness is too
much) and for switching between stereo and mono. The output frequency is
currently fixed at 44100hz, the option to change that will appear at a later
stage.

- The state of the sound chips is saved, requiring a change of version for
states - rendering old ones unusable. I have added this early so that it
causes a minimal disruption to people using saved states.

- No changes have been made to the emulation core. Compatibility remains the
same as version 0.40. A few minor bug fixes have been made though,


Debugger
========

I've improved sound code debugging by distinguishing the left and right
channels in the output messages.





Version 0.40 / 29 JUN 2002
==========================

- Trimmed out the old history from this file. I want to start with a clean
sheet as this version is greatly improved over the last versions.

- Removed the 32bit parity function and calls to it, as no instructions are
supposed to use it. This should reclaim a few extra clock cycles and improve
accuracy. Also, optimised the 8 and 16 bit parity functions, thanks Judge_
(Haven't fixed DAA yet though! :-)

- Improved faking of EEPROM bios calls by returning a success status
message. This improves "Fatal Fury" so you can now use the 'reset memory'
option from the config menu.

- Added instructions BS1F,BS1B. This improves the SNK logo in "KOF - Battle
De Paradise". It also improves "Koi Koi Mahjong" internally, but I don't
know in what way as it's in Japanese.

- Lowered the battery power status to within actual hardware limits.

- Memory accesses ignore the top 8 address bits when reading and writing.
This has fixed a large number of games that previously had graphical
corruption.

- Added a special HACK for "Puyo Puyo 2" because it does work very well,
except for a crazy routine at the beginning that overwrites critical system
data!

- Fixed a small bug in the V flag emulation of "DEC #3,(mem)"

- Fixed a small bug in "DEC #3,r", it wasn't setting the N flag correctly.

- Fixed a set of stupid bugs in "ADD (mem),R", "ADC (mem),R", "SUB (mem),R",
"SBC (mem),R", "ADD (mem),#", "ADC (mem),#" and "SBC (mem),#" as they were
adding the wrong sized values together (stupid cut and paste error!). Fixed
just about every game that wasn't working. The short list includes:
"Bikkuriman 2000", "Bust-a-Move", "Big Bang Pro Wrestling", "Delta Warp",
"Dynamite Slugger", "Dive Alert", "Gals Fighters", "Crush Roller", "Metal
Slug", "Pocket Reversi", "SNK vs CAPCOM", "Neo Turf Masters" ... - Well, you
get the picture!

- Made a huge number of optimisations: Improved speed drastically by
checking timers and interrupts less often. Optimised register access a bit,
removing a layer of indirection. Optimised status flag get and set methods
into macros.

- Fixed STCF instruction (all modes) - it was very badly written the first
couple of times :-) Also removed Word mode from "STCF #3,(mem)" and "STCF
A,(mem)" as this isn't actually allowed. Also removed Word mode from "LDCF
A,(mem)" for the same reason.

- Changed the emulation loop to currectly emulate twice as many TLCS-900h
instructions as Z80 ones. This only applies to the release version, the
debug build has a 1:1 ratio of instructions for simplicity. This has no
noticable effect on accuracy, just performance. The debugger runs at about
1/3 of the speed of the release version unfortunately.

- Added a speed display to the window title. Inspired by VisualBoyAdvance,
it shows as a percentage of the correct refresh rate of 59.95 fps. Note that
cycle counting for instructions hasn't been completely implemented, so the
value will not be entirely accurate, but it does give a rough estimate of
performance. In case you are wondering, my 600Mhz PIII is capable of about
80-90% for most commercial games. I think this value will increase when
timing becomes more accurate. Certainly - no games feel slow any more!

- Input is now polled every frame. It's possible to perform special moves in
fighting games, so I think this frequency is adequte.

- The Real Time Clock data is updated every frame as well. This is more
optimal than older versions where it was updated before every instruction.

- Optimised the graphics Z-Buffer (used for correct sprite priorities) as it
only needs to know about the current scanline.

- Optimised the graphics update by having two code paths, one for each
colour depth. This has raised overall performance a few percent.

- Both executables are now packed using UPX for a smaller download.


Debugger
========

- Improved debugging of sound emulation, addresses 0x4000 and 0x4001 are
handled correctly as the left and right sound channels. I've been studying
the MAME driver for the sound chip used to gain some insight into how the
sound output is to be decoded. I hope this is better for you Ivan.

- Improved disassembly of shift and rotate instructions so that specifying
a movement value of 0 translates correctly as 16.

- Communications bios calls can now be decoded by the debugger, but I have
disabled them for this release as I want to add a seperate filter, there are
too many calls made and it will obscure standard bios calls.

- Added detection of reads and writes to NULL in order to trap possible
problems. This has let me fix a bug in "Puyo Pop" that was corrupting system
values. This game is now playable after the code was hacked out.

- Added a new run option "GO + DIS" which runs code while disassembling the
TLCS-900h instructions. This proved useful for big traces.

- Made "EI 7" disassemble as "DI" to match the CPU documentation.

- Fixed auto address entry positions for memory / instruction exceptions.

- Removed unknown SWI error message, "Delta Warp" uses SWI 3 a lot without
having a problem. I'll look into this later, to see what it's trying to do.

