-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathChangeLog
7158 lines (4677 loc) · 353 KB
/
ChangeLog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
-- 0.9.38.7: --
September 30, 2015:
Fixed several malformed trio_sscanf() format strings in regards to field width, that could cause stack buffer overflows in certain cases.
September 29, 2015:
PSX: Added skeleton BCzF/BCzT instruction emulation, and fixed handling of illegal CP0 instructions.
September 25, 2015:
PSX: Added emulation of CPU exception-handling bad address register.
PSX: Implemented emulation of the Coprocessor Error field in the CAUSE register.
PSX: Added emulation of CPU exception-handling branch target register.
PSX: Fixed handling of CAUSE bits 30 and 31 when an exception occurs immediately after a branch instruction is executed.
PSX: Fixed link address calculation for JAL, JALR, and B*AL instructions when they're executed in a branch delay slot.
PSX: Corrected emulation of the quasi-illegal mirrors of the BGEZ*/BLTZ* type instructions.
PSX: Added emulation of a pipeline quirk that occurs with back-to-back load instructions to the same register(previously only emulated with LWL and LWR).
September 22, 2015:
Fixed a bug in the debugger's disassembler that could break disassembly when a disassembled instruction wraps around the end of the CPU's program address
space to the beginning.
September 18, 2015:
PCE: Removed experimental and unfinished hypothetical subtitle hardware emulation which had a few security-related problems.
September 16, 2015:
MD: Fixed registration of main RAM in the cheat engine to be mirrored properly.
PCE: Fixed a bug that caused the debugger's disassembly and memory view to show a wrong value for the HES bootstrap register
at $1D00.
PCE: Fixed a bug that sometimes caused the "TIMV" register in the debugger to display "FFFFFFFF" instead of "FF".
The date and time of the compilation of qtrecord.cpp are no longer written to recorded QuickTime movie files, to solve
a minor privacy issue and a build reproducibility issue.
PSX: Rewrote parts of the timer emulation code to fix several issues; fixes wrong music playback speed problem
in "RPG Tsukuru 4".
-- 0.9.38.6: --
August 9, 2015:
PSX: Fixed a bug in the calculation of time taken by some GPU commands while in interlaced mode; fixes graphical glitches in
"Mr. Driller G".
PCE, PCE_FAST: Added more delay to CD Read command's returning of sector data, to fix a lockup in "Mirai Shonen Conan",
and a stuck note problem in "4 in 1 Super CD".
-- 0.9.38.5: --
June 26, 2015:
PSX: Generate a seek error when trying to read audio sectors(when the appropriate Mode bit isn't set), and generate a bad command error
when executing ReadN/ReadS with a non-PS1 disc. Fixes a lockup in "Vib Ribbon" when trying to play with audio CDs.
June 20, 2015:
Altered SHA-1 and SHA-256 test code to work around a preprocessor-related bug in gcc.
NES: Fixed a mapper 19 sound emulation bug; fixes music issues in the Japanese release of "Rolling Thunder".
PSX: Replaced a GPU debug puts() with code that respects the psx.dbg_level setting.
June 18, 2015:
PC-FX: Corrected handling of width/height of 0xA for KING BG1-3, per tests on a PC-FX. Fixes a graphical glitch in "Sakuraigar Mode" in
"Tyoushin Heiki Zeroigar".
May 5, 2015:
PSX: Added some debug messages to the memory card emulation code, outputted when setting psx.dbg_level is set to certain values.
April 29, 2015:
PCE, PCE_FAST: Corrected decimal-mode ADC and SBC behavior(especially for "illegal" input values), per tests on a HuC6280.
April 22, 2015:
Added a test to tests.cpp for gcc bug #60196(triggered with non-default optimization flags).
April 19, 2015:
Added a missing dependency statement to configure.ac, whose absence broke compilation with --disable-pce --enable-pcfx
April 16, 2015:
WonderSwan: Removed erroneous constraints that were preventing opposing X* and Y* buttons from being pressed simultaneously, and changed the
names of the the X* and Y* buttons used during input configuration, per tip from trap15.
-- 0.9.38.4: --
April 12, 2015:
PC-FX: Reorganized the debugger's register view to be slightly more space-efficient horizontally.
NES: Migrated the rest of the *GetRegister() and *SetRegister() debugger functions over to the newer-style interface.
PC-FX: Migrated the rest of the *GetRegister() and *SetRegister() debugger functions over to the newer-style interface.
April 11, 2015:
PC-FX: Migrated debugger functions PCFXDBG_GetRegister() and PCFXDBG_SetRegister() over to the newer-style interface that takes integer IDs instead
of std::string.
VB: Migrated debugger functions VBDBG_GetRegister() and VBDBG_SetRegister() over to the newer-style interface that takes integer IDs instead
of std::string.
WonderSwan: Migrated debugger functions WSwan_GfxGetRegister() and WSwan_GfxSetRegister() over to the newer-style interface that takes integer IDs instead
of std::string.
PC-FX: Added support for setting breakpoints on writes to specific VDC registers, by setting an Aux Write Breakpoint on an
address ranging from A0000-A001F(VDC-A) or B0000-B001F(VDC-B).
April 10, 2015:
Debugger: Relaxed most maximum string length restrictions on user-inputted addresses(to allow for lazily leaving an excessive number of 0s at the
beginning of an address, for example).
Debugger: "Goto Address" prompt in the memory editor can now be activated by pressing "ENTER"(in addition to "G"), and "Disassembly Address" prompt in the main debugger
view can now be activated by pressing the "G" key(in addition to "ENTER").
April 9, 2015:
NES: Added sprite RAM to the debugger's memory editor.
NES: Fixed some issues with the debugger's graphics/tileset viewer.
April 8, 2015:
PSX: Improved GPU texture cache emulation accuracy per tests on a PS1; fixes graphical glitches in the menus of "Tigershark".
April 5, 2015:
PCE: Added support for setting breakpoints on writes to specific VDC registers(like MAWR, BXR, BYR, etc.), by setting an Aux Write Breakpoint on an address
ranging from 20000-2001f(hexadecimal).
April 4, 2015:
Avoid left-shifting negative values in hw_sound/pce_psg/pce_psg.cpp
Added a couple more tests regarding left shift of signed integers to tests.cpp.
April 2, 2015:
Debugger: Fixed half-broken re-activation of the debug screen when a breakpoint triggers and the user was last on a debug screen other than the
main one.
Debugger: Fixed a rounding issue that could cause insufficient disassembly lines with some *.debugger.disfontsize setting values.
PSX: Hooked up writing(editing) in the debugger's memory editor for "CPU Main RAM".
March 29, 2015:
PCE: Removed old leftover debug puts() in HuC6280 emulation code.
Debugger: Fixed a bug that could cause breakpoints to be skipped if the 'R' key was pressed(or auto-repeated) while outside of step mode.
NES: Fixed highpass filter coefficient calculation.
SNES: Fixed a bug that was breaking input after triggering a virtual Reset/Power Toggle event when a non-gamepad controller(e.g. mouse) is currently
selected for a port.
March 23, 2015:
NES: Fixed a minor sound emulation bug.
March 15, 2015:
GBA: Fixed several instances of left-shifting negative values in thumb.cpp.
PC-FX, VB: Fixed an instance of left-shifting uint64 by 64 in the FPU emulation code.
March 14, 2015:
GBA: Fixed a few instances of technically undefined behavior(shifting 32-bit int by >= 32, and left-shifting negative values) in arm.cpp.
March 11, 2015:
Reworked a test in tests.cpp to better reflect the requirements of certain undefined behavior some code still (unfortunately) relies on, to avoid
triggering an assert() during startup when compiled with llvm/clang 3.6.
March 6, 2015:
PCE: Fixed a major VRAM DMA emulation regression introduced around version 0.9.16-WIP, that breaks some homebrew software.
NES: Altered mapper 185 emulation to fix "Bird Week", "B-Wings", "Sansuu 1 Nen", "Sansuu 2 Nen", "Sansuu 3 Nen", and "Seicross (version 2)".
PSX: Added a kludge to the core cheat file reading and writing code to work around the mess created by our flawed game ID generation code
(the PS1 game library is enormous, and many games only have one track, leading to many collisions); effectively, the game's filename(which was previously
regarded as a comment), is now used in addition to the game ID.
-- 0.9.38.3: --
March 4, 2015:
NES: Fixed mapper 69 IRQ acknowledge behavior, per tip from tepples.
February 24, 2015:
MD: Fixed an out-of-bounds array access in the 68K emulation code.
Avoid passing NULL to memcpy() in netplay.cpp.
MD: Fixed some code doing misaligned memory writes in vdp.cpp.
February 23, 2015:
Avoid blitting to the screen when visibility is lost(i.e. window is minimized), to reduce CPU usage and to prevent memory usage from skyrocketing on
Windows under certain conditions.
February 22, 2015:
PSX: Tweaked non-logical CD seek emulation to fix lockups in some versions of "Tomb Raider".
February 17, 2015:
PSX: Fixed Justifier and GunCon x position being off when setting "psx.h_overscan" is set to "0".
-- 0.9.38.2: --
February 15, 2015:
PSX: Fixed some miscellaneous minor issues in the triangle rasterization code.
PSX: Fixed a GPU timing regression introduced around version 0.9.37; fixes a disappearing graphics glitch in "Tobal No.1".
-- 0.9.38.1: --
February 11, 2015:
NES: Subtract 3 from emulated 6502 stack pointer on reset, to match what reportedly occurs on a NES and to fix a certain poorly-programmed
"Legend of Zelda" game hack.
February 9, 2015:
Allow interrupting the virtual device input configuration process(it was broken in 0.9.38-UNSTABLE); though of course interrupting it will still
leave the configuration in a broken state(but that's not a regression ;)).
PSX: Fixed a bug that was causing a segfault on loading a PSF/EXE file(a regression introduced in 0.9.38-UNSTABLE).
February 8, 2015:
Clear override settings on game close(for the benefit of forks/ports).
-- 0.9.38-UNSTABLE: --
February 5, 2015:
Lynx: Added support for custom palettes.
January 31, 2015:
Split cdrom/audioreader.cpp into multiple files.
January 29, 2015:
Dropped physical CD support.
Throw an error, rather than crashing, in the CUE sheet reader if a track is missing.
Throw an error in the CUE sheet reader if an M:S:F time contains a component out of range.
Implemented rudimentary support for CD-i discs (images), but no actual CD-i emulation, of course(yet :p).
January 27, 2015:
PSX: Added support for reading (synthesized) CD sector data located at MSF 00:00:00 through 00:01:74.
Fixed completely broken synthesis of pregap data(mode 1/mode 2) sectors with CUE+whatever.
PSX: Refactored leadout track sector data synthesis handling into the core CD reading code.
January 26, 2015:
PSX: Host system file/disk access time is now partially masked by emulated seek time when using CD images(except TOC+BIN with
embedded subchannel data), which should reduce the probability of sound buffer underruns when
running with "cd.image_memcache" set to "0"(the default).
The CloneCD format reader now always caches the subchannel file data in memory on load, regardless of the "cd.image_memcache" setting's value.
Added setting "osd.message_display_time".
Added undocumented setting "srwautoenable".
January 25, 2015:
PSX: Fixed a problem that broke building after passing --disable-debugger to the configure script.
January 24, 2015:
PCE_FAST, VB: Now dynamically-allocate the Blip_Buffer objects, and made very minor tangentially-related optimizations to the sound emulation code.
Refactored command key processing to be a bit cleaner, and to fix a couple of issues in the process(avoid triggering a command if keys/buttons are pressed
while Mednafen is starting up, and to skip the input.ckdelay delay when selecting a command key to remap after starting the process via F2); some of the
changes could conceivably cause regressions, as the modified code was very old and convoluted.
January 18, 2015:
PSX: Improved some Read*/SeekL versus status bits versus GetLocL semantics, to fix a lockup in "Harukanaru Toki no Naka de - Banjou Yuugi".
PSX: SetLoc CDC command now generates an error on invalid arguments, per tests on a PS1.
January 17, 2015:
PSX: Fixed the value that the "Mode" CDC parameter is reset to in the CDC Reset command; fixes lockups in "This Is Football 2" and
"Disney's Pooh's Party Game: In Search of the Treasure".
PSX: Fixed some issues with emulation of CDC command GetTD, per tests on a PS1.
PSX: Improved CDC result FIFO emulation accuracy; fixes a startup lockup in the Japanese version of "CyberSled".
PSX: Fixed a line-drawing regression from a Dec 28 change.
PSX: Fixed a few minor bugs in the GPU RAM write and read commands, per tests on a PS1.
January 15, 2015:
PSX: Tweaked CDC SeekL timing to fix a random lockup problem in Wing Commander 3.
January 14, 2015:
Fixed a small memory corruption issue in the input grabbing/command key disable toggle code, and reworked the code to be more verbose in the
status message it displays and to prevent activating certain combinations of input grabbing/command key disabling that can be confusing to deactivate.
January 13, 2015:
PSX: Fixed some problems with multitap emulation that were preventing DualShock functionality(such as rumble) from working properly when the
emulated DualShock was behind an emulated multitap.
January 11, 2015:
PSX: Allow dithering on non-gradient lines(instead of only on gradient-colored lines), per tests on a PS1.
January 10, 2015:
PSX: Fixed an off-by-1 saturation/clamping related bug in the RTPS/RTPT emulation code.
January 9, 2015:
PSX: Improved emulation of the GPU info/VRAM read latches, per tests on a PS1.
PSX: Added support for GPU texturing disable bits, per no$ notes and tests on a PS1(still need to implement the actual functionality of texturing
disabling, though).
PSX: Return GPU display mode bit 7 in GPU status port reads properly(though we still don't emulate the effects of setting that bit to 1).
January 1, 2015:
PSX: Removed most of the event system pedantic sanity checks(and associated computational/cache overhead), as they've long outlived
their usefulness.
December 29, 2014:
No longer ignore settings in configuration files when the value is empty.
December 28, 2014:
CDPLAY: Increased output volume by 3.5dB.
Added support for per-game configuration override files.
PSX: Fixed a minor line drawing bug, per tests on a PS1.
December 27, 2014:
PSX: Fixed a few instances of left-shifting a negative value, and signed integer overflow.
December 26, 2014:
PSX: Replaced SimpleFIFO usage in GPU and MDEC emulation with a new FastFIFO class.
December 25, 2014:
PSX: Altered an emulation loop exit condition to not be based on psx.slstart* and psx.slend* settings(to fix a potential
desynchronization issue with netplay and input-recording movies).
Removed VLA usage in qtrecord.cpp.
December 24, 2014:
PSX: Tweaked the region detection heuristics to support a hacky Russian translation of Tomb Raider 1.
Added MDFN_lzcount32() inline function to math_ops.h to replace direct usage of __builtin_clz() in psx/cpu.cpp.
PSX, PC-FX, VB: Added alternative to computed-goto in the CPU emulation cores, for crazy people who want to compile (parts of) Mednafen
with MSVC.
December 23, 2014:
PSX: Fixed a bug that could cause a significant mischeduling of timer/root-counter 1's IRQ event under certain conditions.
PSX: Brought MDEC decode timing closer to what it is on a PS1; fixes stuttering issue in the early FMV-background sequence
in in Parasite Eve II.
December 21, 2014:
Replaced usage of case-range and VLAs with non-GNUish alternatives in:
cdrom/CDAccess_CCD.cpp
cdrom/CDAccess_Physical.cpp
gb/gb.cpp
general.cpp
lynx/system.cpp
md/input/megamouse.cpp
md/system.cpp
nes/input.cpp
netplay.cpp
pce/subhw.cpp
pce/vce_sync.inc
pcfx/debug.cpp
psx/cpu.cpp
psx/spu.cpp
psx/input/memcard.cpp
settings.cpp
vb/debug.cpp
wswan/v30mz.cpp
-- 0.9.37.1: --
December 19, 2014:
Fixed some issues causing compilation errors on gcc 4.7.x.
Conditionalize the compilation of shared hardware emulation components(such as 68K, Z80, YM2612, etc. emulators) based on what emulation modules
are being compiled in, since support for loading external emulation modules never went anywhere, and if we do eventually add support for it, the exported
symbols won't include the common specific hardware emulation components.
Fixed some code causing compiler errors with clang 3.4.0.
Fixed broken loading of save states made with 0.9.37+ on big-endian platforms(0.9.37 regression).
fflush() before fstat() on the underlying file descriptor in FileStream::size() if the stream is open for writing.
December 18, 2014:
Added zlib type-size sanity tests to tests.cpp
_LARGEFILE64_SOURCE and _LARGEFILE_SOURCE are now defined to "1" in config.h, for zlib purposes.
December 17, 2014:
PSX: Avoid undefined behavior(that wasn't currently causing any problems) in the CPU core.
December 16, 2014:
PSX: Clamp final SPU output samples(before volume adjustment and resampling) properly; lack of it wasn't causing any problems per-se, but it could have
been an issue in the future.
GB: Load GBC custom palette from "gbc.pal", not "gb.pal"(0.9.37 regression).
-- 0.9.37-UNSTABLE: --
December 15, 2014:
MD: Added EA 4-Way Play multitap emulation, based on information from Charles MacDonald.
MD: Fixed Team Player save states(sub ports weren't getting unique section names).
December 14, 2014:
MD: Rewrote the Mega Mouse emulation code so it actually works.
NGP: Added a couple of missing sound chip emulation variables to save states.
MD: Fixed some issues with the new multitap support code, including removing Hyper Dunk/Double Dribble from the internal database due to issues
the game has with multitap in some game modes.
PSX: Fixed a potentially-nasty sizeof()-related bug in frontio.cpp.
PSX: Tweaked Justifier lightgun emulation to fix problems with occasional extremely wrong positioning in "Elemental Gearbolt".
December 13, 2014:
PSX: Reworked how overscan is hidden when the psx.h_overscan setting is set to 0 to not cause netplay desync with lightguns
if different players have that setting configured differently.
MD: Added emulation of Sega's Team Player multitap.
MD: Added default key to button assignments for the emulated 6-button gamepad on virtual port 1.
December 12, 2014:
PSX: Fixed SPU audio mixing so that reverb output respects the main volume control, and to correct output precision/ranges/clamping, per tests on a PS1.
Fixes excessive reverb volume in some parts of "WipEout", and likely other games as well.
Mednafen's PS1 emulation audio output is also now about 3.5dB louder than before, while still maintaing a 2.5dB headroom.
PSX: Greatly simplified the reverb address wrapping logic, per tests on a PS1.
December 11, 2014:
Various const char* to const std::string& changes.
Added additional MDFN_GetSetting* inline functions that take a const std::string reference instead of a const char*, and call .c_str() internally,
to cut down on .c_str() usage elsewhere.
Added setting "filesys.state_comp_level".
Removed setting "filesys.disablesavegz".
GB, GBA, MD, VB, SNES, WonderSwan: Save-game memory files are no longer written gzip-compressed.
GBA: Removed support for loading EEPROM from the save-game memory file with "sav" extension(last produced by Mednafen version 0.8.1).
PSX: Made minor precision-related changes to the SPU reverb algorithm code, per tests on a PS1.
December 10, 2014:
PSX: Added emulation of unaligned access to the registers controlling the front input/output ports(and no longer triggers an assert() when/if it
happens).
PSX: Fixed broken emulation of an esoteric CDC feature, that could lead to an assert() being triggered under specific circumstances. Fixes
the "Rockman 8" intro FMV(previously, Mednafen would abort out right after the end of the FMV if it was allowed to play all the way through).
December 9, 2014:
Reinitialize some input info vectors properly in drivers/input.cpp on emulated device change(so we don't get hilariously bad messages about
analog mode being enabled on a lightgun ;)).
PSX: Added setting psx.h_overscan, default value of "1", that when set to "0" will hide most of the horizontal overscan area(area to the left and
right sides of the screen); useful for games like "Captain Commando" that have garbage in that area.
PSX: Adjusted horizontal positioning of image so that the different pixel clock modes will have the correct relative horizontal positioning(within a +/-1
pixel tolerance in some cases, due to performance considerations and rounding issues in Mednafen), per tests on a PS1.
PSX: Use two small LUTs instead of one gigantic LUT for 15-bit RGB -> 24/32-bit RGB conversion.
PSX: Split the GPU primitive rendering code into several standalone source code files, to be easier on the compiler and enable more effective
parallel building of the source code.
PSX: Added preliminary emulation of GPU texture cache; (mostly) fixes the flickering graphics problem in the map screen of "Tactics Ogre", and fixes the
heat engine effect in "F1 2000".
December 8, 2014:
PSX: Reworked various aspects of triangle rasterization to be more accurate, per PS1 tests(though some of the triangle setup code is a bit convoluted now
and should probably be simplified/rewritten somehow).
December 7, 2014:
PSX: Added emulation of GPU CLUT cache.
December 6, 2014:
Print a warning message about portability if an untrusted file include path(such as from a CUE sheet) contains an 8-bit non-ASCII character.
Fixed a regression that occurred since 0.9.36.x that caused Mednafen to abort out when rotating the screen(via ALT+O) with an emulated system
other than Lynx and WonderSwan.
PSX: Now differentiate between Reset(triggered with F10) and Powering-On(triggered with F11) events, so the former will no longer reset
input device state(relevant with controllers with persistent long-lived internal state like the DualShock).
December 5, 2014:
PSX: Fixed some precision-related bugs in the triangle rendering code; fixes the flickering-characters issue that occurs at several locations
in "Final Fantasy 8". Unfortunately, this fix does increase CPU usage a bit more that I would like, and it's going to be tricky to optimize the difference
away.
December 4, 2014:
PSX: Made a minor change to the GPU polygon blitting code with negligible performance impacts, but shaves a few hundred KB off the compiled code size.
PSX: Reworked how the GPU saturation LUTs are implemented to prevent undefined behavior.
Lynx: Hooked up(and cleaned up) support for loading homebrew RAM image dumps(such as available at http://handy.sourceforge.net/homebrew.zip and
http://pdroms.de/files/atarilynx/chopper )
NGP: Fixed a couple of shadowed-variable warnings in T6W28_Apu.cpp.
December 3, 2014:
Added new class ZLInflateFilter, to be used for stream-based decompression in the PSF file loading code.
MDFNFILE is now a thin container on top of a Stream-derived object(MemoryStream or FileStream; GZFileStream is not suitable for direct use since we
still have to use Stream::size() in a few places).
MDFNGI::Load() no longer uses return type to signal an error.
Reworked the emulation modules' file loading code to be stream-oriented, rather than an amalgamation of memory-mapped semantics and stream
semantics.
NES: Utilize exceptions to handle errors during file loading and initialization.
December 1, 2014:
Merged(finally) FileWrapper into FileStream.
November 30, 2014:
Fixed handling/mapping of rumble, status, and switch input bits during netplay. The current semantics of input device switch state in regards to netplay
save states is still less than ideal, and could be considered a regression from 0.9.36.
November 28, 2014:
Fixed a rumble-related crashing bug(due to careless use of a pointer into a vector that was later resized) introduced in changes yesterday.
VB: Corrected the value that the timer reload register is initialized with on reset.
"--large-address-aware" is now passed to the linker when building the Windows build, so that the 32-bit build can use more address space(and RAM), which
reduces the probability of running out when state rewinding and/or CD image memory caching is enabled.
PSX: Avoid left-shifting negative values(which is technically undefined behavior, though I'm hopeful compiler developers aren't foolish enough that this
will ever be a real issue) in gte.cpp, spu.cpp, and gpu_polygon.inc. There are still instances left in dma.cpp, mdec.cpp, and gpu_line.inc, however.
Compile with -fwrapv instead of -fno-strict-overflow, as the latter has numerous issues.
November 27, 2014:
No longer compile with -Winline, it's causing spurious warnings due to design decisions, and if something really should be inlined we use the INLINE
macro anyway(which evaluates to include __attribute__((always_inline))).
Current emulated device raw input state is now saved in save states, so that persistent data like switch state isn't lost.
Input device input/button descriptors(of type InputDeviceInputInfoStruct) are now packed into IDIISG(derived from std::vector) instead of being plain
C-style arrays, to facilitate, in the future, fixing design flaws and possibly adding neat new functionality.
November 26, 2014:
NES: Added some missing MMC5 variables to save states.
NES: Allow save states to be saved and loaded while in the Game Genie code entry screen.
November 25, 2014:
Use shiny new C++11 std::exception_ptr to better handle deferred errors/exceptions in the save state loading code, instead of just using naked
error message C-string pointers.
No longer clear the state-present indicator to 0 when a save state load fails(since it could have led to confusion and the accidental overwriting of a state
that is good in a different context).
PSX: Changed the hashing algorithm used on the BIOS ROM image data(for the database and save states) from SHA-1 to SHA-256.
November 24, 2014:
PSX: Save the SHA-1 hash of the BIOS in save states, and on load compare the value recorded with the actual current value, and error out the
state loading process if they mismatch(to prevent loading a save state created while running under a different BIOS, which can cause insidiously
subtle problems).
PSX: Implemented a rudimentary internal BIOS database, and now error-out when using a bad BIOS, or a BIOS from the wrong region.
PCE, PC-FX: Fixed the garbled-sound-while-state-rewinding problem.
PCE: Fixed a frame mid-sync regression from around 0.9.33 that broke "Takeda Shingen".
Implemented new netplay commands "/list" and "/gamekey".
Replaced UTF8* in favor of plain char* in various places where it's still used.
November 21, 2014:
PSX: Changed DualShock analog mode status display to use new IDIT_STATUS input/output type, instead of directly calling MDFN_DispMessage().
PCE_FAST: Changed 6-button mode toggle to use new IDIT_SWITCH input type, instead of IDIT_BUTTON coupled with internal state toggling and MDFN_DispMessage().
November 15, 2014:
Fixed virtual analog button input support(e.g. for DualShock analog sticks), broken in an August 4th change.
November 9, 2014:
WonderSwan: Added partial emulation(just enough to get it to work) of the WonderWitch's flash ROM, so that the WonderWitch firmware
will boot now, and can be used with the "wswan.excomm" and "wswan.excomm.path" settings/functionality.
November 5, 2014:
Added support for automatic loading and usage of redump.org "SBI" files when loading CUE sheets; the files should have the same base filename
as the CUE sheet, and the file extension case should match the case of the corresponding character in the CUE sheet filename file extension.
Example:
"Super Bandicoot Luigi (Moon, Niflheim, Australia).CuE" -> "Super Bandicoot Luigi (Moon, Niflheim, Australia).SbI"
PSX: Fixed half-implemented broken implementation of CDC command 0x00; fixes lockups in the European PAL releases of "Spyro 2" and
"Spyro - Year of the Dragon".
November 4, 2014:
PCE_FAST, PC-FX: Fixed some mostly-benign violations of strict aliasing.
MD: C68k code is compiled as C++ now, and fixed the flawed approach at circumventing strict aliasing.
Replaced MDFN_ALIGN() with C++11 alignas().
Revamped masmem.h and endian.h, merging functionality into endian.h, and fixed "MultiAccessSizeMem" to actually work properly(the previous
code constructs it used violated strict aliasing, due to a misunderstanding of how gcc handles type punning via unions). "MultiAccessSizeMem" may
be phased out now, since its original intended purpose no longer requires it.
November 2, 2014:
NES: Partially encapsulated the code in namespace MDFN_IEN_NES to reduce global namespace pollution(in regards to object file linking).
NES: Use fastcall calling convention for high-call-frequency performance-critical functions when compiling for 32-bit x86.
PSX: Implemented preliminary support for multiplicand value-dependent MULT/MULTU instruction timing.
Added more compiler sanity/bug tests to tests.cpp.
On startup, now print out version information regarding the MinGW-W64 runtime and libiconv, if applicable.
October 30, 2014:
Use poll() instead of select() in the POSIX sockets netplay code, to keep netplay from breaking in some quasi-pathological
real-world Mednafen usage scenarios.
October 20, 2014:
NES: Fixed a minor issue that could break compiling after --disable-nls was passed to the configure script.
PSX: Reworked disc detection and region detection heuristics to pick up more homebrew PS1 games, and to make better decisions
on what region of the PS1 to emulate for heterogenous disc sets and for titles(e.g. homebrew) that don't follow Sony
conventions in regards to ISO-9660 system area contents and ISO-9660 filesystem layout.
September 10, 2014:
PSX: Generate an AdEL exception when trying to fetch an instruction and PC is mis-misaligned.
PCE: No longer attempt to load a custom palette after loading an NSF file.
NES: No longer attempt to load a custom palette after loading an NSF file.
September 8, 2014:
Fixed a piece of ancient mouse button mapping/reading code that was so broken it worked most of the time; fixes broken mapping of more
exotic(other than left, center, and right) physical mouse buttons to virtual buttons.
PSX: Made changes to avoid signed overflow and left shift of signed variables in the CPU core JUST BECAUSE.
Fixed several violations of C/C++ sequence point rules in relation to call order in expressions
of functions with side effects, that could lead to undefined/wrong behavior with certain types of compiler optimizations
and features(e.g. PC-FX emulation was broken on gcc 4.9.x with -fsanitize=undefined -std=gnu++11).
August 27, 2014:
NES: Handle missing input-related save state sections on load more gracefully.
NES: Automatically enable emulation of the Famicom 4-player adapter for the "Nekketsu Koukou Dodgeball-bu" game.
August 24, 2014:
SNES: Fixed usage of wrong form of std::unique_ptr in the save state code.
August 23, 2014:
Made minor optimizations to the music format(NSF, HES, PSF, etc.) waveform visualization code.
Removed unused selective blur code, as the algorithm is too simplistic to really be useful in Mednafen. Though on a similar subject, it may be interesting
to look into SA-DCT again for PS1 and PC-FX FMV-filtering purposes, but that's an exercise for another day.
Cleaned up and refactored a bit of code in drivers/*.
August 20, 2014:
Changed a few uses MDFN_malloc/MDFN_calloc to MDFN_malloc_T/MDFN_calloc_T, where appropriate.
August 19, 2014:
Lynx: Fixed a bug that could cause Mednafen to crash when a game attempts to power-down the emulated Lynx(which may occur if a game is left unattended
for a prolonged period of time).
August 17, 2014:
GB, GBA: Fixed broken save state structure definitions for saving/loading GB APU state. This fix will cause save state backwards incompatibility issues
(for states created with Mednafen < 0.9.37) on big-endian platforms.
Save state variable data is now saved in native-endian form for performance reasons(and it fixes a bug introduced from the earlier save state refactoring
that could cause state corruption if a state save failed when running on a big-endian platform), repurposing the most-significant bit of the total length
field of the header to signal if the data is big-endian or not.
August 16, 2014:
NES: Custom palette loading with PAL emulation now loads from file "nes-pal.pal" instead of file "nes.pal"(NTSC custom palette).
GB, NES, PCE_FAST: Implemented internal support for palettized 8bpp output when the palette color components have a precision of less than 8 bits.
August 13, 2014:
PSX: Implemented a very rough simulation of complex, borderline-unstable CDC behavior that "Bedlam" and "Rise 2" rely on(fixes corrupt graphics
problems in those two games).
August 12, 2014:
Lynx: Fixed a minor stereo sound emulation issue thanks to a patch from "sage".
SMS, GG: Added support for custom palettes.
NES: Added support for custom palettes with 512 colors(for de-emphasis bits colors).
Refactored custom palette loading code out of emulation modules and into Mednafen's core.
August 8, 2014:
PCE, PCE_FAST, PC-FX: Fixed a bug that could cause a crash if the emulated CD lid/tray is closed with no disc when loading a pre-0.9.37 save state.
August 5, 2014:
Hardcode enabling of DirectSound and WASAPI in configure.ac for mingw builds, rather than enabling it only if the relevant header files
are found; this will help ensure that any unofficial Windows builds of Mednafen in the future will not be silently broken/lacking in important features.
August 4, 2014:
The input port state data memory is no longer zeroed-out in bulk in the driver-side input code on emulated devices input updating, instead being cleared
as needed by each input; this change is to faciliate implementing switches in a more proper and flexible way in the future than they're handled now.
Changed the types of the arguments to MDFNI_SetInput() and MDFNGI::SetInput to be more sensible.
Added dummy enum(= 0) to GameMediumTypes to fix a bug introduced from the July 31 GameType change.
WonderSwan: Add strict checking for proper save game memory file size on game load(NOTE: this will cause problems for Dicing Knight
and Judgment Silversword save game memory files written with Mednafen versions prior to 0.9.36).
August 3, 2014:
PCE, PCE_FAST: Fixed bug(from sloppy handling of errors) that caused battery-backed save game file destruction
if an error(e.g. missing CD BIOS, memory allocation failure, etc.) occurred during game load and initialization.
August 2, 2014:
PCE: Added missing(oops) code to load MCGenjin non-volatile memory from disk on game load, and no longer compress MCGenjin non-volatile memory
files on disk(in gzip format).
PCE, PCE_FAST, PC-FX: Add strict checking for proper save game memory file size on game load.
August 1, 2014:
Removed unused MDFNGI::soundrate.
PSX: Reworked InputDevice::ReadNV() to reduce overhead in the memory card saving code.
July 31, 2014:
Begin phasing out usage of MDFNGI::GameType
July 30, 2014:
GBA: No longer compile with -fno-unit-at-a-time as it's no longer the 2000s. ;)
Implemented a new, more flexible abstraction for removable media changing during runtime, and updated the NES, PCE, PC-FX, PCE_FAST, and
PSX modules to use it.
Removed mostly-unnecessary gcc command-line arguments that control inlining decision parameters from the build system.
July 27, 2014:
Removed the recently-added state load error recovery code, as it's not worth the overhead and increased code complexity, especially considering the
deferred error and optional-section changes from today.
Fixed save state loading code to not read past the end of the state while searching for sections(which is important now that we made some guarantees
and implications about how the stream passed in is utilized).
PC-FX, MD: Mark input device state sections as optional to prevent the new state code from erroring out completely when a section is missing(as will
happen when loading a state saved when a different device was selected).
PSX: Restructured save state generation to be hierarchical(in relation to multitaps).
Reworked MDFNSS_StateAction() to not throw exceptions, instead marking deferred error state, to avoid potential security issues under low memory
conditions(due to state variables being loaded without the emulation module-specific sanitizing code being run).
July 26, 2014:
Made use of "override" specifier in a few places.
On save state load(outside of the state rewinding code path), a temporary save state is now created before the load is attempted. If the load
fails, the temporary save state is loaded.
Now compile QuickLZ with -fno-strict-aliasing to avoid potential future trouble, since it does violate strict aliasing in at least a few places.
July 25, 2014:
Fixed broken utility get_BE<>() template function in Stream.
Moved gzip-reading-into-memory algorithm(exponentially increasing read() sizes along with allocated memory) from MDFNFILE to MemoryStream.
Moved mmap() functionality from MDFNFILE(file.cpp) to FileWrapper/FileStream.
Moved IPS patching code out of file.cpp, and made the code patch a Stream instead of raw memory directly(which causes
a slight drop in efficiency, but it shouldn't be a problem).
GB, PCE_FAST: Utilize GZFileStream, and properly error out if there's a fatal error(other than file not found)
during save game loading.
July 24, 2014:
Changed how missing section errors are handled; an exception is now thrown when loading a save state and a section is missing, unless
MDFNSS_StateAction() was called with optional == true.
Utilize GZFileStream instead of direct zlib gz*() usage in the game/ROM image file loading code.
July 23, 2014:
Re-implemented support for state-rewinding during movie recording, and added support for doing it during playback. Though trying to rewind across
a movie state-change(in the sense of recording/playing started or stopped) will cause the rewinder to error out, as should be expected.
Input-recording movies are no longer written/read gzip-compressed(just plain file access), and the format is now slightly different as well.
In the fast(state-rewinding) state loading/saving code, align the stream's position to a 16-byte boundary before writing large(>=65536 bytes) variables,
to ostensibly improve memory copy performance.
Save and verify(on load) section names and small canaries in state-rewinding save states, to help prevent save game corruption in case something
goes horribly wrong(such as from a severe (de)compressor or compression filter bug).
July 22, 2014:
Utilize strongly-typed enum for GZFileStream open modes, to prevent accidental usage of FileStream open modes.
July 21, 2014(accumulated changelog for several days):
Fixed some subtle bugs in MemoryStream.
Removed "srwcompressor" setting; only "quicklz", the default of the removed setting, is available and used now for state rewinding.
Refactored and rewrote state rewinding code, with some optimizations over the old code for systems with large save states(PC-FX, PS1).
Simplified and cleaned up some of the core save state functions.
Adapted core save state code to take a Stream(though the save state code does require fast seeking during saving and loading, so that rules out
passing in a GZFileStream directly), and to utilize exceptions to signal error conditions(except for missing sections, that still needs to be worked
out).
Made changes to the build system to require and enable C++11(-std=gnu++11).
SNES, PSX: Reverse sound data before resampling when state-rewinding, to fix the sound crackling.
PSX: Fixed a bug that caused a crash when trying to use save states during PSF playback/PS-EXE execution.
NES: Save NSF playback variables in save states(though save states made during NSF playback are still missing expansion chip state data).
WonderSwan: Resolved a few compiler warnings.
WonderSwan: Save/Load relevant WSR playback state in save states during WSR playback.
PCE, PC-FX, SMS, SNES, VB, WonderSwan: Utilize GZFileStream, and properly error out if there's a fatal error(other than file not found)
during save game loading.
Wrote GZFileStream class, derived from Stream, as a wrapper around gzFile.
July 17, 2014:
NGP: Added proper error handling(using exceptions) to the FLASH loading and saving code
July 16, 2014:
NGP: Initialize XIX, XIY, and XIZ to match what the BIOS leaves them as(as observed via MESS' debugger), and removed the ROM patches/hacks
for "Puyo Pop".
NGP: Utilize exceptions in the ROM image loading and initialization code.
NGP: Fixed some endian-related issues in regards to reflecting bits of the ROM header to RAM during initialization.
NGP: Initialize VRAM differently to partially reflect the state the BIOS leaves it in, and removed the "Metal Slug - 2nd Mission" ROM patch/hack
(thanks to "FluBBa" for the tip on what the game was doing/relied on).
NGP: Fixed a potentially-exploitable overflow bug in the FLASH dirty block list code.
July 15, 2014:
Added a truncate() method to the Stream class and derived classes.
July 13, 2014:
SMS: Made use of exceptions in the file loading and system initialization code paths.
July 11, 2014:
SNES: Removed unused(in this fork) header and build files.
SNES: Removed nonfunctional stubish(in this old version of bsnes) ST011 and ST018 emulation code.
SNES: Removed SGB emulation code that was never properly hooked up in Mednafen.
SNES: Removed unsupported and untested(in Mednafen) 21fx emulation code.
SNES: Made minor structural optimizations to the S-CPU and SuperFX emulation code.
July 10, 2014:
SNES: Made minor structural optimizations to the S-DSP emulation code.
July 8, 2014:
VB: Made (better) use of exceptions in the ROM image loading and initialization code.
NES: Made use of MODE_WRITE_INPLACE to write nonvolatile (saved game) memory to disk.
July 7, 2014:
PSX: Made use of MODE_WRITE_INPLACE to write memory cards to disk, to slightly reduce the probability of unrecoverable memory card destruction/corruption
under certain pathological system conditions(though in the future we should probably change it to use a temporary filename and rename(), at least on
POSIX-compliant systems).
Added a new file open mode to FileWrapper(and FileStream) named "MODE_WRITE_INPLACE", that is like "MODE_WRITE"(and "wb" with fopen()), EXCEPT that
it won't truncate the file if it already exists.
July 4, 2014:
PSX: Fixed a longstanding bug(and removed the associated kludge) in the DMA IRQ emulation, per tests on a PS1.
Added missing relevant copyright statement to pce_psg.cpp and pce_psg.h(since the origin of the skeleton code, TGEmu, isn't
listed in the documentation anywhere).
Cleaned up a few #include statements(#include "mednafen/XXX.h" to #include <mednafen/XXX.h>).
June 30, 2014:
PSX: Made optimizations to the SPU reverb resampling code.
PSX: Added emulation of an SPU quirk/bug regarding its handling of ADPCM blocks with a shift value greater than 12, per tests on a PS1.
It's unlikely any commercially-released games use such shift values, though.
June 28, 2014:
PSX: Replaced 128KiB GTE division reciprocal table with a 257-byte table and Newton-Raphson reciprocal calculation code.
-- 0.9.36.2: --
June 25, 2014:
SNES: Save extra input device state in save states that the bsnes core fails to save.
Removed computationally-expensive and unnecessary(it's already done in the state load code path) duplicate-variable check debug code
in the save state saving code.
SNES: Hooked up Super Scope emulation.
June 24, 2014:
PCE_FAST: Removed debug puts() in VPC mixing inner loop, and added compiler hints to some of the rendering and mixing loops.
Fixed an ancient regression introduced around version 0.9.16-WIP. Said regression caused the file extension of the save state used by the auto save
state save/load feature(setting "autosave") to be the same as the extension used for the currently selected save state slot, effectively overwriting that
save state slot on exit.
Added setting "video.disable_composition", to allow the user to override Mednafen's default behavior of disabling desktop composition on
Windows Vista and Windows 7.
June 23, 2014:
MD: Fixed a 68K emulation regression introduced in 0.9.34, that broke save game loading in "Sonic the Hedgehog 3",
and possibly broke other games in subtle ways.
MD: Fixed prototype for cart mapper 16-bit write function.
MD: Cleaned up debug printf()s.
PSX, PCE, MD, CDPLAY: Resolved a few compiler warnings.
PC-FX: Fixed an old bug that, when coupled with changes made in 0.9.35, caused low-volume crackling in the CD-DA sound output.
-- 0.9.36.1: --
June 22, 2014:
Fixed a bug that could cause an assert() to trigger under certain circumstances when the scale2x/scale3x/scale4x special scaler is used with
SNES emulation.
PSX: Fixed a major SPU emulation regression in 0.9.36 that completely broke sample playback on a channel when the playback rate
was set near the maximum.
PSX: Fixed noise emulation playback frequency calculation(particularly for the lowest noise playback frequencies), per tests on a PS1.
It's unlikely to have any audible effect on games, though.
-- 0.9.36: --
June 17, 2014:
PSX: Rewrote SPU ADPCM decoding code per tests on a PS1; fixes the early voice cutoff problem in "Thousand Arms", and possibly some other
games as well. Seems to fix the post-battle quasi-random lockup problem in the Japanese version of Tales of Destiny.
June 15, 2014:
WonderSwan: Added experimental, undocumented support for interfacing with trap15's WonderFence program, which provides MobileWonderGate emulation;
controlled via settings "wswan.excomm" and "wswan.excomm.path". This support is currently only available on UN*X-like platforms.
WonderSwan: Added SRAM size calculation for the raw header value of 0x05(used by MobileWonderGate).
WonderSwan: Corrected the SRAM size calculation for the raw header value of 0x04(used by Dicing Knight and Judgement Silversword).
WonderSwan: Rewrote RTC emulation code to avoid runtime use of C library time functions(fixing potential desync issues when using netplay and input-recording
movies), and fixed the time initialization code to reflect the current local time instead of UTC.
June 14, 2014:
PSX: Implemented experimental support for save states.
PSX: Rewrote MDEC execution loop; the MDEC emulation model still is far from perfect, though. Fixes the lockup during the intro FMV of
a corrupt copy of "Dragon Knight 4" that's floating around the Internet.
June 10, 2014:
Ripped out incomplete "snes_perf" emulation module, and ripped out the unimplemented PC emulation stub module.
June 9, 2014:
PSX: Improvements to SPU volume sweep emulation accuracy per tests on a PS1. Fixes sound/music wonkiness in "WipEout 3".
June 6, 2014:
PSX: Minor improvements to MDEC YCbCr to RGB color conversion accuracy, per tests on a PS1.
-- 0.9.35.1: --
June 5, 2014:
PSX: Improved accuracy of the GPU framebuffer rectangle copy command(0x80) per tests on a PS1; fixes graphical glitches in the
water effect of stage 4 of "Einhander".
-- 0.9.35: --
May 31, 2014:
Use a semaphore to allow for tighter emulation-thread->video-thread blit timing granularity.
May 29, 2014:
PC-FX: Battery-backed save game memory is now saved to a file during runtime if the memory contents have changed, rather than only
saved on exit as before.
NES: Fixed unusably-broken emulation of iNES mapper 80's internal battery-backed save-game RAM(used by "Minelvation Saga", "Mirai Shinwa Jarvas", and
"Taito Grand Prix").
NES: Implemented battery-backed save game support for iNES mapper 69(for the two or so games that need it).
NES: Fixed multiple major issues with the iNES mapper 69 save state code.
NES: Added missing PowerPad default button assignments.
NES: Fixed how Mahjong, Family Trainer, and PowerPad input device code reads input data, to fix brokenness on big-endian platforms, and to prevent
(mostly benign) buffer overflows.
NES: Fixed some buffer overflow issues in the "Barcode World" barcode reader input device emulation code.
NES: Changed how save state loading works so that failure to load one section will not abort loading, but signal a deferred error(most useful
with missing input device sections).
May 28, 2014:
Fixed some careless unsafe instances of "-2147483648" added since 0.9.34.1.