From 1d5e09ef07324f99859b72aefca7b61ab1b469db Mon Sep 17 00:00:00 2001 From: byuu Date: Mon, 11 Jan 2010 02:13:12 +0000 Subject: [PATCH] Update to bsnes v059r02 release. Changelog: - added folder-up button to the file loading window - hid new-folder button except on path selection window - removed "Assign Modifiers as Keys" button; replaced with input.modifierEnable in the configuration file - fixed a Qt signal issue that was causing ROM loading to take an extra second or two longer than necessary - scale 5x setting will now maintain an exact multiple in both width and height for both NTSC and PAL modes - re-added group assignment and unassignment to the input settings window - re-wrote mouse capture code to be more intuitive, now uses buttons to set assignment - re-added input.allowInvalidInput check to stop up+down and left+right key combinations by default [Jonas Quinn] - split "Tools Dialog" menu option into separate items for each tool (Cheat Editor, Cheat Finder, State Manager) - added S-SMP and S-DSP property information readouts to the debugger --- QtCore4.dll | Bin 0 -> 672768 bytes QtGui4.dll | Bin 0 -> 2635264 bytes bsnes.exe | Bin 0 -> 384029 bytes bsnesd.exe | Bin 0 -> 489472 bytes mingwm10.dll | Bin 0 -> 13599 bytes pixelshaders/HDRTV/fragment | 14 + pixelshaders/HDRTV/vertex | 9 + pixelshaders/HQ2x/fragment | 49 + pixelshaders/HQ2x/vertex | 26 + pixelshaders/Pixellate/fragment | 36 + pixelshaders/Pixellate/vertex | 8 + pixelshaders/Scale2x/fragment | 28 + pixelshaders/Scale2x/vertex | 28 + snesfilter.dll | Bin 0 -> 92951 bytes snesfilter/2xsai/2xsai.cpp | 132 + snesfilter/2xsai/2xsai.hpp | 35 + snesfilter/2xsai/implementation.cpp | 1171 +++++ snesfilter/Makefile | 83 + snesfilter/cc.bat | 2 + snesfilter/clean.bat | 1 + snesfilter/direct/direct.cpp | 32 + snesfilter/direct/direct.hpp | 5 + snesfilter/hq2x/hq2x.cpp | 205 + snesfilter/hq2x/hq2x.hpp | 30 + snesfilter/lq2x/lq2x.cpp | 61 + snesfilter/lq2x/lq2x.hpp | 5 + snesfilter/nall/Makefile | 109 + snesfilter/nall/Makefile-qt | 55 + snesfilter/nall/algorithm.hpp | 23 + snesfilter/nall/any.hpp | 74 + snesfilter/nall/array.hpp | 94 + snesfilter/nall/base64.hpp | 90 + snesfilter/nall/bit.hpp | 51 + snesfilter/nall/config.hpp | 124 + snesfilter/nall/crc32.hpp | 66 + snesfilter/nall/detect.hpp | 30 + snesfilter/nall/dictionary.hpp | 73 + snesfilter/nall/dl.hpp | 88 + snesfilter/nall/endian.hpp | 38 + snesfilter/nall/file.hpp | 256 ++ snesfilter/nall/filemap.hpp | 190 + snesfilter/nall/function.hpp | 190 + snesfilter/nall/input.hpp | 386 ++ snesfilter/nall/lzss.hpp | 81 + snesfilter/nall/moduloarray.hpp | 40 + snesfilter/nall/platform.hpp | 77 + snesfilter/nall/priorityqueue.hpp | 106 + snesfilter/nall/property.hpp | 45 + snesfilter/nall/serial.hpp | 80 + snesfilter/nall/serializer.hpp | 126 + snesfilter/nall/sha256.hpp | 143 + snesfilter/nall/sort.hpp | 62 + snesfilter/nall/static.hpp | 17 + snesfilter/nall/stdint.hpp | 44 + snesfilter/nall/string.hpp | 18 + snesfilter/nall/string/base.hpp | 119 + snesfilter/nall/string/cast.hpp | 30 + snesfilter/nall/string/compare.hpp | 100 + snesfilter/nall/string/convert.hpp | 285 ++ snesfilter/nall/string/core.hpp | 109 + snesfilter/nall/string/filename.hpp | 48 + snesfilter/nall/string/match.hpp | 72 + snesfilter/nall/string/math.hpp | 160 + snesfilter/nall/string/replace.hpp | 103 + snesfilter/nall/string/split.hpp | 56 + snesfilter/nall/string/strl.hpp | 48 + snesfilter/nall/string/trim.hpp | 50 + snesfilter/nall/string/utility.hpp | 75 + snesfilter/nall/traits.hpp | 97 + snesfilter/nall/ups.hpp | 190 + snesfilter/nall/utf8.hpp | 72 + snesfilter/nall/utility.hpp | 36 + snesfilter/nall/varint.hpp | 92 + snesfilter/nall/vector.hpp | 162 + snesfilter/ntsc/ntsc.cpp | 396 ++ snesfilter/ntsc/ntsc.moc.hpp | 91 + snesfilter/ntsc/snes_ntsc/snes_ntsc.c | 251 ++ snesfilter/ntsc/snes_ntsc/snes_ntsc.h | 228 + snesfilter/ntsc/snes_ntsc/snes_ntsc_config.h | 26 + snesfilter/ntsc/snes_ntsc/snes_ntsc_impl.h | 439 ++ snesfilter/pixellate2x/pixellate2x.cpp | 39 + snesfilter/pixellate2x/pixellate2x.hpp | 5 + snesfilter/scale2x/scale2x.cpp | 61 + snesfilter/scale2x/scale2x.hpp | 5 + snesfilter/snesfilter.cpp | 84 + snesfilter/snesfilter.hpp | 16 + snesfilter/sync.sh | 2 + snesreader.dll | Bin 0 -> 759348 bytes snesreader/7z_C/7zAlloc.c | 77 + snesreader/7z_C/7zAlloc.h | 23 + snesreader/7z_C/7zBuf.c | 36 + snesreader/7z_C/7zBuf.h | 31 + snesreader/7z_C/7zC.txt | 194 + snesreader/7z_C/7zCrc.c | 35 + snesreader/7z_C/7zCrc.h | 32 + snesreader/7z_C/7zDecode.c | 257 ++ snesreader/7z_C/7zDecode.h | 13 + snesreader/7z_C/7zExtract.c | 93 + snesreader/7z_C/7zExtract.h | 49 + snesreader/7z_C/7zHeader.c | 6 + snesreader/7z_C/7zHeader.h | 57 + snesreader/7z_C/7zIn.c | 1204 ++++++ snesreader/7z_C/7zIn.h | 49 + snesreader/7z_C/7zItem.c | 129 + snesreader/7z_C/7zItem.h | 83 + snesreader/7z_C/7zStream.c | 184 + snesreader/7z_C/Bcj2.c | 132 + snesreader/7z_C/Bcj2.h | 30 + snesreader/7z_C/Bra.h | 60 + snesreader/7z_C/Bra86.c | 85 + snesreader/7z_C/CpuArch.h | 69 + snesreader/7z_C/LzmaDec.c | 1010 +++++ snesreader/7z_C/LzmaDec.h | 223 + snesreader/7z_C/Types.h | 206 + snesreader/7z_C/lzma.txt | 594 +++ snesreader/7z_C/readme.txt | 19 + snesreader/Makefile | 186 + snesreader/cc.bat | 2 + snesreader/clean.bat | 1 + snesreader/fex/Binary_Extractor.cpp | 77 + snesreader/fex/Binary_Extractor.h | 26 + snesreader/fex/Data_Reader.cpp | 551 +++ snesreader/fex/Data_Reader.h | 264 ++ snesreader/fex/File_Extractor.cpp | 341 ++ snesreader/fex/File_Extractor.h | 191 + snesreader/fex/Gzip_Extractor.cpp | 98 + snesreader/fex/Gzip_Extractor.h | 34 + snesreader/fex/Gzip_Reader.cpp | 85 + snesreader/fex/Gzip_Reader.h | 46 + snesreader/fex/Rar_Extractor.cpp | 197 + snesreader/fex/Rar_Extractor.h | 43 + snesreader/fex/Zip7_Extractor.cpp | 252 ++ snesreader/fex/Zip7_Extractor.h | 34 + snesreader/fex/Zip_Extractor.cpp | 390 ++ snesreader/fex/Zip_Extractor.h | 45 + snesreader/fex/Zlib_Inflater.cpp | 257 ++ snesreader/fex/Zlib_Inflater.h | 70 + snesreader/fex/blargg_common.cpp | 51 + snesreader/fex/blargg_common.h | 206 + snesreader/fex/blargg_config.h | 34 + snesreader/fex/blargg_endian.h | 185 + snesreader/fex/blargg_errors.cpp | 113 + snesreader/fex/blargg_errors.h | 80 + snesreader/fex/blargg_source.h | 125 + snesreader/fex/fex.cpp | 323 ++ snesreader/fex/fex.h | 206 + snesreader/filechooser.cpp | 57 + snesreader/filechooser.moc.hpp | 20 + snesreader/libjma/7z.h | 28 + snesreader/libjma/7zlzma.cpp | 50 + snesreader/libjma/aribitcd.h | 73 + snesreader/libjma/ariconst.h | 29 + snesreader/libjma/ariprice.h | 12 + snesreader/libjma/btreecd.h | 126 + snesreader/libjma/crc32.h | 26 + snesreader/libjma/iiostrm.cpp | 132 + snesreader/libjma/iiostrm.h | 210 + snesreader/libjma/inbyte.cpp | 60 + snesreader/libjma/inbyte.h | 76 + snesreader/libjma/jcrc32.cpp | 80 + snesreader/libjma/jma.cpp | 550 +++ snesreader/libjma/jma.h | 88 + snesreader/libjma/lencoder.h | 93 + snesreader/libjma/litcoder.h | 122 + snesreader/libjma/lzma.cpp | 41 + snesreader/libjma/lzma.h | 124 + snesreader/libjma/lzmadec.h | 82 + snesreader/libjma/lzmadecode.cpp | 298 ++ snesreader/libjma/portable.h | 83 + snesreader/libjma/rcdefs.h | 60 + snesreader/libjma/rngcoder.h | 143 + snesreader/libjma/winout.cpp | 89 + snesreader/libjma/winout.h | 89 + snesreader/micro-bunzip/micro-bunzip.c | 515 +++ snesreader/nall/Makefile | 109 + snesreader/nall/Makefile-qt | 55 + snesreader/nall/algorithm.hpp | 23 + snesreader/nall/any.hpp | 74 + snesreader/nall/array.hpp | 94 + snesreader/nall/base64.hpp | 90 + snesreader/nall/bit.hpp | 51 + snesreader/nall/config.hpp | 124 + snesreader/nall/crc32.hpp | 66 + snesreader/nall/detect.hpp | 30 + snesreader/nall/dictionary.hpp | 73 + snesreader/nall/dl.hpp | 88 + snesreader/nall/endian.hpp | 38 + snesreader/nall/file.hpp | 256 ++ snesreader/nall/filemap.hpp | 190 + snesreader/nall/function.hpp | 190 + snesreader/nall/input.hpp | 386 ++ snesreader/nall/lzss.hpp | 81 + snesreader/nall/moduloarray.hpp | 40 + snesreader/nall/platform.hpp | 77 + snesreader/nall/priorityqueue.hpp | 106 + snesreader/nall/property.hpp | 45 + snesreader/nall/serial.hpp | 80 + snesreader/nall/serializer.hpp | 126 + snesreader/nall/sha256.hpp | 143 + snesreader/nall/sort.hpp | 62 + snesreader/nall/static.hpp | 17 + snesreader/nall/stdint.hpp | 44 + snesreader/nall/string.hpp | 18 + snesreader/nall/string/base.hpp | 119 + snesreader/nall/string/cast.hpp | 30 + snesreader/nall/string/compare.hpp | 100 + snesreader/nall/string/convert.hpp | 285 ++ snesreader/nall/string/core.hpp | 109 + snesreader/nall/string/filename.hpp | 48 + snesreader/nall/string/match.hpp | 72 + snesreader/nall/string/math.hpp | 160 + snesreader/nall/string/replace.hpp | 103 + snesreader/nall/string/split.hpp | 56 + snesreader/nall/string/strl.hpp | 48 + snesreader/nall/string/trim.hpp | 50 + snesreader/nall/string/utility.hpp | 75 + snesreader/nall/traits.hpp | 97 + snesreader/nall/ups.hpp | 190 + snesreader/nall/utf8.hpp | 72 + snesreader/nall/utility.hpp | 36 + snesreader/nall/varint.hpp | 92 + snesreader/nall/vector.hpp | 162 + snesreader/snesreader.cpp | 232 + snesreader/snesreader.hpp | 7 + snesreader/sync.sh | 2 + snesreader/unrar/archive.cpp | 97 + snesreader/unrar/archive.hpp | 45 + snesreader/unrar/arcread.cpp | 314 ++ snesreader/unrar/array.hpp | 135 + snesreader/unrar/changes.txt | 141 + snesreader/unrar/coder.cpp | 49 + snesreader/unrar/coder.hpp | 24 + snesreader/unrar/compress.hpp | 36 + snesreader/unrar/crc.cpp | 69 + snesreader/unrar/encname.cpp | 57 + snesreader/unrar/encname.hpp | 20 + snesreader/unrar/extract.cpp | 110 + snesreader/unrar/getbits.cpp | 34 + snesreader/unrar/getbits.hpp | 40 + snesreader/unrar/headers.hpp | 145 + snesreader/unrar/license.txt | 40 + snesreader/unrar/model.cpp | 612 +++ snesreader/unrar/model.hpp | 133 + snesreader/unrar/rar.hpp | 209 + snesreader/unrar/rarvm.cpp | 1158 +++++ snesreader/unrar/rarvm.hpp | 112 + snesreader/unrar/rarvmtbl.cpp | 57 + snesreader/unrar/rawread.cpp | 86 + snesreader/unrar/rawread.hpp | 25 + snesreader/unrar/readme.txt | 63 + snesreader/unrar/suballoc.cpp | 261 ++ snesreader/unrar/suballoc.hpp | 88 + snesreader/unrar/technote.txt | 275 ++ snesreader/unrar/unicode.cpp | 106 + snesreader/unrar/unicode.hpp | 10 + snesreader/unrar/unpack.cpp | 1065 +++++ snesreader/unrar/unpack.hpp | 227 + snesreader/unrar/unpack15.cpp | 532 +++ snesreader/unrar/unpack20.cpp | 394 ++ snesreader/unrar/unrar.cpp | 350 ++ snesreader/unrar/unrar.h | 164 + snesreader/unrar/unrar_misc.cpp | 170 + snesreader/unrar/unrar_open.cpp | 45 + snesreader/unrar/whatsnew.txt | 267 ++ snesreader/zlib/adler32.c | 149 + snesreader/zlib/crc32.c | 423 ++ snesreader/zlib/crc32.h | 441 ++ snesreader/zlib/inffast.c | 318 ++ snesreader/zlib/inffast.h | 11 + snesreader/zlib/inffixed.h | 94 + snesreader/zlib/inflate.c | 1368 ++++++ snesreader/zlib/inflate.h | 115 + snesreader/zlib/inftrees.c | 329 ++ snesreader/zlib/inftrees.h | 55 + snesreader/zlib/readme.txt | 10 + snesreader/zlib/zconf.h | 335 ++ snesreader/zlib/zlib.h | 1357 ++++++ snesreader/zlib/zlib.txt | 125 + snesreader/zlib/zutil.c | 318 ++ snesreader/zlib/zutil.h | 269 ++ src/Makefile | 3 +- src/base.hpp | 2 +- src/data/icons-16x16/go-up.png | Bin 0 -> 652 bytes src/dsp/dsp-debugger.cpp | 54 + src/dsp/dsp-debugger.hpp | 32 + src/dsp/dsp.cpp | 10 + src/dsp/dsp.hpp | 4 + src/dsp/sdsp/debugger/debugger.cpp | 33 + src/dsp/sdsp/debugger/debugger.hpp | 34 +- src/dsp/sdsp/sdsp.hpp | 2 +- src/ppu/ppu.cpp | 2 +- src/smp/smp-debugger.cpp | 23 + src/smp/smp-debugger.hpp | 14 + src/smp/smp.cpp | 4 + src/smp/smp.hpp | 4 + src/smp/ssmp/debugger/debugger.cpp | 15 + src/smp/ssmp/debugger/debugger.hpp | 17 +- src/smp/ssmp/ssmp.hpp | 1 - src/ui_qt/base/diskbrowser.cpp | 14 + src/ui_qt/base/diskbrowser.moc.hpp | 1 + src/ui_qt/base/main.cpp | 20 +- src/ui_qt/base/main.moc.hpp | 8 +- src/ui_qt/cartridge/cartridge.cpp | 2 +- src/ui_qt/config.cpp | 8 +- src/ui_qt/config.hpp | 4 +- src/ui_qt/debugger/tools/properties.cpp | 10 + src/ui_qt/debugger/tools/properties.moc.hpp | 2 + src/ui_qt/input/controller.cpp | 13 + src/ui_qt/input/input.cpp | 6 +- src/ui_qt/input/input.hpp | 1 - src/ui_qt/resource/resource.qrc | 1 + src/ui_qt/settings/input.cpp | 197 +- src/ui_qt/settings/input.moc.hpp | 17 +- src/ui_qt/tools/cheateditor.cpp | 14 + src/ui_qt/tools/cheateditor.moc.hpp | 3 + src/ui_qt/utility/window.cpp | 11 + supergameboy.dll | Bin 0 -> 750202 bytes supergameboy/Makefile | 126 + supergameboy/cc.bat | 2 + supergameboy/clean.bat | 1 + supergameboy/common/adaptivesleep.cpp | 56 + supergameboy/common/adaptivesleep.h | 34 + supergameboy/common/array.h | 40 + supergameboy/common/rateest.cpp | 96 + supergameboy/common/rateest.h | 73 + supergameboy/common/resample/blackmansinc.h | 100 + .../common/resample/chainresampler.cpp | 118 + supergameboy/common/resample/chainresampler.h | 189 + supergameboy/common/resample/cic2.h | 198 + supergameboy/common/resample/cic3.h | 382 ++ supergameboy/common/resample/cic4.h | 237 + supergameboy/common/resample/convoluter.h | 156 + supergameboy/common/resample/hammingsinc.h | 100 + supergameboy/common/resample/linint.h | 129 + supergameboy/common/resample/makesinckernel.h | 152 + supergameboy/common/resample/rectsinc.h | 99 + supergameboy/common/resample/resampler.h | 43 + .../common/resample/resamplerinfo.cpp | 61 + supergameboy/common/resample/resamplerinfo.h | 36 + supergameboy/common/resample/subresampler.h | 33 + supergameboy/common/resample/u48div.cpp | 54 + supergameboy/common/resample/u48div.h | 24 + supergameboy/common/resample/upsampler.h | 51 + supergameboy/common/ringbuffer.h | 112 + supergameboy/common/usec.h | 31 + supergameboy/interface/interface.cpp | 373 ++ supergameboy/interface/interface.hpp | 80 + supergameboy/libgambatte/SConstruct | 64 + supergameboy/libgambatte/include/filterinfo.h | 32 + supergameboy/libgambatte/include/gambatte.h | 82 + supergameboy/libgambatte/include/inputstate.h | 30 + .../libgambatte/include/inputstategetter.h | 30 + supergameboy/libgambatte/include/int.h | 29 + .../libgambatte/include/videoblitter.h | 44 + supergameboy/libgambatte/src/bitmap_font.cpp | 328 ++ supergameboy/libgambatte/src/bitmap_font.h | 87 + .../libgambatte/src/colorconversion.cpp | 96 + .../libgambatte/src/colorconversion.h | 46 + supergameboy/libgambatte/src/cpu.cpp | 2842 ++++++++++++ supergameboy/libgambatte/src/cpu.h | 115 + supergameboy/libgambatte/src/event_queue.h | 160 + supergameboy/libgambatte/src/file/file.cpp | 73 + supergameboy/libgambatte/src/file/file.h | 42 + .../libgambatte/src/file/file_zip.cpp | 167 + .../libgambatte/src/file/unzip/crypt.h | 132 + .../libgambatte/src/file/unzip/ioapi.c | 177 + .../libgambatte/src/file/unzip/ioapi.h | 75 + .../libgambatte/src/file/unzip/unzip.c | 1605 +++++++ .../libgambatte/src/file/unzip/unzip.h | 354 ++ supergameboy/libgambatte/src/gambatte.cpp | 184 + supergameboy/libgambatte/src/initstate.cpp | 281 ++ supergameboy/libgambatte/src/initstate.h | 26 + supergameboy/libgambatte/src/insertion_sort.h | 51 + supergameboy/libgambatte/src/interrupter.cpp | 44 + supergameboy/libgambatte/src/interrupter.h | 38 + supergameboy/libgambatte/src/memory.cpp | 1867 ++++++++ supergameboy/libgambatte/src/memory.h | 238 + supergameboy/libgambatte/src/osd_element.h | 65 + supergameboy/libgambatte/src/rtc.cpp | 157 + supergameboy/libgambatte/src/rtc.h | 97 + supergameboy/libgambatte/src/savestate.h | 184 + supergameboy/libgambatte/src/sound.cpp | 155 + supergameboy/libgambatte/src/sound.h | 95 + .../libgambatte/src/sound/channel1.cpp | 257 ++ supergameboy/libgambatte/src/sound/channel1.h | 91 + .../libgambatte/src/sound/channel2.cpp | 161 + supergameboy/libgambatte/src/sound/channel2.h | 70 + .../libgambatte/src/sound/channel3.cpp | 207 + supergameboy/libgambatte/src/sound/channel3.h | 100 + .../libgambatte/src/sound/channel4.cpp | 300 ++ supergameboy/libgambatte/src/sound/channel4.h | 99 + .../libgambatte/src/sound/duty_unit.cpp | 148 + .../libgambatte/src/sound/duty_unit.h | 64 + .../libgambatte/src/sound/envelope_unit.cpp | 101 + .../libgambatte/src/sound/envelope_unit.h | 50 + .../libgambatte/src/sound/length_counter.cpp | 87 + .../libgambatte/src/sound/length_counter.h | 44 + .../libgambatte/src/sound/master_disabler.h | 31 + .../libgambatte/src/sound/sound_unit.h | 35 + .../src/sound/static_output_tester.h | 41 + .../libgambatte/src/state_osd_elements.cpp | 169 + .../libgambatte/src/state_osd_elements.h | 29 + supergameboy/libgambatte/src/statesaver.cpp | 407 ++ supergameboy/libgambatte/src/statesaver.h | 37 + supergameboy/libgambatte/src/video.cpp | 1474 +++++++ supergameboy/libgambatte/src/video.h | 293 ++ .../libgambatte/src/video/basic_add_event.cpp | 75 + .../libgambatte/src/video/basic_add_event.h | 56 + .../libgambatte/src/video/break_event.cpp | 35 + .../libgambatte/src/video/break_event.h | 59 + .../src/video/filters/catrom2x.cpp | 194 + .../libgambatte/src/video/filters/catrom2x.h | 40 + .../src/video/filters/catrom3x.cpp | 360 ++ .../libgambatte/src/video/filters/catrom3x.h | 40 + .../libgambatte/src/video/filters/filter.h | 39 + .../src/video/filters/kreed2xsai.cpp | 243 ++ .../src/video/filters/kreed2xsai.h | 40 + .../src/video/filters/maxsthq2x.cpp | 2875 ++++++++++++ .../libgambatte/src/video/filters/maxsthq2x.h | 41 + .../src/video/filters/maxsthq3x.cpp | 3845 +++++++++++++++++ .../libgambatte/src/video/filters/maxsthq3x.h | 40 + .../libgambatte/src/video/irq_event.cpp | 36 + .../libgambatte/src/video/irq_event.h | 52 + .../libgambatte/src/video/ly_counter.cpp | 62 + .../libgambatte/src/video/ly_counter.h | 69 + .../libgambatte/src/video/lyc_irq.cpp | 42 + supergameboy/libgambatte/src/video/lyc_irq.h | 67 + .../libgambatte/src/video/m3_extra_cycles.cpp | 101 + .../libgambatte/src/video/m3_extra_cycles.h | 56 + .../libgambatte/src/video/mode0_irq.cpp | 95 + .../libgambatte/src/video/mode0_irq.h | 42 + .../libgambatte/src/video/mode1_irq.cpp | 33 + .../libgambatte/src/video/mode1_irq.h | 56 + .../libgambatte/src/video/mode2_irq.cpp | 63 + .../libgambatte/src/video/mode2_irq.h | 40 + .../libgambatte/src/video/mode3_event.cpp | 62 + .../libgambatte/src/video/mode3_event.h | 47 + .../libgambatte/src/video/sc_reader.cpp | 62 + .../libgambatte/src/video/sc_reader.h | 77 + .../libgambatte/src/video/scx_reader.cpp | 71 + .../libgambatte/src/video/scx_reader.h | 85 + .../libgambatte/src/video/sprite_mapper.cpp | 187 + .../libgambatte/src/video/sprite_mapper.h | 148 + .../libgambatte/src/video/video_event.h | 50 + .../src/video/video_event_comparer.h | 31 + supergameboy/libgambatte/src/video/we.cpp | 59 + supergameboy/libgambatte/src/video/we.h | 118 + .../src/video/we_master_checker.cpp | 58 + .../libgambatte/src/video/we_master_checker.h | 73 + supergameboy/libgambatte/src/video/window.h | 47 + .../libgambatte/src/video/wx_reader.cpp | 65 + .../libgambatte/src/video/wx_reader.h | 83 + supergameboy/libgambatte/src/video/wy.cpp | 105 + supergameboy/libgambatte/src/video/wy.h | 187 + supergameboy/nall/Makefile | 109 + supergameboy/nall/Makefile-qt | 55 + supergameboy/nall/algorithm.hpp | 23 + supergameboy/nall/any.hpp | 74 + supergameboy/nall/array.hpp | 94 + supergameboy/nall/base64.hpp | 90 + supergameboy/nall/bit.hpp | 51 + supergameboy/nall/config.hpp | 124 + supergameboy/nall/crc32.hpp | 66 + supergameboy/nall/detect.hpp | 30 + supergameboy/nall/dictionary.hpp | 73 + supergameboy/nall/dl.hpp | 88 + supergameboy/nall/endian.hpp | 38 + supergameboy/nall/file.hpp | 256 ++ supergameboy/nall/filemap.hpp | 190 + supergameboy/nall/function.hpp | 190 + supergameboy/nall/input.hpp | 386 ++ supergameboy/nall/lzss.hpp | 81 + supergameboy/nall/moduloarray.hpp | 40 + supergameboy/nall/platform.hpp | 77 + supergameboy/nall/priorityqueue.hpp | 106 + supergameboy/nall/property.hpp | 45 + supergameboy/nall/serial.hpp | 80 + supergameboy/nall/serializer.hpp | 126 + supergameboy/nall/sha256.hpp | 143 + supergameboy/nall/sort.hpp | 62 + supergameboy/nall/static.hpp | 17 + supergameboy/nall/stdint.hpp | 44 + supergameboy/nall/string.hpp | 18 + supergameboy/nall/string/base.hpp | 119 + supergameboy/nall/string/cast.hpp | 30 + supergameboy/nall/string/compare.hpp | 100 + supergameboy/nall/string/convert.hpp | 285 ++ supergameboy/nall/string/core.hpp | 109 + supergameboy/nall/string/filename.hpp | 48 + supergameboy/nall/string/match.hpp | 72 + supergameboy/nall/string/math.hpp | 160 + supergameboy/nall/string/replace.hpp | 103 + supergameboy/nall/string/split.hpp | 56 + supergameboy/nall/string/strl.hpp | 48 + supergameboy/nall/string/trim.hpp | 50 + supergameboy/nall/string/utility.hpp | 75 + supergameboy/nall/traits.hpp | 97 + supergameboy/nall/ups.hpp | 190 + supergameboy/nall/utf8.hpp | 72 + supergameboy/nall/utility.hpp | 36 + supergameboy/nall/varint.hpp | 92 + supergameboy/nall/vector.hpp | 162 + supergameboy/supergameboy.cpp | 68 + supergameboy/supergameboy.hpp | 32 + supergameboy/sync.sh | 2 + 505 files changed, 72809 insertions(+), 78 deletions(-) create mode 100644 QtCore4.dll create mode 100644 QtGui4.dll create mode 100644 bsnes.exe create mode 100644 bsnesd.exe create mode 100644 mingwm10.dll create mode 100644 pixelshaders/HDRTV/fragment create mode 100644 pixelshaders/HDRTV/vertex create mode 100644 pixelshaders/HQ2x/fragment create mode 100644 pixelshaders/HQ2x/vertex create mode 100644 pixelshaders/Pixellate/fragment create mode 100644 pixelshaders/Pixellate/vertex create mode 100644 pixelshaders/Scale2x/fragment create mode 100644 pixelshaders/Scale2x/vertex create mode 100644 snesfilter.dll create mode 100644 snesfilter/2xsai/2xsai.cpp create mode 100644 snesfilter/2xsai/2xsai.hpp create mode 100644 snesfilter/2xsai/implementation.cpp create mode 100644 snesfilter/Makefile create mode 100644 snesfilter/cc.bat create mode 100644 snesfilter/clean.bat create mode 100644 snesfilter/direct/direct.cpp create mode 100644 snesfilter/direct/direct.hpp create mode 100644 snesfilter/hq2x/hq2x.cpp create mode 100644 snesfilter/hq2x/hq2x.hpp create mode 100644 snesfilter/lq2x/lq2x.cpp create mode 100644 snesfilter/lq2x/lq2x.hpp create mode 100644 snesfilter/nall/Makefile create mode 100644 snesfilter/nall/Makefile-qt create mode 100644 snesfilter/nall/algorithm.hpp create mode 100644 snesfilter/nall/any.hpp create mode 100644 snesfilter/nall/array.hpp create mode 100644 snesfilter/nall/base64.hpp create mode 100644 snesfilter/nall/bit.hpp create mode 100644 snesfilter/nall/config.hpp create mode 100644 snesfilter/nall/crc32.hpp create mode 100644 snesfilter/nall/detect.hpp create mode 100644 snesfilter/nall/dictionary.hpp create mode 100644 snesfilter/nall/dl.hpp create mode 100644 snesfilter/nall/endian.hpp create mode 100644 snesfilter/nall/file.hpp create mode 100644 snesfilter/nall/filemap.hpp create mode 100644 snesfilter/nall/function.hpp create mode 100644 snesfilter/nall/input.hpp create mode 100644 snesfilter/nall/lzss.hpp create mode 100644 snesfilter/nall/moduloarray.hpp create mode 100644 snesfilter/nall/platform.hpp create mode 100644 snesfilter/nall/priorityqueue.hpp create mode 100644 snesfilter/nall/property.hpp create mode 100644 snesfilter/nall/serial.hpp create mode 100644 snesfilter/nall/serializer.hpp create mode 100644 snesfilter/nall/sha256.hpp create mode 100644 snesfilter/nall/sort.hpp create mode 100644 snesfilter/nall/static.hpp create mode 100644 snesfilter/nall/stdint.hpp create mode 100644 snesfilter/nall/string.hpp create mode 100644 snesfilter/nall/string/base.hpp create mode 100644 snesfilter/nall/string/cast.hpp create mode 100644 snesfilter/nall/string/compare.hpp create mode 100644 snesfilter/nall/string/convert.hpp create mode 100644 snesfilter/nall/string/core.hpp create mode 100644 snesfilter/nall/string/filename.hpp create mode 100644 snesfilter/nall/string/match.hpp create mode 100644 snesfilter/nall/string/math.hpp create mode 100644 snesfilter/nall/string/replace.hpp create mode 100644 snesfilter/nall/string/split.hpp create mode 100644 snesfilter/nall/string/strl.hpp create mode 100644 snesfilter/nall/string/trim.hpp create mode 100644 snesfilter/nall/string/utility.hpp create mode 100644 snesfilter/nall/traits.hpp create mode 100644 snesfilter/nall/ups.hpp create mode 100644 snesfilter/nall/utf8.hpp create mode 100644 snesfilter/nall/utility.hpp create mode 100644 snesfilter/nall/varint.hpp create mode 100644 snesfilter/nall/vector.hpp create mode 100644 snesfilter/ntsc/ntsc.cpp create mode 100644 snesfilter/ntsc/ntsc.moc.hpp create mode 100644 snesfilter/ntsc/snes_ntsc/snes_ntsc.c create mode 100644 snesfilter/ntsc/snes_ntsc/snes_ntsc.h create mode 100644 snesfilter/ntsc/snes_ntsc/snes_ntsc_config.h create mode 100644 snesfilter/ntsc/snes_ntsc/snes_ntsc_impl.h create mode 100644 snesfilter/pixellate2x/pixellate2x.cpp create mode 100644 snesfilter/pixellate2x/pixellate2x.hpp create mode 100644 snesfilter/scale2x/scale2x.cpp create mode 100644 snesfilter/scale2x/scale2x.hpp create mode 100644 snesfilter/snesfilter.cpp create mode 100644 snesfilter/snesfilter.hpp create mode 100644 snesfilter/sync.sh create mode 100644 snesreader.dll create mode 100644 snesreader/7z_C/7zAlloc.c create mode 100644 snesreader/7z_C/7zAlloc.h create mode 100644 snesreader/7z_C/7zBuf.c create mode 100644 snesreader/7z_C/7zBuf.h create mode 100644 snesreader/7z_C/7zC.txt create mode 100644 snesreader/7z_C/7zCrc.c create mode 100644 snesreader/7z_C/7zCrc.h create mode 100644 snesreader/7z_C/7zDecode.c create mode 100644 snesreader/7z_C/7zDecode.h create mode 100644 snesreader/7z_C/7zExtract.c create mode 100644 snesreader/7z_C/7zExtract.h create mode 100644 snesreader/7z_C/7zHeader.c create mode 100644 snesreader/7z_C/7zHeader.h create mode 100644 snesreader/7z_C/7zIn.c create mode 100644 snesreader/7z_C/7zIn.h create mode 100644 snesreader/7z_C/7zItem.c create mode 100644 snesreader/7z_C/7zItem.h create mode 100644 snesreader/7z_C/7zStream.c create mode 100644 snesreader/7z_C/Bcj2.c create mode 100644 snesreader/7z_C/Bcj2.h create mode 100644 snesreader/7z_C/Bra.h create mode 100644 snesreader/7z_C/Bra86.c create mode 100644 snesreader/7z_C/CpuArch.h create mode 100644 snesreader/7z_C/LzmaDec.c create mode 100644 snesreader/7z_C/LzmaDec.h create mode 100644 snesreader/7z_C/Types.h create mode 100644 snesreader/7z_C/lzma.txt create mode 100644 snesreader/7z_C/readme.txt create mode 100644 snesreader/Makefile create mode 100644 snesreader/cc.bat create mode 100644 snesreader/clean.bat create mode 100644 snesreader/fex/Binary_Extractor.cpp create mode 100644 snesreader/fex/Binary_Extractor.h create mode 100644 snesreader/fex/Data_Reader.cpp create mode 100644 snesreader/fex/Data_Reader.h create mode 100644 snesreader/fex/File_Extractor.cpp create mode 100644 snesreader/fex/File_Extractor.h create mode 100644 snesreader/fex/Gzip_Extractor.cpp create mode 100644 snesreader/fex/Gzip_Extractor.h create mode 100644 snesreader/fex/Gzip_Reader.cpp create mode 100644 snesreader/fex/Gzip_Reader.h create mode 100644 snesreader/fex/Rar_Extractor.cpp create mode 100644 snesreader/fex/Rar_Extractor.h create mode 100644 snesreader/fex/Zip7_Extractor.cpp create mode 100644 snesreader/fex/Zip7_Extractor.h create mode 100644 snesreader/fex/Zip_Extractor.cpp create mode 100644 snesreader/fex/Zip_Extractor.h create mode 100644 snesreader/fex/Zlib_Inflater.cpp create mode 100644 snesreader/fex/Zlib_Inflater.h create mode 100644 snesreader/fex/blargg_common.cpp create mode 100644 snesreader/fex/blargg_common.h create mode 100644 snesreader/fex/blargg_config.h create mode 100644 snesreader/fex/blargg_endian.h create mode 100644 snesreader/fex/blargg_errors.cpp create mode 100644 snesreader/fex/blargg_errors.h create mode 100644 snesreader/fex/blargg_source.h create mode 100644 snesreader/fex/fex.cpp create mode 100644 snesreader/fex/fex.h create mode 100644 snesreader/filechooser.cpp create mode 100644 snesreader/filechooser.moc.hpp create mode 100644 snesreader/libjma/7z.h create mode 100644 snesreader/libjma/7zlzma.cpp create mode 100644 snesreader/libjma/aribitcd.h create mode 100644 snesreader/libjma/ariconst.h create mode 100644 snesreader/libjma/ariprice.h create mode 100644 snesreader/libjma/btreecd.h create mode 100644 snesreader/libjma/crc32.h create mode 100644 snesreader/libjma/iiostrm.cpp create mode 100644 snesreader/libjma/iiostrm.h create mode 100644 snesreader/libjma/inbyte.cpp create mode 100644 snesreader/libjma/inbyte.h create mode 100644 snesreader/libjma/jcrc32.cpp create mode 100644 snesreader/libjma/jma.cpp create mode 100644 snesreader/libjma/jma.h create mode 100644 snesreader/libjma/lencoder.h create mode 100644 snesreader/libjma/litcoder.h create mode 100644 snesreader/libjma/lzma.cpp create mode 100644 snesreader/libjma/lzma.h create mode 100644 snesreader/libjma/lzmadec.h create mode 100644 snesreader/libjma/lzmadecode.cpp create mode 100644 snesreader/libjma/portable.h create mode 100644 snesreader/libjma/rcdefs.h create mode 100644 snesreader/libjma/rngcoder.h create mode 100644 snesreader/libjma/winout.cpp create mode 100644 snesreader/libjma/winout.h create mode 100644 snesreader/micro-bunzip/micro-bunzip.c create mode 100644 snesreader/nall/Makefile create mode 100644 snesreader/nall/Makefile-qt create mode 100644 snesreader/nall/algorithm.hpp create mode 100644 snesreader/nall/any.hpp create mode 100644 snesreader/nall/array.hpp create mode 100644 snesreader/nall/base64.hpp create mode 100644 snesreader/nall/bit.hpp create mode 100644 snesreader/nall/config.hpp create mode 100644 snesreader/nall/crc32.hpp create mode 100644 snesreader/nall/detect.hpp create mode 100644 snesreader/nall/dictionary.hpp create mode 100644 snesreader/nall/dl.hpp create mode 100644 snesreader/nall/endian.hpp create mode 100644 snesreader/nall/file.hpp create mode 100644 snesreader/nall/filemap.hpp create mode 100644 snesreader/nall/function.hpp create mode 100644 snesreader/nall/input.hpp create mode 100644 snesreader/nall/lzss.hpp create mode 100644 snesreader/nall/moduloarray.hpp create mode 100644 snesreader/nall/platform.hpp create mode 100644 snesreader/nall/priorityqueue.hpp create mode 100644 snesreader/nall/property.hpp create mode 100644 snesreader/nall/serial.hpp create mode 100644 snesreader/nall/serializer.hpp create mode 100644 snesreader/nall/sha256.hpp create mode 100644 snesreader/nall/sort.hpp create mode 100644 snesreader/nall/static.hpp create mode 100644 snesreader/nall/stdint.hpp create mode 100644 snesreader/nall/string.hpp create mode 100644 snesreader/nall/string/base.hpp create mode 100644 snesreader/nall/string/cast.hpp create mode 100644 snesreader/nall/string/compare.hpp create mode 100644 snesreader/nall/string/convert.hpp create mode 100644 snesreader/nall/string/core.hpp create mode 100644 snesreader/nall/string/filename.hpp create mode 100644 snesreader/nall/string/match.hpp create mode 100644 snesreader/nall/string/math.hpp create mode 100644 snesreader/nall/string/replace.hpp create mode 100644 snesreader/nall/string/split.hpp create mode 100644 snesreader/nall/string/strl.hpp create mode 100644 snesreader/nall/string/trim.hpp create mode 100644 snesreader/nall/string/utility.hpp create mode 100644 snesreader/nall/traits.hpp create mode 100644 snesreader/nall/ups.hpp create mode 100644 snesreader/nall/utf8.hpp create mode 100644 snesreader/nall/utility.hpp create mode 100644 snesreader/nall/varint.hpp create mode 100644 snesreader/nall/vector.hpp create mode 100644 snesreader/snesreader.cpp create mode 100644 snesreader/snesreader.hpp create mode 100644 snesreader/sync.sh create mode 100644 snesreader/unrar/archive.cpp create mode 100644 snesreader/unrar/archive.hpp create mode 100644 snesreader/unrar/arcread.cpp create mode 100644 snesreader/unrar/array.hpp create mode 100644 snesreader/unrar/changes.txt create mode 100644 snesreader/unrar/coder.cpp create mode 100644 snesreader/unrar/coder.hpp create mode 100644 snesreader/unrar/compress.hpp create mode 100644 snesreader/unrar/crc.cpp create mode 100644 snesreader/unrar/encname.cpp create mode 100644 snesreader/unrar/encname.hpp create mode 100644 snesreader/unrar/extract.cpp create mode 100644 snesreader/unrar/getbits.cpp create mode 100644 snesreader/unrar/getbits.hpp create mode 100644 snesreader/unrar/headers.hpp create mode 100644 snesreader/unrar/license.txt create mode 100644 snesreader/unrar/model.cpp create mode 100644 snesreader/unrar/model.hpp create mode 100644 snesreader/unrar/rar.hpp create mode 100644 snesreader/unrar/rarvm.cpp create mode 100644 snesreader/unrar/rarvm.hpp create mode 100644 snesreader/unrar/rarvmtbl.cpp create mode 100644 snesreader/unrar/rawread.cpp create mode 100644 snesreader/unrar/rawread.hpp create mode 100644 snesreader/unrar/readme.txt create mode 100644 snesreader/unrar/suballoc.cpp create mode 100644 snesreader/unrar/suballoc.hpp create mode 100644 snesreader/unrar/technote.txt create mode 100644 snesreader/unrar/unicode.cpp create mode 100644 snesreader/unrar/unicode.hpp create mode 100644 snesreader/unrar/unpack.cpp create mode 100644 snesreader/unrar/unpack.hpp create mode 100644 snesreader/unrar/unpack15.cpp create mode 100644 snesreader/unrar/unpack20.cpp create mode 100644 snesreader/unrar/unrar.cpp create mode 100644 snesreader/unrar/unrar.h create mode 100644 snesreader/unrar/unrar_misc.cpp create mode 100644 snesreader/unrar/unrar_open.cpp create mode 100644 snesreader/unrar/whatsnew.txt create mode 100644 snesreader/zlib/adler32.c create mode 100644 snesreader/zlib/crc32.c create mode 100644 snesreader/zlib/crc32.h create mode 100644 snesreader/zlib/inffast.c create mode 100644 snesreader/zlib/inffast.h create mode 100644 snesreader/zlib/inffixed.h create mode 100644 snesreader/zlib/inflate.c create mode 100644 snesreader/zlib/inflate.h create mode 100644 snesreader/zlib/inftrees.c create mode 100644 snesreader/zlib/inftrees.h create mode 100644 snesreader/zlib/readme.txt create mode 100644 snesreader/zlib/zconf.h create mode 100644 snesreader/zlib/zlib.h create mode 100644 snesreader/zlib/zlib.txt create mode 100644 snesreader/zlib/zutil.c create mode 100644 snesreader/zlib/zutil.h create mode 100644 src/data/icons-16x16/go-up.png create mode 100644 src/dsp/dsp-debugger.cpp create mode 100644 src/dsp/dsp-debugger.hpp create mode 100644 src/dsp/dsp.cpp create mode 100644 src/smp/smp-debugger.cpp create mode 100644 src/smp/smp-debugger.hpp create mode 100644 supergameboy.dll create mode 100644 supergameboy/Makefile create mode 100644 supergameboy/cc.bat create mode 100644 supergameboy/clean.bat create mode 100644 supergameboy/common/adaptivesleep.cpp create mode 100644 supergameboy/common/adaptivesleep.h create mode 100644 supergameboy/common/array.h create mode 100644 supergameboy/common/rateest.cpp create mode 100644 supergameboy/common/rateest.h create mode 100644 supergameboy/common/resample/blackmansinc.h create mode 100644 supergameboy/common/resample/chainresampler.cpp create mode 100644 supergameboy/common/resample/chainresampler.h create mode 100644 supergameboy/common/resample/cic2.h create mode 100644 supergameboy/common/resample/cic3.h create mode 100644 supergameboy/common/resample/cic4.h create mode 100644 supergameboy/common/resample/convoluter.h create mode 100644 supergameboy/common/resample/hammingsinc.h create mode 100644 supergameboy/common/resample/linint.h create mode 100644 supergameboy/common/resample/makesinckernel.h create mode 100644 supergameboy/common/resample/rectsinc.h create mode 100644 supergameboy/common/resample/resampler.h create mode 100644 supergameboy/common/resample/resamplerinfo.cpp create mode 100644 supergameboy/common/resample/resamplerinfo.h create mode 100644 supergameboy/common/resample/subresampler.h create mode 100644 supergameboy/common/resample/u48div.cpp create mode 100644 supergameboy/common/resample/u48div.h create mode 100644 supergameboy/common/resample/upsampler.h create mode 100644 supergameboy/common/ringbuffer.h create mode 100644 supergameboy/common/usec.h create mode 100644 supergameboy/interface/interface.cpp create mode 100644 supergameboy/interface/interface.hpp create mode 100644 supergameboy/libgambatte/SConstruct create mode 100644 supergameboy/libgambatte/include/filterinfo.h create mode 100644 supergameboy/libgambatte/include/gambatte.h create mode 100644 supergameboy/libgambatte/include/inputstate.h create mode 100644 supergameboy/libgambatte/include/inputstategetter.h create mode 100644 supergameboy/libgambatte/include/int.h create mode 100644 supergameboy/libgambatte/include/videoblitter.h create mode 100644 supergameboy/libgambatte/src/bitmap_font.cpp create mode 100644 supergameboy/libgambatte/src/bitmap_font.h create mode 100644 supergameboy/libgambatte/src/colorconversion.cpp create mode 100644 supergameboy/libgambatte/src/colorconversion.h create mode 100644 supergameboy/libgambatte/src/cpu.cpp create mode 100644 supergameboy/libgambatte/src/cpu.h create mode 100644 supergameboy/libgambatte/src/event_queue.h create mode 100644 supergameboy/libgambatte/src/file/file.cpp create mode 100644 supergameboy/libgambatte/src/file/file.h create mode 100644 supergameboy/libgambatte/src/file/file_zip.cpp create mode 100644 supergameboy/libgambatte/src/file/unzip/crypt.h create mode 100644 supergameboy/libgambatte/src/file/unzip/ioapi.c create mode 100644 supergameboy/libgambatte/src/file/unzip/ioapi.h create mode 100644 supergameboy/libgambatte/src/file/unzip/unzip.c create mode 100644 supergameboy/libgambatte/src/file/unzip/unzip.h create mode 100644 supergameboy/libgambatte/src/gambatte.cpp create mode 100644 supergameboy/libgambatte/src/initstate.cpp create mode 100644 supergameboy/libgambatte/src/initstate.h create mode 100644 supergameboy/libgambatte/src/insertion_sort.h create mode 100644 supergameboy/libgambatte/src/interrupter.cpp create mode 100644 supergameboy/libgambatte/src/interrupter.h create mode 100644 supergameboy/libgambatte/src/memory.cpp create mode 100644 supergameboy/libgambatte/src/memory.h create mode 100644 supergameboy/libgambatte/src/osd_element.h create mode 100644 supergameboy/libgambatte/src/rtc.cpp create mode 100644 supergameboy/libgambatte/src/rtc.h create mode 100644 supergameboy/libgambatte/src/savestate.h create mode 100644 supergameboy/libgambatte/src/sound.cpp create mode 100644 supergameboy/libgambatte/src/sound.h create mode 100644 supergameboy/libgambatte/src/sound/channel1.cpp create mode 100644 supergameboy/libgambatte/src/sound/channel1.h create mode 100644 supergameboy/libgambatte/src/sound/channel2.cpp create mode 100644 supergameboy/libgambatte/src/sound/channel2.h create mode 100644 supergameboy/libgambatte/src/sound/channel3.cpp create mode 100644 supergameboy/libgambatte/src/sound/channel3.h create mode 100644 supergameboy/libgambatte/src/sound/channel4.cpp create mode 100644 supergameboy/libgambatte/src/sound/channel4.h create mode 100644 supergameboy/libgambatte/src/sound/duty_unit.cpp create mode 100644 supergameboy/libgambatte/src/sound/duty_unit.h create mode 100644 supergameboy/libgambatte/src/sound/envelope_unit.cpp create mode 100644 supergameboy/libgambatte/src/sound/envelope_unit.h create mode 100644 supergameboy/libgambatte/src/sound/length_counter.cpp create mode 100644 supergameboy/libgambatte/src/sound/length_counter.h create mode 100644 supergameboy/libgambatte/src/sound/master_disabler.h create mode 100644 supergameboy/libgambatte/src/sound/sound_unit.h create mode 100644 supergameboy/libgambatte/src/sound/static_output_tester.h create mode 100644 supergameboy/libgambatte/src/state_osd_elements.cpp create mode 100644 supergameboy/libgambatte/src/state_osd_elements.h create mode 100644 supergameboy/libgambatte/src/statesaver.cpp create mode 100644 supergameboy/libgambatte/src/statesaver.h create mode 100644 supergameboy/libgambatte/src/video.cpp create mode 100644 supergameboy/libgambatte/src/video.h create mode 100644 supergameboy/libgambatte/src/video/basic_add_event.cpp create mode 100644 supergameboy/libgambatte/src/video/basic_add_event.h create mode 100644 supergameboy/libgambatte/src/video/break_event.cpp create mode 100644 supergameboy/libgambatte/src/video/break_event.h create mode 100644 supergameboy/libgambatte/src/video/filters/catrom2x.cpp create mode 100644 supergameboy/libgambatte/src/video/filters/catrom2x.h create mode 100644 supergameboy/libgambatte/src/video/filters/catrom3x.cpp create mode 100644 supergameboy/libgambatte/src/video/filters/catrom3x.h create mode 100644 supergameboy/libgambatte/src/video/filters/filter.h create mode 100644 supergameboy/libgambatte/src/video/filters/kreed2xsai.cpp create mode 100644 supergameboy/libgambatte/src/video/filters/kreed2xsai.h create mode 100644 supergameboy/libgambatte/src/video/filters/maxsthq2x.cpp create mode 100644 supergameboy/libgambatte/src/video/filters/maxsthq2x.h create mode 100644 supergameboy/libgambatte/src/video/filters/maxsthq3x.cpp create mode 100644 supergameboy/libgambatte/src/video/filters/maxsthq3x.h create mode 100644 supergameboy/libgambatte/src/video/irq_event.cpp create mode 100644 supergameboy/libgambatte/src/video/irq_event.h create mode 100644 supergameboy/libgambatte/src/video/ly_counter.cpp create mode 100644 supergameboy/libgambatte/src/video/ly_counter.h create mode 100644 supergameboy/libgambatte/src/video/lyc_irq.cpp create mode 100644 supergameboy/libgambatte/src/video/lyc_irq.h create mode 100644 supergameboy/libgambatte/src/video/m3_extra_cycles.cpp create mode 100644 supergameboy/libgambatte/src/video/m3_extra_cycles.h create mode 100644 supergameboy/libgambatte/src/video/mode0_irq.cpp create mode 100644 supergameboy/libgambatte/src/video/mode0_irq.h create mode 100644 supergameboy/libgambatte/src/video/mode1_irq.cpp create mode 100644 supergameboy/libgambatte/src/video/mode1_irq.h create mode 100644 supergameboy/libgambatte/src/video/mode2_irq.cpp create mode 100644 supergameboy/libgambatte/src/video/mode2_irq.h create mode 100644 supergameboy/libgambatte/src/video/mode3_event.cpp create mode 100644 supergameboy/libgambatte/src/video/mode3_event.h create mode 100644 supergameboy/libgambatte/src/video/sc_reader.cpp create mode 100644 supergameboy/libgambatte/src/video/sc_reader.h create mode 100644 supergameboy/libgambatte/src/video/scx_reader.cpp create mode 100644 supergameboy/libgambatte/src/video/scx_reader.h create mode 100644 supergameboy/libgambatte/src/video/sprite_mapper.cpp create mode 100644 supergameboy/libgambatte/src/video/sprite_mapper.h create mode 100644 supergameboy/libgambatte/src/video/video_event.h create mode 100644 supergameboy/libgambatte/src/video/video_event_comparer.h create mode 100644 supergameboy/libgambatte/src/video/we.cpp create mode 100644 supergameboy/libgambatte/src/video/we.h create mode 100644 supergameboy/libgambatte/src/video/we_master_checker.cpp create mode 100644 supergameboy/libgambatte/src/video/we_master_checker.h create mode 100644 supergameboy/libgambatte/src/video/window.h create mode 100644 supergameboy/libgambatte/src/video/wx_reader.cpp create mode 100644 supergameboy/libgambatte/src/video/wx_reader.h create mode 100644 supergameboy/libgambatte/src/video/wy.cpp create mode 100644 supergameboy/libgambatte/src/video/wy.h create mode 100644 supergameboy/nall/Makefile create mode 100644 supergameboy/nall/Makefile-qt create mode 100644 supergameboy/nall/algorithm.hpp create mode 100644 supergameboy/nall/any.hpp create mode 100644 supergameboy/nall/array.hpp create mode 100644 supergameboy/nall/base64.hpp create mode 100644 supergameboy/nall/bit.hpp create mode 100644 supergameboy/nall/config.hpp create mode 100644 supergameboy/nall/crc32.hpp create mode 100644 supergameboy/nall/detect.hpp create mode 100644 supergameboy/nall/dictionary.hpp create mode 100644 supergameboy/nall/dl.hpp create mode 100644 supergameboy/nall/endian.hpp create mode 100644 supergameboy/nall/file.hpp create mode 100644 supergameboy/nall/filemap.hpp create mode 100644 supergameboy/nall/function.hpp create mode 100644 supergameboy/nall/input.hpp create mode 100644 supergameboy/nall/lzss.hpp create mode 100644 supergameboy/nall/moduloarray.hpp create mode 100644 supergameboy/nall/platform.hpp create mode 100644 supergameboy/nall/priorityqueue.hpp create mode 100644 supergameboy/nall/property.hpp create mode 100644 supergameboy/nall/serial.hpp create mode 100644 supergameboy/nall/serializer.hpp create mode 100644 supergameboy/nall/sha256.hpp create mode 100644 supergameboy/nall/sort.hpp create mode 100644 supergameboy/nall/static.hpp create mode 100644 supergameboy/nall/stdint.hpp create mode 100644 supergameboy/nall/string.hpp create mode 100644 supergameboy/nall/string/base.hpp create mode 100644 supergameboy/nall/string/cast.hpp create mode 100644 supergameboy/nall/string/compare.hpp create mode 100644 supergameboy/nall/string/convert.hpp create mode 100644 supergameboy/nall/string/core.hpp create mode 100644 supergameboy/nall/string/filename.hpp create mode 100644 supergameboy/nall/string/match.hpp create mode 100644 supergameboy/nall/string/math.hpp create mode 100644 supergameboy/nall/string/replace.hpp create mode 100644 supergameboy/nall/string/split.hpp create mode 100644 supergameboy/nall/string/strl.hpp create mode 100644 supergameboy/nall/string/trim.hpp create mode 100644 supergameboy/nall/string/utility.hpp create mode 100644 supergameboy/nall/traits.hpp create mode 100644 supergameboy/nall/ups.hpp create mode 100644 supergameboy/nall/utf8.hpp create mode 100644 supergameboy/nall/utility.hpp create mode 100644 supergameboy/nall/varint.hpp create mode 100644 supergameboy/nall/vector.hpp create mode 100644 supergameboy/supergameboy.cpp create mode 100644 supergameboy/supergameboy.hpp create mode 100644 supergameboy/sync.sh diff --git a/QtCore4.dll b/QtCore4.dll new file mode 100644 index 0000000000000000000000000000000000000000..1cbd09747b3f4ad1bdb04bcb6f06732a058bf9d9 GIT binary patch literal 672768 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

FY;;K(cbl&eG`ZUAcJ!9hA)FdhqBmb%^1}$OIO; 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%0AP`2+k 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%0D3<06V!V>dA;L3Q$4% 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

d7nbG~M(2~C}k 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

g=Q{ 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̐O6e&f7oSpc>9aF~<=LUB> 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

8SWdo(*I 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

R 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

9oGc7dF5E2CJ+?-VPT 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�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 )kq7fT+yipjH;bkq&zn46nh3ZaY4s}Y}kpBNXo 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

~Zn_e9%}eu%@VTs2=i=RTz6d|6StSn! z@c0E!OaCQxbf{=!kDKD^DkxS|qH%ZmGLmmc1;t`a_(GPE9kT>0nzm$`hxxc$h}56G zOE&-U=Rbcy7im->IWIG;a8*})>r;Pp>*0K=E55OA^TO|Zzgab=&BRJ?k*qpY`d zflWH9?bxLH75r5V!FtB(B?aTyl)SzRM8_Kh|7KTLHLDG7CBEc<))SOs>{JP<0=jcF zf{~7@(Giwi&^TciojLXALHsXzxF7`9!>T@-F z>tEzsR|WSkCUT2J0d+U}8^kkYE5{xW;Es&VUW4bn=M*1nh)W7ig4D@cLY4Xq-e+|x zdS4``s%CWcg`(KLC8DO;?J`YY`cUDxJ8n&_AMN87?UMl`d3s9QA*9N^A}}`TuBZ%& zX}C#NAw|h!sTc6;LLh-mMVFD7Pe^PeA(DZXHGsONY>~1`-5xo9N%0j})xzac*WG|5 ztu@@&^1=eCjGl?6Ycb`y=(bXCw5+?_qnHTnqo2#-*GpQqJNM8*U#RoL%N|E7PCT1nsa#R{qXH`Mp5-g0b>H4dUN0 z#Iu`&=R2m@a{XEZ!r&lFhM!>4d*>rfix1)1EECma^&bb1J={~tv(yp7ENOpKq~)`Y zAYzsX;UDz)qhc`KNh0JC#_5ngMkh&A;zWZ`)H&gz({1Pw5U3RLwa^K1d;s=zO3WMh z${64ASYuL7(i}v`m6OLm;YMNi3EC;_VMr3`KnS8w0E_Lpy*T^0Z0h%77y!!N6x|ej z$9oG-f2-CE20j|LI@A^A=J0`dU=KF2P9(l(NI_Zw(9iHVjLtep@Mk6qbZTec_j500 zPLC1@-QQm+`Sb`0TT_w$zSmQFe}nUIycHoez_u7b;3=d^@DJ$w2MB<>&Izir5d3>% z_)(E?C{isL4>38tg@3#a*jYf=p?Q&yG=<;{B$jaufyqvSI&RaQli6o7i#~&y7 zQ>=UHd+Rza6bgnV1)!oMe1cc@SMqP?4O_odKv>*1k12o55{0Clhk^Tdc8M>LP!)<> z?G9}s1?5ucZT-#%a8i-9vVHd4oSg@Mp8p`Ee{JgB6NoY0F+75+rSiEekglg@hZXS_ zhU;_)>;2x6zksy9*apOC23V5b;srWsT=XkinXF@OO9amJ1IU;mP@k=)`qZz@nx(*G zn%HZ6GEKl4TJwA6fdbC?T2HE2hx8WLlqJA*(G6$RGGrJIWqxhnaBcUtDFWAxZh>ytC zL-a&Xbk}#KXf*wkftxLP@SVf3yD4ttbkv(h2ubd2TP z_#ly^DSKd4bPP$kVh-+k-}z*BPY$xbtUXEgl76gzye( z-|9|YN85RKGk{kDJ3dMZnM#e&XkK1JifOF?gc=*|gwlQyi)^+WK1h8-Z`K^~|LY2K`IpB{!lKu|OcBEu5T9fM{$55!F&?}rZ%B}(+a5b_V_%G^(a zoJCIv8$IU(Sph`ik0tw?KusJ(*~g%(igBje$_xTz3V^(t0uZxDkZPkNVP2f^2>Yyl zs98V?;USGCLIcF=BTNjQ0JFs5^~X~tHhk*@b2rAzRzFQfus;>wee%_9@UHOd?}QM< zrzCd_F~eMBW~{rPWQ9^GE#{ncIAgQWwv|!4KRhAu>79=)Hw8l>0yX*4E|9xr=+3V_ zxF}XC5HoclTlvEQK+%y%gV5y*Cl1FF_y-Bnp8VVrOrqGo zGHZF52E3xDVn8>58!ShY4_+Z9EvA{DRfRw!Z)vC!Y;NEqN2~jz zCv52U>4ty~U=xb2t0r~169ch5&*5zUtA>o`gwt*`#!8tC2z1Y34wneUO1p79VR+Od zDCYgtN2|ff%`d` z)|>m+ZXI-S)dKYCkX+;4XQhQtRBy$h)b-jX3Z6D_kUHZsNRgwdi1>edq-$y~!g?Q- z#B33iF$2mPrK$m$44i)63j>gf+X>v|niAtLYU$Cv$O`s>xq3G0k}*3cC97`0Z$s{& zARa?pi2#!maR-qWOSrPN(NZ|DfZ30wTF{T z^EDXda9z;u^m#o!Yf42ZxqQlNLAyzR(TQ}6AeDIro}R2W*ZBiq3mn2NV+J=E{W#vE zFw6`GO`hxWL|0SiY)bxPzOf+V#wd|e0UoB`^WQhL_dIuoxn`<LH+s3hC+NdO_(Fyg{IseDmW0I@}pl*_o^ zftekh(>0yfiqpM9$mkxj1ULQez1{s56YU#ut_JuYE@|ZW{U(T)lH1vhPlBrH1n|%= z0<>Y|6xb)DV!pXc>npv0wbrVk;igSMY_e|9gqW*N&t+cX<=zfR*0wiP%(LIIn`>gu zuTc+#ypEEsfA5jPRavErqeXDK%8Mv-1lFU`=SI==XZ%UaCMV|}uKY*<>D3Pq-a?+KENiy_3;UR#0-GSc|9i(Ng8GCexLbgUgH+NQ%*~Wwvk|_Y0quZ&P3U+BzQo zfmd>~Nc;CUnJn*8sFrp=gt(5%d^G$qC+jZudtA3PqOFQI?BX(k?;#bL<9HA8u1+}a z6H;eVoLhM=piZi1CMR6quz4B$4*K$13PI+744wHS6K)*Gce2fF!!QhU&pnKWskw)_ z&m2W0LaFA880HvObB1yirJ^XJQifbzgd8aeeWNLKq084l@ci;TKRnO#dA;8+)(gKL zg{%yDe)AaTcbaN#OXy0?vG$0VjZ(a~+#|&=ju$-)u!ZTI01(RCd$R?zmrlt1MSZN3 zQs-aN3m@%!hrPtQUcPkP!&7%DdfGXV>l=VOy6p#JOy5wRHAkr`(bmQ=fi}~Dp!K7H z=NV=B4yf>zGhI^6DSG>!Q1;8rU-{l#zQR+ZN8&j{%4r4#b64>3=x({g0*Uf`EDGQQ zHr!<7C>qY+r%Ljt43i3Ef*(URJyueEDm*G}Y{>PZdx68RWN)dj^N?+?5}9nB zVUFl$6e!FZw9SnQ87xzoN`K+80W4;6>^h7X?w2<|{;@P)T)}0xHB!*_?(;r1!Vycn z+TilUk#Wse>Qa_sIxR{szVwTs5(Fj2cmLZ6VL5r;I9+#|w$O$o@WC30&_!@w1(E#1 zPUHs0j8%NaokXE>-%NLICf%vMZ|3qqOY+%aS#uxp0OsadlDP9xX|5IjS^?y29Vi`Z zp(IC<0>${E%iOp6dUhzLN6`hbJEEcR*JpgrEc#DT@jjJA5mAit-=||nu@3vmLN_E2 z45|Mb`+&(@hqQz@i-FUNYyq!zXH>x_9xG0hiG*A z$su!-b^_JQt1;`JN`&9|FRM=Kk}eZ^Ct{97&t6K(4kLI48!>_Mmz&vP6~fIcSF~|) zKCL@%>mu>5q~JTRSjEN1&|wi?8_$MhZqQ+v5!2z%XFTJ4-+1;Y&V%pK^)yldFc6&& zFcTIFR=U&kG8CXt+lF{4@(@}7IMF4adh1dH6+{T7nu5v>i2SFM2C2RDDk=UP;Ft<9 zr}UE0I6a^80~o^>W4V8@e+{Y@wH6v9^20s)!*mQ!@CX9ktA~IOf;$4vUhyi)28S0>@8~nuq7C?St!C_lgS~#eIl0nf8 zag9LnY3A0&gO9F4Qo-bMzEupjoig^5OU}yC{ZHSoy2L__blY2Z(&cq!+?2REMuEad z{81+XHxXXpraxq5s`umLyg=)wx84N63)>?K4oN7@>*-wjczjQSjiYGPi4E^Q>jOiK z_dqJJULW$=#j71^%h3GdK2jniP585zz%RP#R>NiHYW8GGL<0wP`_0dugkBhqnQwJ9 ze>8Uc;{l_}Zs5PZ?uhSpN7I+?d7VP%J;Mj=d-Ii8UrnCX=EJfSwh_S;0j;fY3Gk-+ z*%)8ac4ypJcPlSTIbUb@3w?YG3^%g^X7(oTB4n?M;<~88vFDVU%zS=6W-4F0nyQ`D zZ&Q{lWT)q;s3zcA{$pRXQV7ee2`KX4(Nqyb<~z@tM2N0y3*>#jZo_0idAIYVGtf40 z_Q*VuPpV)TVnq? zRUPQcVz*UfX}-4Dy%}; z`)i!E^j$%ape1?`Tpt2lTQVK^e%Oo=zbB!t(bR0KD=1|Ioz;ts`xeh}4#3y#>3@HZ zaQfiL%)y#Hkp+=z7jo^Sr@$D8nv3D)IhLy+l*1(K7T$HtnV1qjjv%@kVi9Immg+ojppu0qRc)BM;x)(<`ATJ`RMq9P^bif+&be4!k{1E{XqB z0q8O;ttYTuU?}U>NU%-FH2Eyx2t_7RuR@wYAQBRDcpij#qJ~~+=(rS_K+s}|;sr4& z4_i>pBp@SyS;QcG5nXS(HG4qOc>1fNr=;+;EgThewy7(ch}+)p`uq2pKcIM#gMnSV zJ3|Ks#8$8UTy}Ie_%ST7A3@fw`r1Y*_`)*RK`!wgQQ8r4@}9poB`40`wY!Mz$sHmP z#CYevK!i~G&v)uC>dBnFYub?|ZW2j0xr&2N_9OCK?)zw63?sC ze5P3mjYxpX=n!1Q9lym8VZr+`aWHyN3CrQ0XajH0jC08eyyD;@O8C3-ew%C7HjnGX zOs;a1V!|kV=ILVw85;@S6gV+6NbV4ZI z4NM4vtEgddgEB-hk`Yec`agZFj62E&7C0R8Cpfj-+UBkMFVk!U6&_z&YojgeG4S@a z3^`*gXhTjd#<`bO5^I~TKitAnyO%^LlNJVDa+yrbwYjcqZMdR)?^Ih*3|%-{hfgAg zMBAYJq4rz$ugxZXl`Jsmb9PW!v1ccR>UACz0M zS5>Q}sikzn*a#8*C_p!Yt13hB7r?;Mnp0q(FiWzk%JEnZq9N-p+(hW4^|d*1>(@9P zzX!ZXX~Wqy62)z3z@ZV0a!9QWC7{_=z*k0usum8KDHVSV~ej zV8cKP)1-^oA`PFOC4$n0W*_ua*IP|XMC`mpSbegs7>}&8LW&E?Px>|r3E2+TMAfz< z9sQEN%3o55jzF{XUie9G=+8 ztAm*?;1(UMr=64p(vjR|%kl63KBLSzWa}IHFPqK+J`W!E_{CObRr!WDh2~GvaFkrv z!TRcyWHdS_efZZJ%Qd%WeBtLn>3h_B(Cr1*QCW3CBZL%%8m(_^i1 zaE&5uh<=~|!#baT(l*kl6@H_3@w^TtL~OY1g771*3VLJqKxKWB3y^H_YZi{8=uHX4 zlB*0`!1uzawClP=;Ck+@b>xxoy2|iLx1_7)ZUB#NwJz+xRjy8!$*dPWHe=dB${>&C zWXV{BUsQ>{^UR-xq5b^h0i*m;RjYRb#e^wR>a+Dbo}wbtBbxEid)%X=ZyPhKxN?SS z<00w^UzaM@J)S8Ka+h$7`Fjl9oO8)q^j_O|(1XA9^!nO3_dVTX--5 zHaRHbJbbkDc8iQP@3j{6-a-mhny}hlz~}_Iu(JII0`~51%ARnCTSFf@y*mQlhyqob zNSC8y+aKB)VtyF~d)M5tRgcqNo_A72CP{#v;~ z=n(R9x3Wg&pm5I`n5Q@4sH<0V{7MTJ?0N~q6w#$!6iqlOOg{0eI{slE*_wz0drz7O zMG~xI`z<>18`IxwN{H%FgNtRsg}&L~jK~2;OqE!6c3rPKYax>GUO62!K_OV{7=IXV z@nFY7C_6#s3Oc-U=6l;V#?l;vij3s^xM1>Qf|n*>O zFeWhw8SO8ESNU1RszZ3+6vXB!)KnH0YO^7Bvu~9u`z{2Qu|BSD${ zV1dwrK+{uZV78IafBbWUV{Cv`Qx3L%h} z{<^{Ro)`?Ju)(AaOma(b_S9@syc**V`Q*a7Y-aD?UanagUNPb2MyTz)V!yO#nbwF6 zgi0eA`BY0MFc|JTU`j5?>af!!0#K@-glftuxlN7AhCVY*R(KP`QEcD@E<{?`OmZUK<7JL5rC!XjnhU*g8Q z{&+TY2kp$4UL03Y8?-x~cB%VXuKbY^BH{dqn)26D5)I7`f(p0$T??xF^ibK(!E3k% zn)14LsGAx?Hov*OllqcyB7I&$iIjVsU<=+k*lYc6X_;!2rVmg+(`z6Z^H8Xot?OKdL6BJc>nC~TnFx0Ar#&u1n3q%*QLOliwVyf;kFudQMe~G_nZ%rx-aQbE>Dn2B;V|ae z@7MRL1lUKJh9VjYtlk{ry1iEGy2jp#%+D~B`EyzKzKq57_qWvPNG;t<`&9q8$Rkc) zAX*xF{OT8Ophw(VkoJdzId)vt+tvZb9hr9!9@0c}`2M;#I$i;qMm36|6=NWccW4L`!;=`7=`g zVH&HCu^0#P*aK@QRf&E5*}w0G9AvJcAxi0}T*tv@y@N%-!qN;Cm8n^c3ZVQwbL@gn zBFl+=RgL0tghn_iK58Ql(Wp8^6kPAv7klg_vA4P#tOE13${@&DN>9{2C_bwB z3qSK%s|VyDd_>4UZy*2ER+o_%TqRY+i|2@=dkO8~9K0Z<;1=il+M;5J-4|;;{Nb|EMI+|pKpK1kE&p2BOtXJ=VVa$B@QmRKfI zq4BR_rJA9dUylm8e#*U0bhc^7JKWq~=XWp%w&XS7czzpFR1?niBEsSfLE{lsr)|=( z8yMN(LeF_vkhp8JGfLCvS6i&(EY8lL|8f~Qs*T1ha6f!|Nd}M|)})10d(an{()}s$urYB;V6hGlSoTzU%?-aw_W^Ip zGrl4V8A!G^>}0z8yYj~Xo>A;CNIcY`?JC6PR6mjy5J#P3%$(eSbFNsecG73Dc zMPHOYoy)*_S!J>|_V(tQJbZH6_vIQ`$VE&G6Zh4=dtY5y*m@}E$>RXd96y1_&%^n{ za%JgO?ofofvelb@TyL(X{_>8Leb=ZnVC>i*u9x^k*25gU22`gY1y@;Eq}$+g(zo|j_TM4w_H6F zhDtr2iXaG`p5eQxruNGyw>+3|x`adY`?->$#%;7(-6b)j?~hK2RW$Tr%s7-Y^u_(R z)|1M|U^Wu@7=?-%G;Z62)U)mSeR=n8DZZPVZjx~uzxev)n)QFTn~Egw=7q)tZ;pM6 zD=z!zF*p?$!b2=DQT6f?VL4Rm&#Fk!)4{gUR5o#m( zOTwic+g=M4^V42+Y?IHN^ltF_BRD0|5Mr#{WUsj5dfw4eHf4Vr^z}gahIqWkh{GNb zW6uS5Vez^l2Z}S~J$pr6h!LHqfk`SUz6deck!zE!E6mKb?>1!e4T}hZrAH9_!Al`+Sgu7yNG`-Pn)`UgMm&@ zC{MU@Ru_jf+!!xQfd~(1EP)J?qJevg>d0`B6tcUGRKV5RQBAF=U$KkW)+^0qz2~8T z`$-slbxZu?D}R&TyvlkdJNbfhrm*#P2=d}-Xo~*BvY>;K@z2BPR)e`GO0HN=e>Qjn z>&?wuk?gg@yF+W_PlED7On}G5*&KF#GuT;hvZm=yMvFz2^?- zJ&y0oFK}~6pH)c>SNGv02at+KpVWg;1K|se{%2qz?n4+)Dnr!PPM_R*=2B5!z>yc3 zU2}W#$@$qQa!2>{zAtjgzHH-wZbrC&&1Kmt?c>g=_my*FJ&`Yip`;vV_<2ugtlI1a zm=;TaJ5D@v0Lv7_mR4UlAFgG24q+_7NmPL7k{`Xz*t{K>V!jy_}{g1Iv`2zTD1t@ed8KW*n(QzVqot8kKSN%G*uLm7=$S~CQ zY;18WUB&2p=ymKR%t3VekjRqiCfz5}wq*zXjC|nnK^`wEgxMM51x!78kU~PW_9^op z(VQDxCtZbpQ*uxH3W{bDvag^34@`eQ-dSJr@d03k!aF5J1gJZO(laKKA^^a>$n9Id zht<5j0eLLVOHy9YK-tdS?T<(&L2P-p4iaybBMC*rS{qS85G_U+VN7AOmL_OY}TVkSi zg?Cez`yOd3#*;wOuUl^x=PGi^<($_1lBuQZtj3C17sUN4xVbDk^Y*K1W+uhn4`L~; zs@8S+**RE^*WJiJ0LFkoMYa$Q*QZ&7dgHM9G@_$NZ^nmzI(|Xk5(CEzI7yRsxVLl( z+Rz`Q)ZbQkCz3(s`KRV~@;F~OZH`c;6alp1DHf@l-e;gG~1 z(>&Y(Apxsb-&gViWFAlm%OQ`uZ9A2O^q;ui2mw_D?6_h#WC@98x@3p4p?N}K3q*#Ctlb!|P2 zs@_qIQ#5U}WbO}t12}{`lF5}3=yiwY#2t);X;oON#{!zgGP3J$N9*(l315y0`bg*j zPOcw_v#6hb`|xB~?up6`k5#}&<};sw+B^BiRa|%O&?iWHG!3YY+;F&_dG6_F1N{Co zF%u4*&{LmJ!DE!KP2UM+-Mso?-ie^IE5zMrV-#fA4!))xs2tQDS&+ZcrK_cMDxJzv zp;qnf>FT2Wx(YT3gq6o}4`h{{)B3e#RgxYR063K44k=uRcv_?EATctXK&E~q4Y@BI=wKg}dzUdR{A|2n1i9`ZbDz*mW@uzqGALovY;%ur zY7>EKN1GNhn!D*OyDdH^z;l* zqC#dd7>w!)D=GwcqB_sEE{V=JPk-RX@(|)B%3sGe1Ae?Aq;SIM!&Rxc%NxN%*9YtPrv&6EE}&r312n z9=j*8oCyUm4O&@DVMn#PlBZ}G`o3V}Jr;1o0VvZ{{Kna#fC_VLIq<9j@9zdX&bq$_ zMrI9rE*To;BU{(s?-u-U44;p>RZkYe=7a7?s*v(JRX85eWWvB*)uH@w511YJtNXj7 zVYdM=oerO1TG|W8mKV=4X{eNTWvkCI{OMsp;fV&{H*Z&U04>2o%ZGUrEITR0D3s+v z1t|*(0Mw0d7oa*&3}z<}0-`E2<r>_G*9V0jtIQTKcNobTt&=_Ek zN@xTALUdF}FavZg)8n?=b`A!wG!Lt~`3>{p1fs#OGej)Er$dU(wRieG!5{l*FAli_ zB-e_GCmhq0SoR>+x_<0pLL&&{-?LM#qYOo1BJEiXBS=w$F=F+i{9~e;$KXuh*Fcym zv$o*_?JJ-rwI-FcQq&L*fyH^3_%cpp6w=Qc$i?LbIi_NhA*oeLl61bHAxD?hrG8_R zMz5NZ@R3^6$oXt?zKAzKiV$Nxq#+vo z2z!$_-zwX)^`|dmom1=77bVVl`n;6c4`BVy$JyE&%HKNCrkoqsmf3V;hir{Tp95V< zubox95~^}819My~BqMIWT-dD)S<~B?-VG7UH&8wBU*as`SlvChD+ZW*^6YzoUwDOu zI(VIo+Lf3IRVVKuzbj2jzEL`uc|&ExM;>E z+F!g{b%L=@IC8XJ0~ZqOhZ;VWoOF7>%c^x&(Z?_=XZPjBIyPSFcAlZFdY?tGk_VwM{XUusdKrf-mj4DvGh+Q@myxlZ4LDH-S9izk2rX?vr$;s$*bdig`&;c z=0~(uMW^gStw|EH#*9iVKI_!rUW|#ds9kc&yj1qOOuPVvIM~*!oZCVDkG#jq^vRh2 z?BkR#tV5St)P)ng5k5=&)@I>*-z{8&EZ%>Q9VHln)>Fk8`Wc9xEwg=vDq*|H>(PFX$352!_Bg&%u^+a4*4QMrYpfb-EOH4Qe)e_g zGk0e>>wEidH*qq-V}y~$w%K0;^0~Y(RoN%PI(UH7`w+fTeh}tO2OX`!yaL9h z4j794k*TvzJ|l3;gDB*#x@cLfe7`LwfCo+Ngp58K1`b)}A#^rw+%9yNxRJroKbs;i z(^P4XxOIkS&8;^54}B(rxfNo5u`i|4Na}Qpc9sMQ837U;oeMagp*X4it^OY)cKe+| z+2r3b;HYJu7<;UIx4{;2^}RIn#8sFrxj3tc%^=zidd~Hemuxb+`U>Q8%9lLjx{e-I)-t=#&W#JcWKcH$Q2J&J~y_$b&PWippm+uYR@+>21~) ziU-SdYrfmjrO&&+bvu>PB~{q7l2ze$TWN(x1}El&e4IpD){c!31sXg}v241WAS~}N z1P5YrE+pkA@+XxIfx?Eb+}C4<#pKUmTZf9qjoQ0ij(3@x$9-`1A`UTzu!vHrld#+R zY>kumCY12UkhtarN59h2Z2v9DKAk%{CWk(_g3($3zFmqp)oT({PX5N>|0Z2%a%)&U zoR805N?~p`+_)D0>9D!!G%@7&b>dZha3Rmspe9vYsgSIe2HnCm)F;oKQvaLH#`@}1 zAeSJe=yq1Nj)iCHEeF%#in<%qR|S=^#w5#F8QZW8G5HYW#~kL`aOgLg9wW*C@vhQYdG@JfJvepEJ?Yn zSiLpirx|eneQj8u^nEA2id}nLA56UZwYskm6O&)$jvf;^%M$jZ-26~lBvHE0R^#Y7 zvVJDh>z7bm_<>aQkb;-5bY|oPZuI4nHx%JGnWR5{@EQe#;q^G(Pe+`tIW9WZ^RBaD z@96}d%&o?@>^H8q8q44>&&&MHeoG2GpXL@(0iR$NpkfI;(&Gb>$b6ls^Sf^h?-(`A z!ppfwN@jWCl^}%Oi2&JFL*a2-dhsXPWL5C|zw%+_SE>*-Og{7dwqh&=ed`dKjc$TA|`F*F!&}#()`k+(^HO z&J42yNlWy%-Pw;WlRsIq*NfA>P$oLdZTap_F%bW#ePb`~deah8q>kbl;rvWF^6w%t zx2{8CpZw{0%ujg7X$jq#)XxvB;d7vsqdjIEeVDROxRT|eD0S^n+_9Xa)FVTbkVNCt z4k4LK64|LzQlEw%oUtW#!b3tq3;g^kyHhiPS2-Et$4`T3M?9-c*c%_pDeYijT%XcD z&=Cp%-7@6a=dWKcFXHX*_3D!h;A~d@xW8Ym@ygI`Ah`T2xm%=J zVQQnhvLDx)-Erw9_2GnR$X>^zgL$6|54cdfG9du2^H?0rN=K7y7DL9FI~E($WR zK>&?Fug@**PL6s$<0v&om>rqOG%)uRFeh0xvPb0ZBH%UT;dQk<;PShDWBJJQxk!u^ z??;9=A7J^)3HT$Ozn!&no$B5d3hfABiWoP;gO};Baj;Sc(#TMW>|S6=u!GRAxHIXo84wP%s&5cvb0dk{voEiV3Z)Wk+kj`oylk3(NYPa3nd>wMoz^?s9 zyosS#3}pzNP#jB^?6ofH7c8*D66~%?E0nX)_w^CqI~ajk@#C1(!s~IGbhHEi_kIXg{u4 z$O7;4WqI2SX6>DBOZ3*l2>}njG{+%ra+1e5eFq_JVO>pky>tWbv@ ze>k6;7b+rZ^Q{|hm$yn=+6atzB*Z250Ujr8@zMe&$$^R$8hl!&;&VC&40Sy=ZYHMT z<(406(z3PJVo=k{#R>-i8^SrSO<_V#+f&C%=Aq+`7bvERDN((ZX$CB)!hl#+~Qy*wzv@f{Q&JtVxZVZ zsI&wPTZUx^+q|)&qfY|!<-}ifS9UmqLxk>K z*x!k|VdbSg~mJq5>G724fzAU`Hmk|_uBo83Z+ zBNA6f)ZgzD*gViKAtY+NM9V{I}js zp72m+stgxJU-j(p=~OXfTmI*1mEZE=>@^KPiNKJ%H@p>LpF1OK`|Rxqlj>4fka+5q z-$NHd1byXTFLl4(>$em1@oo|ooTuf0tB?x^mJNNLlm@6wMr%IVC$DXl^Z4og*;me% zGSpUwHxA;WZiR-JydM$r)_JGEFe+)l=t3f!6kSO;Osw(id{QQ98%kZ7=VP0_w{!IP z6o5r3#V&gsdxlD>-*!_KoC+lP&tr_CDE%DOE2x^z<}D8$r5<@5sa8~ByP0!HmEgp5 zi#$FM6XmdZJA@Tt{XkmR;< z&79Cr`)BeK$XP$u@Y+1fAK) zlzl)RIIOm(sb8$WBMvV-b8q22WH@mOI0&$9qzv@v>Nbk!E%(}qR2PWgAZg%4MiJHw z<)0`+GUptURQhpvA|KLazbe(%#??v73N?BfTnSuG0$2@RuQ)d~_^sr6HMU(E`aDEN z8h#$KnwR1^sdD%yyXg(IuQr+uX=^CsoZs2g4UsX;>zU0d!L|quE2ToimTEh7xon6c zu}QZl3#+AvusMFdb9THygUSrPb`=nbnJWUy?MybE0+w3g&Y!5An0C!_DAK-itN2yn z;ZbMxim-|4H|de&MZw$Dn)d86|HuJ!MmkwHVQ@MNQRDX?r)g%J9Z&#;dFb}_vx*}w z4r-3v?kvnmE3*O)nZ7=`_R$=80E3s)*Zr6$SBPx2A0qfRVTv3V2A6*gNyjR$C_ek# zDMoi2d3=g=+s)cg5a$BF>OV5+o3Ku#+}#I}8>oyeagz3RxZA*L?Fe$);hq<93Hno3 z$nTn}!xQ)d7_Tth^Srx_dNq-)c}zU<&D#mStzPi=x^*;HjY`IVoT@tm)xJQa0^3|g z1KSy0oil^STD>G7QZ@|tsnIIUH-_dadcmcXgL%XIJKVYyknf`o+ebw%ohO*dS zAUG~~bMGk4uRo4)K4hTI-trDoFYP(~lfIdB0c}tKP6Scd}d( zW2Owpt^%abg73>#G-LOPNeKmHKEV$>jX(6ao=y(`@w5_g;I5JYL;U&k*-RFFm2M8D zB){BS!SLJ8+mYLRUR}($I`F7m{@1AM$*!;9u;*JN$=%S9xfkMKHK(XwiyS78!-p)o zrD>4j2SBE8J-HWE8&xjmtLNa&CR9D}AqMiQqY-I$rPpa^qc*VO#Pd)Uts|Yc{=SN+ zzn_aK?tQPk*SKPM>}qcQY*gTgmr$B^V!vR|)I+oOV=9)+w7QiU@vQ54@BAfz&Z(M@ zAq{VIN8PrychOV)`V8gs7<70Q5}ta1?L{HloNfy0hKwOU+X2i)xl=bYNkUWeZ4 zj{hXTp>IvkBQ8fmdcMlO>siaLOp{jFN?$Y@==p+q*^*nsi#UzrNR_Y;n8i+8gCKCf zz^g6T!;ad#cPA&=qJtCF*;$_x74Ux2<%X``kY1QzzL!K1%O&tZ)qCrH z&En+6x0Ri>*=4_5Ng9R#xIK<{lC3z*&jV|mJYzVQC@KyzQ)51p)@EJ1>mN&?eHc!oOS@?I$?_y`FA@{%z7k>dFbvw2DOuw}ygxWA2jK>BQaPW_=!F&0FdC@=&fMXrKH(WMiBw!<#6AUVyXKq$J zcJk|edwYa^;)`D91I#{EzWf7u@wiNb9XZW6(?Z=A0|vvKC*hl$nG5?y+P|6WK)b1$ zc*qaB@=!N!UJ;%Hd5FDeA348PZ3d#>M?y?i82jy< zOIBy!=MUm%G@E#E~>h&HBMouVf%^4t6>6oF!u8@N5bcbuaPMrF z7kI{em|M!VRbxTuw2HuWHiDzHL;z$;PA%;&R6j8>9ei-}-n;DR+{bK6G7H%BepY$OnKX3oqjNU0vCSu!UfA*hxbrZfQzNcjXa)YCH@TS2a4Bp9uh`Dp!{2qw?!dSeYU>X~vop*p&uVll?a(+0jF0bxefj+H z-9yagl+uIupM5D;$R#2YmFeq!SS)5C0atN+L2P@Y00j6_zajNC_t$QM44`e0YyDVF z+{YTc`=`WVIlXBkSh|?37BbZ*R6+O>H~k@1ki(ttxojwYSCKG>YP#*&YC;e{f6W13 zI1G@wM4{=!DdHA-cBr$j+uwtzFjAQ%Ldu3}KzeUC4d9YOzD`>x(eg8*GH5N>sg_xtThB-}H<^B_!!cq)<57 zm4>m2qC1JFx?oh?qAxfW{G@%`VMKE~p0h`jUrZ0@W6*amO7$h?P$ccSQ4P8Au>FtI z#!=m-@md2AL;&Y)nz)EbV_ue-j$d`=BDyX8^SitYGJy!t00A771K5}k+71bz zu(HyWSY|4UAjA^~4N$Lg-!<8WcTI8Yqg9w&;!7RC-oHEJii6XbUyMJ>(Q$4Gn7orv z<NMr(_q&Gt!3lURxp-a4+LC(&9aGB`0)m{?E^Fk6T z%0fKmEdButXKj-214wrtD5?s?|K#tda&LW~%nCTOq;E;osDb=r77X}7EdoUsON$}L z;Yzlz!*QP$H(fKBdT`-O4i=}fcM4O}@;#$Bd!z6`>safaeSfS&g+G5E1!iFXd{enV z(ZN26-62`gq$z(g^X!(3zRN0_jCe@b-`@O>0UQ(!-M&bC7)}i)!Ia{x6H32Z zM2)@+etrUp#fh1QHbMhgjhbP0bxR zm)^hh+Qz~b#*Bj{(#eFZtU}Q)b)64H@4y8*?L%$5u1;+s_yd{;wneI5{AqP2Sl0>X z%Tuv}0e{lwP=O{PJ#^JqAklPo+z4nJi$1eBF-xo?pTq$VK{ ziNH9^2T^jkK1b`1Gsve*Cpl{@>-67aVjoeg(;2bmR!k-+sd{tN5m|=agK4?)uYshM z?-o1r<@=L5+ahr~^Q3iQXVzEgcRH#^{f1H_r5JPD0ubZhsic3(hkw%GKxTB936Ifc z9RbMk>?^tqsFM!}-ae|G$tT>tM0njZgqK_pyAIo=34}>}e-0=zFr<+PGm5?fDTtgd zx%YU!A>#Z|xJ7W1m#k{2m9P&7UTkSWO2p3cV*Y%}w( z-@7epc1J%$>OO35)@=IMdtYxOjk1O-F`3)Lh3Nb|ERX}s&%gm)M27xjaDaMvI^-ZP zEwi}0;!+TBhDLlVyK5biGufBNw`g1=(9t2SwkrKZTa~aG_sk*7-1Au*W zzD@&{VSkvFe>`f76frxBS*ul4;G%T$TP%$7%ZHHBr3q-6{M=`V>%37+M!fMyOef}f z5pW+$h+42FU%v6BPP|L?x}dL`iP<&>M-=(bB z1&W9|Xwr|%dPs4kq{NoO8r8b^pDmYf=nCa!C@Zasy^eaV#I|mI!(#*nD?xo}7^x|* zq$VdPSL`OB7wDX@hTi!YHC7j^>%BY$T(G!uXJkf%;|#cA219~uoPHwm#tIVqJaGqp zq2qB+BW5kFqk#(r3{M%k6Tjv4SjjR%@fiElD!<~OA`i>0WyxRtc{w0Lu-uWQcG4c8 zl^ro-ZuSb||D1S(b(UJM#L5EM-k``iNrUi46 zSn95&FW=x{Rtc`ws}`~DeEe9 zXG~z^U9Vy_WvaG9VM(qZi4yBlPw&;7cCbS4R^VMKU>Z5iruT8-iq`qX#ablX(wInv z&`vkJ6RZ(RQ}}6p3=@~mrs6A>Ie6eLq017Y1S>8W1ACh9a8$VExuHj7;$crleF0kq z;lJ`=T~)Y)wF5U8bBHtlpQ3Y*XX^js_-ly#G4Sb3Tvv`~7;o!rIblC(o8% zzFbh??}g9oEV?rwMdx%@UGJE?)yNt9#(h4-g5K)9v?hHq^WwlO=AHfT56$9pyF}Y% zzI|Q0GlxCk;(mSV5xZOTH8QtReCiVaVp^G>#SHA4y;GH5HNPcr(>b?NPrg|u_p`s^ z?a8+nSy?5z@S$U>goEHW;o_7Axb%eAU4D(S_S zha+rzw5RHr%E=uP$ShQjZ}E|q^Y;y}!nqabh=c^btZ!>ES)xPO1AW@IaHydp=~Y~W zY2&eky8El+gJ_=;X3LIRt{+e$<^;kIm}_Q}_lF9+8LND=L+jBa&d*aP1`fC?Roitb zRk*%5$I!_U{60<{pp51+SZ%e8@R&fD)}~4@phCQmA{G_@yutJB=d-L3?_O4TFsFg` zaQJO$6A6$n>P`K;zNT%~)=#->dnT9R={t$o!>8iwb@ zAZ4iFK=xK=9+ez8lE3ymKg#B^iM&nJNs%|cg@e@BJ%L99?mqXo39Lu^sS1+5XeqQU zAf9O+UY~D!)fKr3(V@*RAR8v#z2mfJCJLk)559O~a78E6A9C)k;+NA6pDw3FF5b#g zXsfd``OARwkn79mjdIy|exk`r?C-36x6T3hvzpX)v#dUBTx6U`2y7SiXTYR0&cz`Z za=R@SoS)hWcwF;{;8IY2Uc<{TS8vf&md6OG+xJ-MT&bTz&L-C!!m6K($FWFZ3<(rqHRPi>K#lSpNt;o zYdrlQCS(DSz|HcsV*cGCDnIh*Rfq5-BrZ*wlfWPzijRQ+#$yB0spq|5%)vcGb{4=e zQP5x&P(=JF@>X?Nm3~O+mj*-*_3m^_#rGg59WD*K@`OlY+oovg(z3eHDlHn z+wYBZC_kK}ZrCId-b69oCJ13zqcSr_onFVAoc0uJvsW0jLi|PDV3O+s zWqtrJ6<&N_=npJ-uqdAifFO!Ut#X^+Z+`gD@q*@_n+}C(_|Z3VS@Q$Dp9VbjCUZSV zRu)*$YJc$mU=eUP&E0_&S)f6y?ecAmxs>Oe<8JoDlYWKw;4%++oDa#_fHE}v6l|xe zuZ9U0*4mMRb!|r*5%efRDBC4DF!(5)V-OOUUwMXpdIjaq@9*W%y!cXaR7*Pn5T75y zXL9r1)+eGy|7JVOIUL6G4ywtVkK3Xr`7{OJD1@Hwpd*{&$~rq-`I;C~WBnOgbvFc> zlXyzQ^{>vB2TcmyEkBZ=|M2Cztx!X)J|<=*0;pII(9hfSo9D-5ro6+{5Hh|MkHsws zim_5ntDku2L1CtGbGL#U0>QAD?ugWt&ln*&xuVfaJ_%Zq(rO=Og(<~AK^eK@Z!KYK zj$ae^va`OiP#DqaHAGgDue6&5Lfz{Jxz&nAY5(e?|qhN4lY;9|tp zhKBnu9^`5~9%yWojxiw(*sqjY^z>*q9{_{n5y2Ztyl#PVY;94aUC6~#t<3pdR^L7B zmHFJunNsbR`hEny)cN*H(Ecmrfks%YIIOn)AZi39exya9QUTw@UoKo$6+pHxxtyl| zT6ad(>$8wEE1*-WC{1c+LG&%Q_~gc}5|&nngx*%eQL_)<-OJ0$S7B;U_P!4AfJD=O zAG*bE>VoqvVR&uW9l=WAC-aZZvR*tfW`ZJJUXM=4E4sdZwbCPh&tl@~{hMl?w>X{& z^Y@#4ONKo2Me0}@e%5FBc5Tn~r4O4{|7!n4s9S}>L5ti_xZHu9!F*%lA(zc35Pc9M zZsFCUjKH1&E!n2SS}+4r29{5SJOdhZi8QB-3ArX%gQm2DXE*4#se!C43x>~sC%xFr zHFU#79|7I@3S#V%a5URYBkTIieE{bplYfw=wHo(1>5whB#<@mH9Uyl9sABQ*-Tt%= zrCW7Ze!41(Or_`?62B{6XnX&Yq*@(6Usvx-q)I0;s?;jmsl)3+D)4^ux2g= zu8*^Y+&6d)J*SXCh*J>y26h&Z6}jjSG<;=OKhJ?JU<2Kb7uwwn`5YL++OUW1?*iB; z)C}cxf#E$DB))6fQGZyAZsT4^lMmQw19x&nApE|3#UgMC&n|tTwf&WKqUN`%R|Pf8 zt@cbyiI^L(@ce~w)(Ajvg+MfZAxkKV*wp3F6l|rqiu|#?NtiQ3fw|R2wnR0dQ;wRV zbnjqpnU~SG< zWE1s7;3?Gtwx+FakwgD3aL+ow9&_Olbj9}Z=&hobluT5^(;1omL2Y8z>3sjXy!U*M zi^BC6r+g5P4l2AE3!uO9YGAdqL_e}wnNTH2HzYzy^j!U3;rYmgf*}5PaL}tJn+vR? zRn2^#QHY#>`nS$o@}!w<%KfIr)u8z{dG2 zj3J#Y{rdq=$wbHuDjgRp>hdeFoV@Ly8XUg2>(DLQKo!R{w_&Gog%#y)LFt=+)OJ6C zR)t0Ka~`b#Y6^a<0DA~WaA;o%_OW!srcu*)x!AZfsUM7#^)q=ep$9;T#Vgw1nSLw? zMu@*a(1Lf0uQRYPfz|T9_BP(PEp+Zuj&CI~q4dcKgAPvek8WAWcTw0*pU;Y;YajRx zAaXD71+#-J#lM3Jw2y*T)|Tx@{-&DzFyOGR=6BxpQqRw4t+MZkFTn-kuA=4i+&g*K zj3Db0VhGRTW@tA^_6s5TB=kR7llCo4gHkFhD zH6NFYn7V8Q)^H3t95FvoobJ(jEXx`i=W`4HmB7|C`FbU+711WWM2eQKaJ8_{C==zU8zR5j#kS;;Do?^jb*L9R9XV zf;9Nd^PfMinjDA&>p}Xbn?~TrwRF_9$wDhfdo-Wdq()MizjRLvn)9_`7h~O!qW-mbmXg>oHbF`C7Q!^c^1Y48Rdp%H{!EacuCCQ=W(ooO7Kex$E@fX>3_-XPn_Ptt4QnUo7jL7dTizCf4`sJS-^ZYBGhU`_WJmc9BVaw)T0hbW%FHjN-l|5 zx^nNy?vo{m!y^yYk*5*=JrR1ql>PAR)-EWXzZxs7(?gl+d1}R%bOgtV3T#qSpW)r~ z6ZW%Ioyt~|9(HMu0R3$Mypva+vCr)yWC*TF+s_hR+VRl#|+i6)H0**i`N;lWEif0M6(Dj13Cvgz}cjeLbix;?3KoL&MKF z$M?-(v$OWSXl{E3a568rLS#xh1EEZax|Zw0YBKp@n3_LcV4jbSH#Qr z%G~QJ9ND;Hppfc1u8A7)WuEa~F}6_>h$ic3W_zD?%2)DNtIagcg|5)WRn7%oIDJ5e z#52!3md#HG6L}wE9%G#YnS{T61S6kg2`rHKe%}L5iPY)xE|S2tt9)1Yr4k>1@um8^)2{hd|VedbzC4Z94vu zQ_?l3e|TZkE*-k$=OEsJ_bK4vghZ5oc9z}HslA77Bm_wEVM}|(mWs-CGZ^V?T^*3e zBYp*TonL4)?1{44qD(3%qv6t7S)iX!Tk8k21J__9RzB-Q2wvvm0CC5mf z+COC;wc^+9mqfL*(?8ptOHDR!IdyVg9L(_k0`Z>L6nY zH+12I{gl>Hw=zk1gBU|!{(150&<(~&7RZ#ZRkOVh zr~B~>GX-Rfxy1bjtXT-MIgK&$brb;o)p`_kOFr_1Y_7>PnkT&8TimQ+7yR7X|8``* zS6ki0?90w8!Jj30s_h%+PNi^iuX}P*XC`+uTpg!Yh zLH<&D?mL65-Xq`B7?kyo=0of1QMn?OibV~-&}z@`2`&9T3Zh{@^TEtd-OAmYJBF`- zcGOk~`<<$^sQAtwL-XyDwF!qMZxAylcEwt4raYkY=3^bB{WHV%ja#!*C-v)WlA2%^ zXl~lC@ncF(lMr(-Bh86c#b`A$8Y}S!BB@8F>WXYA{mAcFUsed!XNem1Tm^8L-@0{R zTK2?o;>=~!P&Db&Q#3XW@{K~1CHi4CBV1v+0Rq{P7Tbu|FsFng^^!bkZlzN-%@Ow!{|hRYuS zZH9puLaIOdqHg=0fr*1jm$7IO&3zv!X~6-3G{B+SgKxGk~C$Ix)FE0 zD7~2m-X(`6N=Bvk(^mF93^B^zfC`hx=LcSXE=O}oA;wN(XShG29+A33jY<2h@ek9l zX^Nbi}V1li6C~bjnh&zRE!`J`ODKP%1 z=eHr8U3SKJ(#Z4tA<`aU8Jwf9mxDq+#BmIl<@rC|TWWl*_||gRatj~BCbuXP87D5X?z$YV73r0ks^^G`smNSR_}T8j@=RhJq{0E$%ZxSH^kHCxQ2X znWIzVnF(RLgUff#%@iflq}B=)F+==TF@*(Y#jXeY#mG0fqsQQj3dCZIDr7jW5Wwl# zbb|OET~DoV{1s>$gsV@;bNl{;oR)h0MwXSIrr5%to_JRp92)m$%-U4sj|OZ*idp$> zJP{}h18GJ7P0@M|4&w=_g1uMrVPMu5U(5k*$H^oQh}y^#h{JLY$Fu{Qw5nxO8+64s z#RyECv{;h>khv;Jyf0w|V?W&PsfWe`M@{09D5+kbk~rQGEFMPplfgE}XOWNtvW{XX zE*?D4bBt*ia)fObyW(w`P2lN_50F|{rjpxmqyJ1-I3HRtqMPs@Xc4D7{Oww2w-1%* z|1Ww44Z!v71LJ4zRAiA}wOkYUn(I>kDIUL2uOZeqPHBW9Wjd zA%*f>${t;@lCpH9YHXK{L+o%DAY3st@M`kHGp;sU?9F(Pu5z&T_}TxoP~cG7Hezd7 z-z9RV;NO1AuFT&;Cm84!xRn>2KgL4JKp4kF6&ghPejp=uL0@?Wf7Lr7L!ds$P|awO4ODHG^F5fJ40*i3+~=m zr_S-871dh(rII5B4Mi2Oo%j44zwWVkpnV^BwvdC#3yN}yyg&D%K9r|X8s{*AmtlJy z|62GedFQw@XX?)f#F7inH+l7lt~C-nI8$Qa%A^C^9x>b&KAm-{upAus=GsiN5}uw? zOz)QVUSoUig^qa#_O|*UJa_*6eh5wFz8Bqn`Wa{$-Fc*a9f?S}xOCk5@UC^fri~)2 zB2F^!)fH*(x#?5@LLZCn|`Q zw+aS*^-P4-=-d@Daq!OG&)CQQyF1%ki#WdqkB{0cYxatr+W-ie%JIB@=n%l8>4@g!?l6~0M;qmtw?)a|o&UO|+0BVqvELCy^Xb)Hn8t!f4gme=pK46m31z5cgLX^HFhW=5*y2! z;W(sY#ljcF3~jSCBW;*jYbnIWFQM{mWx3 zUP@N44|dh;3FH8~TW><_Qv^_07Br1a=?lp@oBNluU~I~mZJK&Kqa#E&(f6|dZ!?Vr z-@^Z=RCd5T2>369#4lj@OBJ|yFYDmZ*}DL;=y+>Ctt1>vT4WoNXO5bp>=#V7L565r zS|%@y3oNbD6XWj_kOiTNh}s)Fe-DTnH?F&)HvWCFv%fxjg4GyXl4W439}euZQ?R*p zd4nfLum0HUK504l1@@uP-z4*iNXJ}B-jl$~ob~OUW>-+hte7_#{t|Mg>{$^2&lkoM zgOXT3!{FF3GxjmZu!_`<;+B&}2Rc1}dn^v`z(z&{60xj&!7R;t@@Nea+KAVYv^D>T zOBb9Lx;eJ2#avz8YTF;+%|bB}#qjO$rtE<(`|X+<+l*@bf6~X=+-|9Y#dL|C9$8W| z=b^LSS&-DQER@@YNh~rXh|}kGF$1=3P4QuqeSp?~U}5V$USvhs?_DEvO~8)~W$}*B z>!*gz&we@z5|04Gr_QxBy@mMVmHjidQ72l&l(EX;42(j`CsmW5biUT54k$HRBZ{l= ze(%N(t_k2>*Q6@aVa)ld{j;n<&g1EODH?~@Trx|_akc!oQDA0mER6`sjG`aAks!xKD-$zI7UXa+wd0bj(X z@s1jq4@luoMEHBy@>geA#>|MR;!ilebkEA3h+OJSHNlcZ-v}+6NZ{oLjM%(ET@HmrNzO!^2#qC0Tb2*eB^=(o;ZNV2_06Yt6%_{{>zw zeNEpx0KvE3h&gd++XwH|1pHw8j zySx3TVm-DGB%Ra;hW~*`#5{VB7Ue@?ZP$A$M01w5DqaGIuY0MFJ3jh^+bE_R4dVr1 zI`g~B|K+@PS!Z*$@Iz2E2++b zwgUfV9FPuuLN4d+(&X$N?tNZ)SbD$c30zM=KLwSd8U*N^^MZOVWBl#(X<1SNy6@8< zVVlYlVh}0(Gz4S?9JTaNg$IN$hl*Vl>quFgEd^=;-@uJ@xQ>(Wv4mcBt>8+L6D&?h zU*;v-V0^HY`QNYCE-+Yudc450?Thr2e|)T3JSG-*nnkjJ5g)l=1C$NzkL6DejE)JT z^nY;Kk5HfSdUjP$YdH*sWXoF%BICV3DD-!wGg+OIjWaFmH}?8T*{D^i5`LpK#X zP`S(K2V?{&HyI_G7Ls-u1WNws2-gsYnYWb8NMs1Jm^^co9}`-UFfYVLROP1?rC9&; zA8Agb4h?VpL%hEJ;maGT5~*{XPya+Mb8gpawo~5^KoZ~B{O;-TF}k1m_l4nMB8-6n z21d)TD5b8k=Ki}MovxFl%$iaA>SxN#1{0xG6LCm8_yAnwD+tDgfQdq=BP?h^&@O@G z6Bak|&v*nWBMu$ai7?QA=oNJ~mUyKMX{T383v_d#Jys>akmfo%%@3sBP5k89YzrQ4r~sy@ zlj)RQ%0L!FQ__VJl0MhmxS#6=n=M9_33B>AX#-FO#!3=Z)4AkGX=FB@lv^+^ zfr0=~q@T@=&^hyGf=uVb!8wV0^yE#ighxR+{`tELF+3-*BqsG`c3)rNZW6TD2Dr!5 z0&`-UU#qhBGwU8SMQ(6y4M0C6fyR5%fPZ|T=v~LPl0Q=>A7URMZXqwW@)L>!I^y`; zTZxFm6Ms?6hM5cxWhip5c|+GixVu zGAv?g&(d!7FED#@3M7__{Z$fz`or@}V?3(0o-yI7eh2$I6woeOkR)cQ6I&$^yfFlc zh7-O)VSImtQk1c53`>)N-b=~2LxWUmx((1uS(aGT=uJG3|F|JIEOP0HfvmXkHucHi zPvEBmAG&U}uLz-(t{G^(f6YfhZFPKh+nU4!F%oQvKeu1`nsAF@n9; zZ>_D3pIR~@5D`Zw>`FPGw_(_`9DoluyKZQ|iz)gGmu|F-4l`NkC1u;jHFL!(!xfcl z+o*p=O`y-*0TXndH$B%qIi_R~pq+#yJMRo}?=)n(>0}yvH=N28@}Cr8AbPFFp(E?I zM4$+6Z!bKcE_zpxOJuv(ErVnhCy)-n*x4j5`N+DT7>;) ztfIs0Q^>9m_L;hlUgtO{oQ%w5o!Xx9T=F!6x$iQBZ?~T`FdSl_eh4zooE-KJ`gfiy zn8I~$@}>FixTC>#`uYo|s_o}cJBzR9bp{&*mnU_<|3X7)b7F{r*Dm2HlGxoa!N%Hh z@T$_tvfMRR#h0#~mr*#eEymk7XIQ#=+YAlt4nsb{?JU|u5`_yDM7;fSHrB?*=ER*L zN;4wV-FJ&;vi7UM?@XcSwxu z2D`o3WOWas_@hUJ$PepvYw(gdx#+}sn`-zVC;s68B*qm5x;7SVq}Z_tnL~8Qpz`>T zr>&RT@rs-9eVanuEpPxEuV$BPLTx1nkhZOu=B+1N^ve4i2SO_!2k=xUp`k7n^;vQC zz?A!Xm!osj#X(moa#mWo2NPr8Q()%&&0yebwwu`-Pqq1fi$lX0rl)83!u4n++~^!n z;o&$~uwr?QA#rdB=K!%y(wd1jEgp|uiJ^SZRqmLFZFHj8`>w)n1+(_r1!fwL!A2{R zz3tju$@+Ao1z`}98zcsxfNmJt2!YIC4|wPD<3JItiD%H`aNdcqJS{mdF`Tai^MVmwP!uc+f?ry`s2MA3^%>~I)V+`)YP^z3kQ4gQI z!9fCF?#fy@^u1w5z|IBQIeAv;1yj&TZ_NI2liEJE@S?^4x!0?*MbudTXgA@9+KjP2 zL8suhekjnMaYMg+Hbi5L(e4m`BlJL<0`SjN_gJ5YXM2aYS!f}{-su$1R)8|a2P*F!!tGhG1t=!fs8m=wGtJ%!DGxz3raHp|Ev0vA|s{;{Dk!y&01|E=&xEsQpt z3N9c+-bIClMo~KuATzyY?@D8|w6Fj%JMA{J&OqODA>7=5mI#HYs>OxJS;+@~_7K_l zSt&O>+S-?&1U#Pne#)#uR5?YwGX?2vobW+k!0`O(MKff3*&nsu4V%;MbqAuEyO8tp z#M@)OH-trCDKIz$-ja8<*BI!r{hUQ9H;q@Ey9E>QM_e9z_DWHE>$5*nUP0m&>ebei4;O!_ad8OhM_vQH zCjcgzlO86GjZD&qa&kTzf1f0^Fjl``6`dH~EIYV#xm$;ZS01%hQI{!CkVTFh$r=?P z^;w+;)Zce)GT~n7{-iqHf4d+MH81|Qzz(eO09nI;EEY>s6Jer|I*`YBSla91WO<3K z9$VYwx@J|xE_)@ z%ojM3(3}50)&c&>Rqb3_%F3eg;zyzp-Y1EtNwL!?Tt2$CLSlqHTiFy32shS|CvSHw zK>R%33vgbKd1)C-B|QQ>vQ5DQvq`@Fxe_|PY2ZVe>A&Dqy+rEhsxJ95`aiD#0^uFX zC;QQxZ1X41mJ`<%nc0%^w&yip3?Psp3YcuAvyc`EvA`1`eiWq z_fo$Uv}pqT;K@oLzXhav!NhDn0Kp0(?|V3{0g^c&vCL}TC8M1_ z@h5Xiw>>N(W3NcS(nuyd+uYRe%*lv;UM%1xXF)U*GMGDHhTmM4vBe#A%&&aB<62e2)>_<48@3=&#N0~| zbn(IERHyvA8gi)QUsnM35|~F>5_fsX|Kz5s+3d5O8@QLNIr@V3BW>0;;xISwCtnit zCFDzU?@|swR)cN8dBc7>_xwfant2~X8k!)?J&ZBbm9xhDw-e9z7>K=|TjelcoS*u} z?gwq}lPB%|GdV*d;XgXO_`hX=2!ha7!q+=Oy3^HCP6Eu}6&i4WsvWJmSdG((To}jG zm=`cAVgc>u7drTk3|OC?H1cmg;>mr<_LpcgH~vt~zfL_w!Y*E0<;&ut!p)7j5GlmUsKzh}I9*e`0oEbZzVkzt|X3 zk~Qx1Y|Okr)!*#8S7pCtrl_GOne%2KV#TA0qw}WUZb`o9Xg0auL_V`W>8Nc_cyAe( zEcIyH{;Z&ipFiKe)q{F_T>|GX?(Z9-eJVO})<5aP%pk5x{ip}w^9|4RI+KoI7TbV+ z(li5N+ek<~evP>JO_Z~s3*6=?_fgqSz-Q?r3|UaJbEz)bt?m2(?=fB5EqFuG==qH> z4W&7W1kEtb1ng+I$ra!2$%gbaC&(3%JP75f?)NlB?YE`T_zSwU-W;_*j{^{YIf*e@ zkV{GEH75`X)Ay{Gv!bsMO_SKZ2z(8so^!mLH9*S>X{ZOU9{@^9i^$MIgZn`*r84pr z4eX=)Dp#PtXeLQCXhP>;g6jDN!77lf{c-b)DiUEXRClMhm*Ul>_D+4eFKJqaUI7%+ zm2v9r;^7(Z+-01AXcJvcd29dH?@GDQLdq$kExJn7#4VC2Fej<~>qUSVLn`}o9b0;K zS?v&6BFHI|Ecdf(#$P8xsPTs2bjKK{6AJUE0Q&`h;g>rZxIy^Ac;OC|_C;{}mZ5D& z)yH+)zwJ1`kLSh)1$E_Y>@DRD-K9uHri1KUxQVH`m~hv;IU^)}(d*rDdlEPMwfd}@ zGD*PR)*}(=GDE(3f1hS6m zc9I`APU;KP3b5bmI((5rTB!TVu?ZgN;D6m9af~aNiIu&k$jvvuWQm;-i{IssMT&%@ zFO6B95k*(L9-Z#^gs%3+||Kl3mjS2rz? zU>>98?`0CcE5%EZOej-0;xFhwsi(~Vt*f6n*0$WbJAZwqU|m`=j{6jY zs;JIp4dV~a5O?hK0MGavG$FEZ2N&}j?bX0&9h`#eVc4Sg*@%`?p*S361{t#upYesJ%WoZ4#sj)8NpJ6u2V!dvX$xpVTSK?cy&?o@b3U{t zS3Q^Me5|P(_?jDl?@ClZ#zuE-{pB-NQiL z^vu|l2-Nk0vuQF=S*hG|E@IoQqwlhfJs5iE(AC)npl{zY=tvFWos~8u*bib7;)D+R zi-9!LFH2!C#4|QPdkJ!%IRxHkov7jhg|uaeqy52IZ8^nQa;yOBt+bFr^-;)UqH-l9 z0K-pkKtnJX2%AXMhTOV)oL{uZQif;p%Q$))5Mq`LQ>4}x@@>C!mc+$Xu(iEHrbqN^ z#k@^PB!1@>~XE0O9MUfVc0#Dd>zPzm>>}3 z^uZNsbq&w5?Gvcx=fBOfv6@;ChNGA^EbY2_qNW8_jeQ1y%UZchj{!TJ;S*GVfDhJN zec^}H^MY61b)ek<&q}}1z$U=X24_6b78P4^-%6?Io0+u@m=A&v;T~Ax6NZK+92{Hx zv>V{0L;heMO+i6We1f_utHF*lGQj1)W1QWs**hz8ndX*)&fH^$x|Z3dZ;t?XU*Rza zvJ5a;AUV7U29x!lJ}mY!rX6CZ$yE->*VGAO+ZO0}olRKH0e~Ea031ze1X9qj)23V} zkI?S_t3V$O{`4xHVg+nAL%1`sh z9C+?&2wFq^dty$u#(0;ajMCBo>W#=-{lV*)6)c%4`YX18;om!_4a`pIhC1;K%qsrs zzHYSFD3I^o_arae`dInl5 z;hpd(yT6-W=9*9twfu)^2TLz4J3ryFz=IYTU5Bj83y4RH-r!e3FzkYiJHFK!4Vs7l z+}nK$D}|?A{>@pw67k!ikx(G0eAvN(sxE{$>T@LhyzJA+_ zegdb8em?7%FFD$N0pibsgX%e6S;wr^_p?Mn&h%ipk2xq*ySdcbXHwHHy>uO-?ztj- zjEgfwE;KC9pcJE&>#JsO@SSXp&s=}^WSE9dS;s=1?_eWS!_bef>OvZ>F!;ZbB$*6SHo8{w>%{Q;kd=CWCqZm*lL-1R|pV!CV(6Z3K zrCZ^E*m=6Nu+1g#1+cH$m~;|8yraKwnCBUD@d=cl*X}+QsMv3OWr=Xg#mpX@0CF^$ z|1RSMa^A;;3$AhfMvF1Ck|!FSIj_g=h}3S^Gz0z7)rprP0C7gzDF~W!Q<%}kHVF7z z()*~9I&n#>F?fumefz}ODd=6TOe@W6QzfF@pw{R-Kfr`Ux8%EbMjvW@dHooAO3UR z(@Pg52$LA%sm?Us?Z1|8Jggv*p8!~eeRATH#ResqEOVER7bY0wK+qO9Gxg6){=z&j z!;wCFC_6qYi^J?;gn1IldPER1{csD{FUeT4VXt8;E=wIGz|#CP7N*t_mim2M+W>%j zt6dLEU@{qk9KKFe-_bEW<(bGa=;q91zwAq03K3smu%=H!AYdtNRS{^ICc^ym^vmfE zOHkFMp6dGtG*cIO9gzob1e6p{+a6B@oqld-zN_szd4_675^<~3KSf1(!B9C~2oE{c zulB{9$fxbym1D*Fin&Nq^_??27t(bIDPnLpS`gdIHrn}0R%=3Dmra_x<^l}_QwZ=% z{Y^>XV{3;ls3W78^Xnl2^|d2d9>FpSfLb9KX_|g7OAU^KKh%D>vd7we{P^n5G@mO& z$6JJpW9=&P)I@CK&ujyExD0Sy^)RDL1=PTwy6q3gUbicy1N0x3w*Ba`a62r1_vblQ zsMLLDBlJrbgLmM2x^(?^G2rV7`rebP?JzM$O|+YB=z9_(&oN$;Lv>C z@3KkUr!X79>^;bB!-TRrKDk~N9vDcQ5?T(nc#53&Rh0^gw;+r{%(5A$iOPrw7!K_Y znlhk-cU^1MtAnR~=3?ijVD{sXjB1LBCN4phS}7huSELc3pe|y*)GLFZPGVx58N79m zP32V~tZ|1{_|BXa75sug_o-EJ82Be-c`VDP%)WeP7{LPqy^JggmpQ|GjT(_5l1@guc|9&W$Z%kjRM^3js`lgY`ya!^Fi9CHt4O|@H86=hAdyitc}vUfYq=hcL<$3b;17s%$$9k>n<&wDrjdlr{s*E$Ho%WF0y2=0N`5Cx zQ6{+Va1CVhw7^lD=OLVskb6KoVw3!;z^(U-RA1MZ)ug{$icpo%Bq*8l^EV}t4TI&E zK_#hL9X3k8XNi_eTkr>F#lC$lBY%ys8@kcq z0pVKUd`f?G>{=_IR{*I#_tzvz%b!BKOMhG7gT99Q4MIyn2F-s^*Pa5c)5tyUZeln5 zlN_q9l42CDxRJ$k6}nR1!Iq=kBEm{W6}*Im+;HF_yrS1PmWN|X9t8C)jq>n>H@J(m zUV{+OH$QipO7$js>ANi?o1}I`s)|N5-r4VV|6AtVz&Z6~o|2>MB%O0QvRnIoqpDu* z<(-2su}l7u)6X<_&>CR93q2!4dw2s&Yl_-u>Upz%r-{U4H_aE2I1{^tUfEhQQFC0I zIX5JgNP&>t#%Pj0nzmSsQ?NzDb)%=4{%p`}d(`{0K6iBVZ>paM$tVakdij4xDny*f z$5%H78dtwP6rR*1iRS0^N`c3XUs4jhU;2dyWko$xR=a=`ZCSq>gS6d_Rb=q4XwKUn zZUK6!KJ|L*h(FKN{on(h9gH%V(sE=)B&)45L0)5oYku;|-9cB2;d>P>9AxX0`z_E9+VHdlmNcM^Ykpz5XIPe)LH z_vM(VW0mL#F%Tt3RHD1a>sAymibV2F(3}!n%(aFWQ@k*Or&Uqs8&lSfsRBn|bbLdE zGx>`%^`fe&)iXOkTu+>bXWdf!n4^g?OqzszlYQxC@-7*|xu3|Fb-xNkcmn_Vg8jgD zmZn>yZAgL$L{U74f@h1n)L<5>3v)@1;hxuWyUs}Q0neGyn2UUg@SX7l*Nji8uSoQ2 zlf`5qHuli2bg)xAIf0E=b$A)VS}4udaU74|#H&KF-f00THvwc4kk&l__|J~YA z@>FcpcQGZ~rrEMw`We@wucROOBPk8H+?ORtq{lcOhP)K(^ec%BpXLESqp`D)TXoI{T!X<{aLGGFpLUp;KP z8lQ2csQL5PNtT*3ZI%qO#G}8&^U2~ef`9(PMnq_UR;HEjBd-!nMR9kR1S2*_2s|~v zc4KWZQbaiTw$4?5o|M2q{o#9}N&?%hCoo0X;KT1yzg0aE<^0J#NS7-{Nv&R5K6_rQ z1uK#&SeC-yLQK)x&gCPx_7LgLonqh@wGiAh_X|gyke46~MQn;9Pf{+}Y2ga$j@0PV z0Vy$_V2h3@>SpTfNu)I3ry#8?=v8g#c>CaIcHYIdEPdLj$I1EL>25c{-X2@?MLQn6 z1$K83F;F<Y44ewQ%EC1riO=i;|&6?mtc5>(Jk+)XY??tn}>9pUg zaJl9(E%#_d!vN_Fx>7X)OtPMqyZbl5<;fRM|y1H6eA8m%*NAl2mfB=FIBeoSag^fL=6$t#=qofHV6(t zCrL51bgBT%5p#OItBjL{|e7c&>Z2*KF?^__bZQmMw$Nk_3)s z$NR=w4Kq)Gw&U=59Bk(5b+E_@6&|eq?b52yI}t8%lSu5TV-&+c|4vV|AVdK4qR+q+ zf=!xF$xr4z<&g%q^x}P|($>)QS%|kC^R%`Rj#HHX`PSOi^uP6=qYjT9c#GTajvsa} zHem{c)PR3rU6WP1N@AYwauZoVi>o zfj{tHs$vj5Z~AX#=}wDRpCEza5XiUeTE%k~oY5z90oG#ol1fJ#()Yt{dhjo$3;K8*ElD4i^e z1~3?jhQ|T!7cU4f`V;RIH0X;JvszxH!>To~+HO+$MH*H5*E~iT|7y*+4M0~GJGKNP zkfk149D0rv+Xe)L9*JF8R(H1IEQ<&X_>tUw53Ad|uM9m>l5BkblJ{k{#@(Y?Df$Vz zV%!20$^O^Hv5zmd*YK;tMlU4aoAl8;3DUyyeDD#`w;%bs%^>(hINjz!<==zwaQ{tc zm||(y=mYN*D;w1;ab|gI*&w)s%4E1u>+1#275@3|oIQl8g*qU15RB5_Eu;1=}8s@lcJUK2cz9J zJXTg+4AA+0j|{-O4Yc1pNu5>|EY^Z3n>S}g z1bj@s14iR_$<{2TouJac*ci}T4{!YF0GI@JXZPCjIN8m=`omIL;hh%~MRD|GlVBI> zAB>I2MyBZgn1As6OrMuzKgsD#r*(YFSK;j9@EesCdia2sCt~F_4PyqG;ef92l|(Qs zn-e|q1bM4=e7oa@KC4)6mJPokb+^&BrKQ8jBOha|p|Xb;Mqa->`EtGQ!fE;&ZwUG* zd(MC4=3%yI2N1~j42Ok8?yD&{pn>JX^L15ONV|JiP`6Qh0_w)ay^??xEg;p1Y;K$! za>X><7$7QxDX8N8H67d`>Mcur%17TdI5A~-@^>OCSSJg^99#Dq{cEtx)iC&LsLB;m z4*kzj+V2=dA9F2@x0ouXSzy;Tl@NaT;q9Xym#p0kb8dwM`*~eFJ$Zsgk302(*_7tE z>jZye!nKzez!%II))9A7{(Gq1p!+kbpaUt475o{UAg@hrQtoV_ARLz&8qH1yy4v=2 zxXbg|anPmW0I?eFn#`?r8QfRszvTCtH!XeSE&K&CeVLuXt}eAq%S2u)!cF4jtYI0}Q0qfJ^q96sQCsWc1b>Ko z1Bi|-tegQT+GKivVd^#|b^6h=_LCSL@JXCSiO6a)Z5KM1{S0_FYnO9e7%uxWbB+(R z1Uwg+Fgh`ESIk@T1)$q&L=s-wou$fG>p|Dm&cK4SkZ?x}>vZb2bvCG&X!sjz^~Be5 zc7cQ@Uty}tDLCMY;l5w*YK<4Drf*{BG)X%(2|EO2#dth^bknvyCZI zHjOKoTEdH(MUQ?Xno&g7scFuf6^vqx%o?=5oCyG;yEEE*j7p#?Aqn$=8IWg!Zxt_E zJ;zzz?vcJVU;d_*A|i1_E4HiCD^o4#=B`J^ZbMqWx9&g4<3kxSI`>EKomW#jz`>;e zX%InAwu-|t0&yXp;enT$Dv$lp>Z5_IC0cqy9Xf|Jz;mvTsJ%9s<6@Oy^~2 zk>>1?V4%F5uq^?C@Z^?MIBpXAGyR@Vh7wv#TU%8kK_NLnQjy)W-Yyu_W zpgmj(4Y1rJ^B5T;$-U_crR%@juEKcvj6KeX3nx-ij}Q6|b)saJQ>&Lnq%l&$G&e}4 zq<0ymq;tFP?Q~77UnpLc?`W;wu%rMkku)wyw~^_{T{1B;c_3^_giKSoLY2xp4%&+s zRKw&3!YSW_>Rqc5vgrOhn(^muS7m2U%GLaMcnmCjOUK>XT|G%DL#O>b&2)F?y^vP| za&BtmKdwvQ<|dEq1nu0{=%Js$ZIcN&WV0>F?iKe`-H%rnOL3QNjm^F2RTC@ z-jsn8ErD$4FX!#FMbe-}w-AhWsJ(R9b{9pyr&&fr1%nWBg?&b3tIENv zE!1R{`pPaKQ*r@{O^dML z|E&bC39>pY%l$9Mpv<>VD@*Hs<+_LM{z5P zT5N_m$8b4~U-~`~E3P}^iwf>)Uze!pqyv^}w|wTGHb>`%Fb<#eoMc0W1nSO~`(Oq- z8~NhW=v0%DIFY>v3%mN5-qEGcqo;VnJVh}@rloJ+2*DLyK%=YmyxpaVDv%Qqn}3NBXmIvULK5xh|E0kuEq#heqvO0msK1tAj4pHcFEO zeseKP-0d5J*M!kUy6QO^=CHx8fw!FTvs<^a1>cru68t3v>>a}Tu9E{sLhD$nz+E+r zhDWkYRmmM?-5IN4aO0hufTkz$R=UuOM(XpSY)1{YW*^(?x};W7F2KBz5)%S4H%Vh3 z?poNd;_FL7*wsAg!VGu+XF^ahGiAO<`%sUjEJV7G3&D>aL=c7!WGwt|LAXr*HqQJ5*vls`n$O`3bp~fF!n^GU^zP^y4b=DPF4)gaf=B3m(6Pye@mi>9$j3%L z*tD?aYJ5RU253nlz>Y@!&e>LKDpsJ>jP?SHgj@OruR!W-GhlFWU_`p+@FvYT*2Q$+ zWaw9=bw!-F1+#gHWRdzh(4yL2tu^1EC@g`x+Cdia=v3KaB)tQPm{lYxsrB`Yx}3V_ zEKCe>2>X-_tk>#T!opX)x2$ir0nzC5neg2NN~|zPHAyvR@7RT)GBZ2W?NTLwR2LcLVxZ6UHJ|&o%?2gH25&y-3J4wFy?UQE63CuC;a(o z*voqGw2_qg+N&HA^+8OSmDDqZG62vb=|}|Y$8cD3x;&(k3Oy15je=o!{2~takbrY! z^ud86ht zfW&>u3edz8NCrj4R2o0YjY}kj<=38=7n{%K=dXG|IeMON5oa!mBbDT&nsm2eqHyy7 zxr}2=c4$b+;hsq3Vnx(~$jjM=)}s1Pt{NYIk|S!~Hbl#Tbq5xgmWwNq{hy~+R%ueY zIPO}p^U~mWJO0b^x~AvqlfJ5r=*h1dnj7K5F#$_ko{ipaJ>Mp_mCG-j*7&aSBNGp` zQ7!%1xpSl~L9=T2W8&WGxv$SYVt)q;|I+C2sZaY8_(wE#Rp_U}Uo==}@yff$`)dD= z!qok9Mh$KL+kQUf`L11Zx&uAc`8^6&I^Knt4*V)wv?k`Jddtro>o`6Mtc*cv;-ODEB6UP-I>i=>t$+E#b37ye9Cq-wuG2IIsl@P)~* zlG9VT7CmVFqfZavP4yLFqvmvTCi`P zxCYwBZxeWqL`<{tR$hWH=tPs7%{`(AiQL^Oux*2V|2ELIbeW_&1Cx=)i2+rmKCJl0 z6$w}Yxk^^zdA_a>@tkq%29E!+gy6b~<97h2^&^zs zW&Wq&_4Nt4fr)pI5=^)DXJVV&UWz4k;K zi(H*9K0&;(Dbdv>ccSyroNlY(r=MW{_GU8pCEmN6|7w}bLu)~<#QH=h(8OBR+S=n3 zsYW4y^}FK&)_7de`tZ@wlS;9V;<3ZYg6!6oLH-lcdcYg^WIZRTr}+4ULxkT1p1qeC z_3WJn|3?YmBO2-~$?oJdOYg=v_-7)t+&o9JkR~W0RTHQM64@8u7N5kLY*HW01u2nX z#Tw6#2)IQKVV3N(_BUJ6C1)LAKf+Adk~@$iNn(6O_=gXZ!d!wJ@9TpwrJ93>FrUzIJ zsHID`EB3;&!Hk=#yG5D8>pPO-tXBYKOJxf`GxbB;3P#M`s3`qAvmn%pFA$n+Bu|N! z=(Mvz_KL$+0f$0A6gpH3g1KlAmlu+IYv&+9@}y3jall$*lFfAQi}7WO_-x4Lxx=$YL<$*%KH6EXW7d`W;fpZD=hPmJ|c$ z@j9!)#xKPVeDq@Fdz#rDcObs`<|7C-CXp%CEkc{V-X9Fcg@h!9YPG(1e#VIa)!1g& zN4@=Cp)v;E$h`^VbhI$>DCOvmuF@@^!9m{>N?hvXzIuSApjA^r_ZbFp3OL;VRU(T7DM7Sk0_ z0~GZp2#h@Ca@XM{Cpq3mT3dp0zT4~q_M9NA=z*m;qA1*#;eu97zMO@ACV2+S+Qr>u zq~uo_9=QpBDb3a{iUnuL@$Z2pA3oG&UeHR$un_MZKS_b!U_tJg_!FUMxLrj?^mhs@ z5*CncFSwi@WJO$%uv030DbB^IU#V&-chatN_rC3wZIob%lz~VC%siSe#9oKIwgJc| zWR%as=s#ME7rk~8cI-v+6>F4FNPVx-&IEuziafTaV7=}HA4v}V@jo?QuB_d17HGg7!T$06pzY?uVP;zF zW=!<3TJaz|#YouME&`e7ZQb{yI(H%~c=GF8fg?mem&vsd+;)jAYgqp`^M-rpEDtc; zr~@9u*F?`?<#B8k-awWlqAL~g4j*~TIEWpq2=QMJA?*kznHXK^p{7W3j47X6LIjEm zINRo8ro%-`$aK(CjE-Q<7349cPX!c;-($p{6Aqmf0n+nM#6{$t)^WZ2HY>WGgVK{2 z4Oiu;@p2>>0_D7Vm^7?7!@>Ui*9>Y*nhk~N9mz`d#kz@HZ!Oq$9 z!HuN+CfQ@$7kV&2Jm4T?xxDvlSel4EWCS$GKsH_y z&P@S1#bqdpc_s|u_6@Ns)q`sH;dUPI*g21-R z4}urzk8RSK7}M)pXDH0*Hd6idK$w|$=Fe7M8&M4y+`-8E9a<7Mc{^_$vZe9XnYU)b z*oq!FW`!Y#W#7tJm>k3ZYT?@Iz}$j;8y>1W)y8e+>fg=&e%>iN_URKG{llYq_hz~= z3whWRNwK!-*iagpGU;R;r>-VZ!!@pFEs+kGc1u_dvjCxcEHRj`)AM7&?8Dz|VVq}_ z_p8Q6EPsNJzdgICx1ROQsDdd1Li*gJ`5zkqa zLSq%NQDzU?Y-YZFl*oXbwsYu6`@0{`(sPfrK_c$jL18V&2DPI@z62T~PUH8)BArXF ztd0ZTHnAAU+-=~^S{rSMa2J|RY;@6#${Nqgw`eSxda{*&1;_A)N&3I$IdxzF8Dv#+ z%S8e>r2$}@wRn9X6S8KqnQquW1*te2KJZb_>#lvIaTdkK7&S)LU`E{E?doV)=}Ta4 zMR^o151zD4(9iewJt!blf0vo5I~f@Ab8*`dZ_@H(RPXOtpp|M{sFI6-y zYyaWX`Eg%fg5#~k=JGIA(f1vn{snl$E~w?gI+fhZZRq}?oGl-;9;oHLt$*GZk@6DE zK_}0%NcTOUCObTFJ!s?%p|@iHM_cHf7hoLa zWkX_{4Ic%D1G#^s!O|id(t*%+A3q{w^K?7 z_vQ?aS=ebXiDnNu$@|0$$fvz#Io(MPUMSr!d*@P84bEo#lkdAodvu}{pC_MRwn+AW z{M$@jF@*$4kl{xsh`|!N?rkb`ZM{ufE3%b)P$rWk|r% zufDnN3rc_{-r_xf#`*p8&|hR=x`w@)Y-kx@iiXRMLj<}k%uurZg|_+W%-;aHhO7j8 z{uP&pgP}V)u8_#YxTqTK({3_NHBGoKX!TAzaFbuWk;iE*ychrf3PCLYf4lCX`c z{*0tZlBI}n@FAIcoB3n%F>0>v$E0^`qROLDh3H%_NH#zC@RwB^8AZ5$)@aie8KU`i z2IGSudl*IU<-OMy23LEa2OON!eduj_93}^L;cQa`MsOZMzTF9w9$e8?bj#@_>V3^l zj)t02eilwFe7Wk7?NqK5>*k9i(@7OfL=)sG4EO%Xkya!N{j?W>`qr>S$BMWt2)-XQ zXMaWk&re@*mpZhl+kYbSFvI5=GEO|tgZ+-06l7QNMYQCkRD1VQRT(z35)3(+F%`V^ zr<{Q*_D+q-m}m;Q5XK7kR9A!z7*+KTY|bNn#pWyrjuUAT*n+#aFImtOVsWuzT7mzL zm6-})gVr$GiRhKteqafW@hejXnKN*lp>+0}o7;PXnQA;v%I#poV$ev~;aE4A(ct^5 zYB2h|$D`YpGR7v2e^NSMU`o_pVd@Q-9Buu=-j*wByHL`ad5HyY*yto%-MeS z^;=F&9oma>B>wmruvtO(VmyWeuz5Ro&zT?vmS)V-&vP$r)yE1IeNTh0W0qC}Flr}0TYWW52ZP?oVg^=3eP~fwv|G(D7f8h{{Mcde4G}V{~ApY^z9f+fkuEd@V6|1)K~=UX$-QA zaUqpY^uskotIheB zVA1ggAvp-8tuizpkO9z7OTuRCifekxrHWN$8r)N#!hW?BNv`_AMbcum?M=SMeSeg+ zDcSOiYjZXDCvW_&GFRYan2C!o@XUipVe#u+ObaL$xt(2IvXzkW1$~1tMIqIoAUx{~bA zD-*c|S&Xam(31atR!?uRkGQb?Fh?=gzT4h0BG(g}(TTD8s^>^_Bm`nKbnyD)SA-^b zpe6LF$zw(@6LrtPaEA5Qbk)W$InM{hFpwus2F+szf-Y$+hFGy&yvKT>=lW`Qe^09C z`ZJxqsXRQxH$9s##y6WoW+5oNH5`}p!KbD9Z|etObptJh(sd5 z>h{-c^{auGvc<40p;4%$3Jh1-jQW!>Z@JXZyg*Sz(aBMuj9Z&<-Xsn2$LvA~2iWcM z@wFyGvGNXo6=%XDpib5V$PYQ7HbE=~oQ=`U)<+TXf>-Jy9R<=~IQOe$T?zZgd!FTd zxxX>fNc=%!fpfn|&1duHaKLj|`wOcT22W#@>I)dPK-CMBo^@zp^|JRCH@H7|@aqFy zm)-mt#BulXEn}&uZAS54k zAB>?^UUK3P4Cl`0xNeWw4mzc&qlO%SZEAj#fdLSdufKQ_zdko41q|j@&p|Gqco7DB zCe4Zm4kz#82}^N;zalEDth*NC{4Ct1n@OlITg`&1VjWcnK`G>At_uw*6<;nmVuqDnI`R5_c+VAyMY_NtbIBRx^)DQ&;bq(lW)xaEE~}fK7+*1&id1 zyMNFiyiFV)2pA(@OoAxDs94*K{8ojGPHgwqr!-0X86y-+hV_)w8xhpdq$%E>lmkZB#H|8P13-x$PCOjIQJs((o+9D zK340i!vF5B>GiiR?w2cU(h*=#4UTL+fA6Que4|!Yw}x_}c2HZjssTczUN&71+0M=9 zPtaBw#vsVu$zOmX$BgbPPYgd^1)_Xb)}$A4qu=pkQ+OM@E;8qq%OamdG1q-}BZXIP ziQ1PO-Etl?+UknG!OPW#%6}&b|2#^9er+%~wksy5_7o*{1FS9ZwBr>fLF$`ANX|L( z?**qDK+_>$GQV2pqd4smW5;n=T&fI9jYS{|VXsu430=%}t$X>hjgb<<%KdEH-x8m{Wh*uHI9Ag*S| zWH4uX%g9!ag?awsoP)5OmeY@A7tL#T_1vuFqV*q3{JH zHZ#)Fm(J8U5S1DmQv{@%#VcPzQu^bm4}`Se zopw2~d>+-vUQo2ZQD1LTWK%<}TqL7R%1YRe7fBb{)Ps6i_8F=U+a*q3oc(!`?TG5n zV!P(pD})xQQ#BFdF%u_cb)1z_O{i{#RFD1?v2~^nOX`d(RS)8j*H4-F4Y}#-NXJt# z-C_p)+K1H^>yLsPMmF-N@L6#K-PY}$XJEp{N!Ar_18S=O{~d)HHD8Z77;@`?UO6EcHvN>Zt1NjtybVV@WW@JOFu^GIaHcjb>QCK|kFW%_kH{SdFwT?%$*c1~c1YxFi8#O< z-&RU9A13u-BC`v@+1d|GgKpH13YPln{AiC4$k5jQM44M;)LZ1uHbw}2QJb9=3f@nX zUwsx3Gp;~?F5wO}_qBd98J(>I`0{^I&A4-}o3rlBNoA<-y+;> zYXas+4+&>qo6c)H$*=W?C{(8ZnyfckqRz(WjppeqNHH*(A0LwSkhG_0Px@1(#{tz_ zXIW2!^<7VrV(jgqiB|Sg36~h!YrJuZkcc%SX?^C^JQq6sVuo9Ig%#h67nB_I#V>{6 zPoNnPFtdwmx0AFIY-7|ncZn|r^wJ>#qLK25UMfZ7WQZ363{bma61k{ z+!QYte~h8pdYP9fzNDbeVpHv*jVSTIkk2K3E~ok3aYOO%XnrP09g^{XpI~NGXC5J4 z$-VHiGM}Tu9YP_LGj4pBH!0Kh#kJ?9lIizFUVkyJ#4t*S9eVT~yV#Nn=;e>KmMN ziz|HFZ>pCZVhRRp*bBfTz^GatoHS#^@>l(y>!y+RHV z-i+SfZQJ+G?{30u(#vsT1`wo@4M8{w$IHvJb|dLMVjOzig5$%;OO$8u5In$0JV=e9#s$vd2Z7e~`b zkUwYvX|c?J2qf~<>p~zX(7>>LiN1pqyiyyHZm|+ zz8C?VtfQ8q@+q44^C@9NrqSyYageR{gmx*1T6ALZ&ztL26r(H*fcW{j?$*ohLjY-E zKc0{OM&Zu|rG|N)AH(B^DxUpdQa(|xDSsU!DGZ3gM4rKC)397h-Zk(RL>+&Ipxd8P zBBO4h1xlXYJ-`*l9tDHwOGTHta?F|cvWt6Tf91AdNHDk_oPst(-Q9CsI6qK)^BWoh zF~)}{D%k_`-gKeWkA~=Pc#JLT=}A1eT!H;lP4bRC?L zyv&87MjA04Z}=Zz*7U&5-)3RwCsNZTo!Lj@s=l!Z;>F3sD;rLjl{mqy&ra(uNEbLX zUjOHs{$NLUq!;?o5ax;cpY)gKW94ThR>wZQ7ef4oPl2QIa?@h=qTXrBcQV!g2x`PL zY~%Z^qz|M-NDf-!P$w%6Zth4|>`v73uy+<;!n)`c{>=h1u&@{u0-RT%dr=!g-yzcM6%ne4Od??p#k1qh27CPMl7KgNe2pH4 zLU|Rwbr~ri!6uR1C_pyo+_%C2?c%J1^`<~wCIL%0b0ELO;f_*7FvnJlKol^1r1Z4X z)&*1eq{^E#3S`3N<6y_fHIU+GO~>}$+jMec{FU_NST+H~B5m?jT(F(W!UjTn z9G@5qz~3n|3e76qD1+C^!><;_0yKp;Usm9y!lS=oS8ET7LBET6s482-k7jg9y^Uu0 z@_rQ7Xb0k-@S}?xqp#b5z+HBG%rGc>4~7T&9Y0<;hg+yivq~xG+A;Ix)1==!9U2RB z{%|DQ4-I6~Ah)dGCxN)(4@#S|bNBCIQ zP9h&e)n@Ct%T0q&AmOfJDcMpT-NZ4@GRFd2mG|wG0%^G$@EYmg%{2~x- zvFOcW^}p2jw8G(aQem}wMg#;Hi8dvsadBo$)_5w`78!6fb-WJWo0~DVkx$h|HbrG} z{KN=4d3o(xJxC-PfUd8}gKS>0p83W+RPUmrVzDS|&8-BCLU z`#0$OHZ6r2pK#a_Y^P33c#?5EWb2?o2&CoSeD{v}AE$d_tVHC1un@(^8wmO?SGRje z-@sjnx30nA?&>jvtb=l3JpYANSd@1alFvDfD-;pj_JGr%S7uylCcOI!3LXD$3t@MN zpVez%+1*n*36jfo^-_okLa76OLoT3TXfIL0j@PW2r-3&vaB-W$s6~?Qul`oHD=<0`-)cA zisqr8j@;^b{wF5Tu_`g}x`|e4Sv!|_MbShGMN$!AW z?qLjxhw2WeDO$QmQp{P)tF|e@%#KHfg6KCOw+hMY+2>zM2rXU|o z=i0q<@M87Un;7iM7-doFljtRTb@OdBFB1Am3ya2jwpnmgQ+2+*9d3LW+HT4MZFuki zWC&bI?G~8v{>N8<4gb>GMoIhMR@$fUmMQ4V_jNuDzHjbO)R}SgwC^DSRmUu^bLD-O z(ZwyXa(mJR@mQ5kruWM-JL!k6Hv&hIQln`B3GEnXWUyb!Z_VnL-_U4rm_&)B|71nW z3DLI&9JKtiALD`^6KRNdPJ*&S3b|{sO7_-e|dy`;EG^7kH!v=Z4>rKbgrcW#uI zUMRG;@e_O7UUfkQ7r!>HhKUcjctYZaxa&gZ*MqXqWtpJlu75I$L^}eS_ z2~ZN*poV?$P!@p^a)VSFiGPVfs?5#XYKRU|sHFUclvo^lP9|La@~KM{nBVPZL9ztA zRWIbpQFhxD#ezB?kQu|>(9sgWDU0!v{iJO1q2VfXBC#Ojb`hr!ZawltKZm%PPM5re zb`z{FE-2jh{R85SEE3m(oId2dcwE^4v=XFo_{4`0SiJfN-;wf>qLxy8kfMVcfKVqu z{;$4=gpB9hr-5X6I(7KHv*D!)1iw6h5C4eVg25jP9)yTvJ}gM?``^jOpYsqMaAa&C8tSN-Tci0|$Y#^qmNo1hDig7`_jm$m9o0o0cEBH%1ID|Z;*{Q9_w$>Rt@ zusShR&W#1`l|_5j@|%#uJtT=MG?V+`br%`9vDnmH2!dYnI}gop>_CT$Nt2Km>Ru)q%0>u`*TV}{Bow(UG+Md${B|E9Lo^zQI4 zu70km1~)Dzj6K0`8N9umlLNTTlUUWpP(Qn$T_AI ziUeo05(jPxfg7zzA0ObHRZsj8Da-fTr~TqfmI6QAmzYAyCR32K6o^cN%a;$EiWvoBi_v@b6p{0J22s0Us;~(0c;5pvB#*fYw zx|aX66cn$hMO#p;k=M~xb*de)*573QsKFbew_dprAj1T!)78uWn7^f@J)z7I&ehrn zgJrVLutW)8TZb$Dh#BXi;b@5cmMOrk^EFrPgn7gx)%mmCjN|YVIKjhVQIBpIIeYP^ zX>>W|cIrt;@_p3_MkidQYzB0AH)GAh0!Vd)C2Pt`dV6rgg;VUYbQLexs;;74)Nxvs zxLp?%B9LwBe3A;1L91JFPa|!_y=E$E@zNG{UhP~}1!zA%Z>mQ)7v1njNi#;?tc0U; zm&)5b78M*@*av9DUo zqOD-opt0Algci+h1<}PRzlQA0?E_Wajr44-$bx7`7!p{W>V$CaaA6PP=&o+==}_@d ziif8cvwwGJ?6tYKAo`HG&y{s{i_2*TU&%eGZ7K8-m|yPkoOUsce|SxR3)(a1nO94V1MpgwqaWTBmAul(V=PkRvc3bb>4YCxJ3LjxK={_qtu-(I?8Ldu*K z&|L>eSdpXfWX=9U;vxk@S8~`UeeqRi4ivVNz6S}!;Wwm6f5Khx;T@r53kWdwv*%kA z#q-43Z%UKLj=pzHu}ulU%#9e21Pl%ni-|ef`r7*KQrOYTK2daOPyBWvtf&vYY^di` zJaDMwp#9swy0{c}34QsU<>{+;3A%Q9!1ldM9Yb04kncU%y;ZKxCN!7r zlPj(%yPUeO>Jn`{mK>3L1SlnQ?8b6xg&#=T-8uOUWFkQJU9PRBVdn964H@amC%=!tsvv zJT$+0-XRUClj7$A8?>jsRz5U?p*M%t#?t+S3SsIu{!Fyy-QG-~|B4mJ5vCb5bX~eA zCmnbqLn)hGKWm&D>>u$ID8H9XEqkik>3@RPp-K5KWRKn_0Ap4R0MNgF{f37&Kgd6b z+KsHSg$@fn!uC!kZOLM6(ErXF%O@BxfbE zWQ!;`x^(y?_60b%Sg}K!fRP!QA?xnJNX5OZ{n3WXPvCAWIc~Y%!|wQX#I8SM;;8nH z3__9fg%mYjv8yor$AM_n{h9D=K8r+5mdghQ;NLa15b-rI?#s8&tFE=eObk_fX<+lv zuAA?Yg|Kgj5I$|AIFtgjTz3dEo(GZtM@A?5bayScNJ3l`d9kj8s6t_$(-k3ftw{?l2HyfyU1@O{nRDQqPk?X zE^2Yn;)TL?n&JQ4#V*ANXJiH>!&$nc{nano$y_x zjwK5e{Be`R+mE=E3;YB1UA1y-Xl!qjDaSccw;i-~!*=ucxr(f&3(74&spb}9*n+5Y z0Jegq<>iSU2Q%sf>*?uYXP(2(Rz>CI&LRWhn338zSk9@&4@=4l^L%hGhYi4|}@;&p+xB-RM~VtIxZQn`EvazM}y5 z%LGUYD|w~2_T@3^xtE>B=jM*PJaGZ57S3gSSa<-|?OW%f15|+e z#(z3gid2D9PajtNPC^E?tAp}3A!@rzpA`3YSDthNC+)s(3YmY_Prm(V3@CdLFP*sU zmmO^Ut~T-#nWm~%P=c^nP;}qs8x;Wn4gu`lObRb!8D-U<6$3NFpQfXh?vc0P#{-ig~F5%vva0~#C@F$}P#u+YR92L{!WSNAflj0{W zs6kW%RTn*&IeDPu4g2nT`aH8SkUCP2Q$MZix=F@K2blgqLkOSN{_XrWy-e zh}ZqsmS^8F5zO?_lovR8y02r!1XNCfz#Ph~QO3r}6?Jxx^f}2KszYHaP0;C6!T=a4 zw4h$t@=?J>utM}h!@nBi&T{bnzmlQ4GND-ByZV;Jb!wtMCw+(2M`{(B0fJH{9=z98 z&=moKV&A;6v74MEb*UbW{Ffr$g4!y7En*Gj?rhwvdk!iQq3Em<{)nDzz4%?l#oFM1 z6rFiARPP_hXEVka48|DyU@-QPrLm+L24ijPyT%$JOLmg6kELu`q9RnHqU=;-N!GF! zLbi$~h5D9OKfn9WbMHU*oO|wb&hvSm&-?v)YfLb`nygDazFdSw#CFW2pGX!E7*`TC z@Y{&bS0UMEH}(7o!NYT)Myu%^lR=1|ei6UArsp631#S^zg+^aI6XDg@yFafTKMW9j zJHiKPI%;16PLcJka$(YD`%UJspHmX(JuPUinB_@xA|{io=cm|Es+c33Em8$KT>DpX zHG^^{=~E7`4BCkkC>0utr}6nlsKJ9jh?G6M`v&{!|sPG)Mx* zv|ZUtvrL-$m0j#f$0jvwMP>(UOxvtJammhgsxQp=z7!`w1iEnfde?lqCw~rf5G)%C0 z{zPXueJqLMmWn?E-l!8&*RX)gU%j3A&8pUG8H%WtU)Z9p)xW!ohfTm^IUlCnJ9Rx4 zih=~6aS*>g4=)HAcD!%mG(7v7C)n!k&*fIjzQ6!XoC^e8`L;vlsxb<)48$&bu2YaX2})FRjmS(G_qwP`nbuOkp!^|b4o$A zn`8>IVe_mzmQ3uzE4kzqVf-T6WdYC3)KEA}dZe@n#u)HS$z?6enW3vJq65GT2w$U3 zE-y^5;BB!oR~VJJVmWa+?t`FZwq>leX)(jThb_8&+tP*0Y-DfFCpf3Xf;8#|Ye4qA zPqzilTZtm&#i2pRsThowI2K#CjNQ=^$K$oc34B+6e6~f)5XHyvy-Qm6$`~IH`$duX zn!mKJam@XtPYdV?kE|2^=k2hNU2m!JmjaRl3!{GX>kd1whLJV=lZ2&hl|Y)}P1sQmxu%Ov`0?%VF$u+kmDd&4QOl zL5lJ7E`xe$M35xma&Ib26I;cGgLygs++)Su8cUeoGwpaa%9n-x949iGxX_JTAEgc? zV*HFnTBFW}(g%obHme65cq z)D7(tvLUKJP!$}&T%)rp$J?i_RPU9ptgK6LUrIIGprn_-G8D>zKx?!wWeOheq0|RH z%hnUW4#jUaOd_w<*68mF?p7_mSK;B0MN%xkEj*jgkdW96WD(2+%y{s}ngVuW#ytkw zJ*44MR^ii2=G?sF%bQCodIH|3^f2mZ9l)=#1EOS4Dh49YM{xMd%TnCq%Umq@wY&=L zO!|8^0T!iVFgl9NsGdVcsGq=Ota(VQ--JE7{X^i$lA6BC+MAY?BCL6@Y&!^J+F+Qj z0EcEcX)8n1AzJ zcI2+hlB z>vOO4`g0H*cckqy01r5RlfF+h5W$o&gw~A)1tq9Xcbqsf;anQ^%faN)qP-+->ZDe44d-K zyPshj*!*N@GG8!AqW^d;6F42dn^sN!>s2P7t}dz(lb@J6So>gzrv*+*uTd+bisRj< z*Tz@MnGSKjDV$PMt^RhSz8*=7h)=6R|HY_Mj{@P>d~lbYm`P@_FiGpS-t(8~JTKC~ zeb}$b4~qaLF)s-TX$qg#p6|#AeZw-kQhz)A=RMG|x^vo)xvf!#ZtkmW`TG+O zJD!o`L}9)?D(iiuXj@Ni9V;H?aEbWD@XMVm;x+G+h{ovNndlVVUIKzBAXcnsS$~`t zqvpDRJfCd94KDTt`ZhpsAocDQ=##`o3Ek1t7& zKtHb?dI3_;%gM&sW(~L&E0VA;6?i)67ncpo+a0(59p-PbV-@H3+$J9fr}ZzH2<#p7 zHQstRzk568^moqXOKp3$hkH}JDcPP2<-~*FH$o=vY#AL%fA4)YGc;PDoIrznvy>Ql zc__;2)~eDpOx6eF(y6!Bz4-V~x#;oF#N7vw?8o!`JD7MWI6>AhJnp17tM8N9@m}wX zlJYHpjzp6)j8f!!`>%`5vb#AN&;AH^%R8sQu#YUQ7xi`D>z|bE{X#m|*>2 ztV@^8L{4$?h=}M;!eB7oAB}?^swc{s?7)X%(V1)+D@A z0v1*n6({^33ZItbfuU~Y2UFyO=M~oxZXLPUT&OHT4w80FE=NJ+4lZb)D^{=Cse5>p zGq8`^X237=rJ`Z~Zk7RzCgC6wzcPP0C#tD8NU0-k+4M4I`AD2oB&!QL8Z1mN1q7HL zJs1U;YE*0j|3%AU)`M=jSTjr|OetwDr278K?s*0i#jrW;y<0FD$;lk@T)=_01;(&i zO??|XAgq<~ADBfVy2Ur+!%?XA;>)T!o3G}<%Ue~z=f=WuUyyNesLmTNhs7*ZUl_0g zhmZ0|WWsJBTaEssl_*nI!G&3Z`uy=Iq=H2AX(<>)6dj_$mH);bly?(w(xkOkA&yPL?deb-Rk&0IW(=wFJ-!Au^CG)AB z4?Z2Vx=nf#_cL_ZAk-@UWLbJzVH%IEAOzdgJ9bpb*B3oCb_n1$ef!L1d-z@J5j?#O zJPF}89Y(%pi~!w7!h4*zebUc&SwGS-2gqx4P2+}iOBX3(+3U6ugY6H}1baXn zX5HlaK6FQQXEx4bX&0MfJgG|vl$Q$}M|v5W+aUS!1dd&bCdlz{%Wld8uUZVxYpR2_ zpuEGL6Ptu_K<@*c&!~@$7Zb(6Y(ZH|OV@qg8uhJ@ zdmv#T_6?-ZO&DLXs)v%K3qGvHuU7-?!OUw-+h49~lEh=BVa}_9kT0-|ZRa@Z%~Y(7 z*Ax9q$p?U408Dk-#1x=%CXDNNdVA#?Eg}76?$S3va=hu2ZxJKz z(D1eyU2pB5SK$g<;{IoSz`%PcD8pkQF}>9wz_Fs+4i3C5H4?)=`;BqnU%@Z)fVlwH zCj|pfY?YFbGuE4EkYYb}x;6%J0QlU*Y3m^>$pG#`5#=NFm!?lYn)xg*Y%PFPmGgB> z@I1uqo+$V{;I1Uy$)%)Ok*r$k&mm>TkD6v3d?wS zGM-?Qq;UvHI&KbhRVDhxoqSCu`7LRyk-qu>1pQwMpaHz?KV86NTp7PHR2R!LZ6bX} zE%2wqyKU|gUf^5M@pR^c-F%BMnUr9}$!$fE3&pv$dlpor_x|5JM*)XZ@s{rk1jSPb zXMK!W55PD5DggiSDhpw;#0N`%o=EEf;dI2`d@7Q(p~G_zuC=SSyM>GrOU%#@#}-s}7^FJ-{FSW|#1hkOI}xNrPEp(ZUHrG-HgX^(Xn0Zj~%)-IRo|S5D<}izmiZ z550vF1l{QPE4R08`aJsx&C?1K=?3L^Vt>gnNU7i0Bt^VV@aH|3As<}zN-sxarJjNmQXWqSPeGCl zOii_s|-rx z<5u6f$FbpTS8B5+IDeVCY@a3x8q;@|!5mssN4@ofdgU4sDoUT^Y9{o(IijrV@%I=V@?DTCuPRkG#}l zhS<-^w3tssPTlP*@&yC8T`-u%p!l&)U6E^XFKnoTxYlI&#ig znxnm$xc3VHd)`^+j8E(4iIp3jF%^wDak-=mC@9rAw@`Oqn%DsFNNBifjzg z!-kbcsC7!>=Qo0?RfYB5f`ER&sxr`;lo%@I#cC)1fkBYpba~(k!xh4Al}F==mbU(x=6dnh9}t$&a1Ni zn?A2DI&dRU^uH-f7Dhj>g)a|e9|JYg3k_U*9BdI!%{`&dKzQ?N0AIGf{bJOzl>RS6 zBx^Wkx$ML>o!;y;8iLigjv5WIdMSt)-jIfP1erKbd*zJ52>6AOuKK3wBl_T$3BW7q zwgBvmNb_F)e{Hgt~ z8$1;=nsdU6!>|8v1J~7~NO%MnrlZAEUB&2K?1NFV`1UA0BBY!z?|+q!**EY1I-+aiS~fy_N8)h*Pld4NWY1Ym`@%gFMuxD5NpPg8trPH?SE za1L7j<#xC*ggNwtUu|YWwwOUeHSARKsiXT8$HJr`xFVB zw8pAP>|LHoHWxYzfaA*@t06Qx*jwj!upK-?c3+nOd%0YKBRTLj0A5$Iv&H`={FZRh zoc}0D^Uf4!kn~BfN7`gg&JgrE3j6%yFl zYH)C43ZV=3QI)=4cflpWO%h8>u=}(qyTZGn=Tt~mGcZp)o}epmx#6y|5^{Y$qP9LW=UcT zXHNAU=m#2z?ZYp9R_=giKW#nU_YZoiU-wm0)FOup^Xs!7!Qwv#eQeKcI^~~UOC0W2<@xc9bee)cJs|MnJpPb5WDzKT$7UK#QB~S& z0sZz!zsYaEBtT7keWVES-#W+7=*~7x=~{ikT)JR}NVW%0Adl@gPXAn(ub>#-^TG%2O8I%F2+*?hKU6 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⋘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

_j(05I6bM_$S?w0C;SDE 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%0ANYODCnutjJA;C3956)RfRY4|oXv9$Mpt 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

`{JhOK3*3ikmbz&XE#`^w|P%Fy-xP{B7mI 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%0A~ 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 z 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

egIjGUhrjYvokVFGNnJ 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

)emY9|r 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%0Ag~pB2vWxu#O_5tmojVjjn+%~QyQi4i02 z1_qs4ESlp+v&<)@+WZHJOVfHHFY~iB871(uysE%I1l}T#d~l z7*myV*4D?IVV7P^qgy;rqZRR^LiG>`rU;uy!=+!Yf>JzwQ*5PS(VG3?_i7n&w-s*p zBSaU9^%y7;3Bap%Rv&ee-Tygcf285$>#X_~I``Iu zBHp5(k{1(lld2>NZ=4|(->IKxOTajhO z=;~q%;mk(A+&9bx{>2MG;&L*XM}J;#^L}af-dC7_)FO{A6s{ljQ~jQ|O+`L0F+cQr z2&FM{x&BYE7-;+~fc#KBi=S*_IG7h4&I^%fjKrl!?y(pExNzzYV8SC()X5BOMEI)L z@$YYD%WPuV*#r9fTbP;OMY$tx{^~<_jnj;V&+;tA7$Lg<_ zxp})39~eS*5ovLZ$-XJtTqu9Cn5?ahI(tXm;FYJ1#?Ia27H7sdv*=<>BwUuNZi3qy z1EfU+&EJ=G429HQ|Iq+bM}Y=_6tKGo;6*XhH{Y*!y;O=ME-v1M?IB))AiE{r?LqGf zPbudbWuQUt#nlQQ_E}*B>T=P~{Y{QIw;tsX4O6iC!em=EIbsH8Im$mUKik79@5QV5 z3{FAgE3e5?Pk=Ao`t->WkhTya^z%{JIy%=1+Vjm3c-h6fHC24>oNWBc-@+|!CUn<} z6(MYQ&O$})3($&;Q0vMo@v)B?6rkffntSBSjQ=ro?$J#De;nVHv0)g7m5sTzxi+^< zZ8i*}ncG~dxfP*?DV1uoVKZv(msGAr2qm{}u0^^aA>Al_yR3_@y8Y_szt1`E&)@I! zI`7x>`FNax9R}|8E~IOQ!yFhg6DMu!#rM)nkGt*%Jb)ApjN)5ECBDrJKEkI=^sHwM zmal>a{c)hnIqLx+5mIB;H>KArazoQ)(u>`h?C0pY8X2 zO-4HH{dfo@B&h9CMKg_yPuQ=Jj!WgXXI9X?_YBK{PY*?@ed8a|a$qbna<;jTg*I*^ zXjM&DL57^5@-4_6p;FfqKTEzDnylMEtj*@doHY)eBY!EL8)!LuLu4cx+i0q>h-G0z zu=xn&%^k~VGqG#vL*(qc;klDjde4A>fhdoN9m_zP>Z2XnTEN(7OD90Sni7SOt&k;P zP7kWT{_HhmfIa!7k=2}BA56hyuG10*s=qnM&?P4m4AT*B8h<7pu&k8h@qFpmtYj`c z81mHgv=2V!)m?YlFx{JhsO{Ot5?~G-sl*7^hGP@Y8i)t3^fTnI%FJ{KI?t~}4-GWm zwMB;LSiMqual_K#VU8h)jnQ!4ugiLc_ON{ISe||?=+V%D6ksU&PR+r%Phm!hMUvN1 zKkczS$|Q7@K0aT-@*dGqc2e=qBz%&?`5-P#okhU>VTjD$adM948eEOBohAnGbbLkyf|tpDWg#TD$Gi*-m8ykNWWs=z;s5Ibm(5N*o=isc*2{x7XUnT?q$-Eq+fD9udQW$J# z4Z`V>QCi+v?=zBb3Me+0sp(<-%>uBsSt;+9@m3T>=Yrs6+sy&W$b!4|Tf*Zpx1G{2 zIe*Gx?R4fvZS3Cx?fvW2NllnF=+}v0*ZjF(gC~MmJK;OyU|DQAIwk4dnCrLloDdkK zyf*ncr|sdJg=OqHeAod}eqdG6H1T{k4DNN(;|g?Zss{lxV&dtn-SK1byFQ@yEMR=w z>%7X~J4y`of+r!hCc5y=@vW6fvNvy|$3_DJd?H`7m6mk1zE@jrt7@aHvMq723za1T z_Aw5G+aZBIaMbKZ{ucxpu}$^Xe;2nNby1nWU*bJ_@j}k~Q@Ica3p{9uXHAj(iN@>KSD+?%hP#O- zXfGi1$N}z^0}?5Tfw9cNMRaWDjVp+jP&U>gMQHMSWnE9(z2KFGbszo*Sue^tfrLO> z?fL?&2|< z`TNHvNryAPQj*@GT>DcoyZ>Ls9BQs+F#np|=ar%iNXRDBTsx{0^O<3S)l(B+1h@%5) zW9NEJ`lA)ZFx#@%Z|LZ6k#BBc1!vGWZXnI4L!>}E)GvIZUEH?8* zhHl0cVv?^St4%z-ylDJ4o?|;v12>k*uuVxYa9Ik2 z*D{I2cgXuSyV%kH1H_(LH;&`Qt7iE1JP7!TMbM-n52R%EeYE_qLczcL8#kw#>IIq` zXC_B`W2@p$|HWN@?I(N*APGm64E(_H$E^&pu>*@}jpI!HEjy0Q0(9;c6@`FHGtYb? zZDksQhQ2i53-H8v&Ytj$FAm$ixd49{&iziIE}=Du4Najh`gO;U6XZTe`}FO0Ek}=6Rq^S9k)l&`YF{% zfTggJi0=o0P)_{l*BQV>i|@}lC`VhH;mQKLS|oI0T*fS@zzm#S9q?pH#VvQ3%RcDC z5h^2XCc+N?+`03oO;<5#<=~b5*j}r$UCDH+;W32bpzCSd2%`H>x5*Aq5y!2KrF!71 zif4m3TnS`wpaS#=@2k_e7T$vu9{kUd3gSdXH3xi#MWyg+ftr^S{yfsiTr3Fe$_#j` zlf?s4+m#R)ds-N7M$SLMU0ui{&Y!e~4!q#MSO0y(aX0PI%LptxBj%}PZp7tB zfR;Z4pW_~P9&J#0@nv9J()tEA%uv=m!n;)y#asMYh?Vw?k|CgZUfz;5V9UX666Q%G zSqA?DhoXA_5^8Kvv{hm1vWaix$(*#pHUK@QB*PHHZ^hhOfdi4Gl-QdWcvhW@Qen+k z(T{!D{RO^ex`iWeFR!ZE=PNS7Oye!ii=vv&_?8sj5@yj3P9yi@>rzUAQSqt=&sP)n zh5`cG1a&hP>8rc&GZSuiZ=UptG?SKo{$vPQ7nOl##D}SN)wv#aN=X1TdMQxT0|4oJ zAi;9zVqN)$Y&%Ou+1H$t@_ha>bum0>*!ZqzyXC>Ic&emB|Jl}h;M9ln#$57G>iq7c z#s?mW`o4R^J=)eSU1|z-XCuOn@Xnc?7wxHBj0sMPpeJ)qn&p=#4#L1Mz*=DHmwbd6 zcy=atQI6rM@`PPJpc#WhpOl#1UxI>p=wPl&{W2QdZOD7Dm9Ov804}?fzC%qV&QnR} zfE^=MPZ_iC7HsS{+;Vqp^rc3dqiLanmOJ%vUOgt1s)Vp)K{3FgN$qMaglG32XBHV* zJ}cUE=Lht+b(V96VbbXFU}^E>lXfWMY=i8$zu7>9O>R(7gi3%nO(Q{WJFuU1!0(&i z3ykHXNUVs-0J6@R`gfg#dBnw!ryZDXWWj=|bRpI~m8Gv=(@)Jj&0+;?b63Leu4I1m zAFHvFoh_yuB-MzwJ`mE+W%nLF7A<53oV9E#iaalI#)P$czn?dYJMbV_0XbaA&ImZS zXAI9s18;(b+Z+;&kf5!7y=~#+t%^&J<*N4igc6Iue$Q_ucKXW)4x=y_;IdplDqqfM z1(c)N1)0fux&Ov+su)9tsR%RRx+(U_Orgrpq{5Wy!%+S1M^@2WA0MpgHFw6O zg%{c1F&K>7X<>oRQGDj{2HAGg#x&35GhLvHf`x<^MK5BcL*Bl}TWkxIo=vgbe0EtV zs~lY|4TI6bcZ$g2?~9rE_;kk0>f1wkv7oaM3y*$H6juO4XgM(zK>Ko4`)IfuyY$|= zBn^a9QsIz1qt{Z^39HysB8jEi+yv{TKCK=jpPYQbHEh9+bBe$s;0LJ%{h=*vm#pcW z)lwX(@P)d@@QwnAp*h$cvmO+}utC*z7K(p2Wq0_rlR#7bpjV249=cV_2ITU4n_ICt zyzwE5KiLQKX~R)|oCFLN8x$TFI!9Yn5~@z9utdTVDR-e~kNJcWaW$d1KvucF9sP@TI5c|tdCcy3xt zQhzZe_me)tC-O@}?guRk?o|>VQd9l!_6PMAACE&?)2)uE;Tuj*`CnJM1J7o`?WQf= zY0qm5hUVKRoYDPLaR&qLbg#sljM`GuQTURc~Ilbirhm3TUn0}#;pK2dO`J)4D zDyC=5PDv*@&aAGBX3EvS$gdX#m}5ND;28g_4u#&J)Igc zhdy5?tcn>jN5kxGhL^STc9_`E1CoUG*7`Xci)w?oa zoCJeSWIhBwi^wtzwiz6Hco(5DDfY15bZ{!DFWp)vE`&t?Di~x?A25efjR}Uw9BZ(=BIkwhDrRXx6NH$}7R9}puW58!&nb1~ z6QXz_=;Dd6O(fsrQL#~~j#*A2yStUD3?qjp_AgL;$ygpvKcie`@JCZkYh|#W;G9&W zV1E%wlkr9}qhR23p>_))Jda%AtX-fWlh-FNWkYVK+li!Q8>ZNM0tvz)l%L&;vR0qp zqXdR}3i@Lde?}ZE@6K%V*4>9qi&*O!dfRbd`{WIn%0E)FKbHz}6-Cmdey5@u~v0fq``J4&vx4 zy1wc_px+u?wVU6q<3j8p^+&*nyLu7KwIEhNkKXoJDew_(#swyPy0yc#QEZ^z4peBF zfIeN7o|*$)Z1^@9fQU1tT&G*C4zZBeh}jZ{i6Qz9n+6rst}rj3ep>0a?^#XX=2KEW zsA1zWO^p!ojllt}S`Wjymy4f7=0P8?JHsCvfe$3+Dn<47`{Z+#u3PY*G7E zCeGlb!Ao?2?1n|t%tC%IWoxbN^Er@}Ms9LR0L8Zm z=Nbbn8jycz&;d+tLz4GtD(x9*xQI})ECs&7vvrYLysF=)N@z$MOOZGFGkV@TN(DC% zg-M7$RWf_LK0praTV4av$55>MLYD(BybOuD7j;Yb*ok!1J#lS7uJz*+!eo49WzyTq zouRfaR%k{AlxnCrLDBTid0fw^`8HU|$rb2nk=um;CFz4pAYOLmQF#Ev^q@r7?r163 z_?+{$vVS&B+fDGil;|fBkfV>Ntu*1P$Ie<6pH3TI>>Fk2dw=fW8>q?^?3UMAO*);R zq!M$e^1gVZlR<=cFvCf)?J<&7oxn_XV@AW??{)f-0u4gPS86!ac4;9zVMYC&|{`eU#l(tZpikN*8vM%N+>$I%W=W{e;%Uh;cY0zZ*w2SJK5$t(=J&Ynt;BlFP6eUYF2OS@MH1_Cx zVE!?~ZzyInv1XqnWPM#{f#41{pIylL%y^X%kReTa6$v4rrYm*wTA53PU3abD^jG4L)- zYU-F_FX4*w8-c|<8s$|*FOqJ)hcL{|f2{f6bYzu$XUVpT#y(PcP_=K3ds>3^od%aC z+t#%cU-ORjT{<91`G38LD}b3=%hssjmH@${L$vTTZLReNK;RpA`B!DPmg~Wc0FQz| zQU~2)TNn?l3WLFCbZr-?%$*>}^ADHR*jRw}z=nj8AT4>P@$g`rZ@z%o}2@AL_m&k(vTKhY+KW+(!pbbr-KvN*WdsV<(+M~N(fR(g(5cA>FqD~6CJ@n*a zyp#1yzH$w}pYaB)NX-BS99nlrYkFtv;nGf|w<8Jxo6`NArsQWhW*FxAM0r<_E z)t5fr8N*R+4R}IDlSQED21UV8D}OV)HUGuL$L5{nXFFBWwCk_|Q+X;+l(hyW!d2+C z@rGlDaRjeC$+WoZBt`Dz9TP=jY#{3m#Um#>p7+J+k+RgUFGo6)K!<8joe+FW3|6hW z=;{#HI-r32r8#sD$Vs)JO$K7GRUPa5l_q*!dobQ|G|9uXTh*+qzwM0qSy}U(>40`0 z3RPsXM$Tv*OyBiD75HK}Dwhb9zLnj{Nm*`eq#%PeZ5q%5G9`on|IzuwmwuDshC6Ow zdjsHI;rUhu4_(}ciNFV&yiP2Q;WmV>9J1C{HVOTa!VrznE;i!@Q`@$dL6+VjDl>nd zhdDcMQ(X564c>j=8|*`R_&SIl554)S>IsGRJm6#{yMBWjcLMCH;tH&a4VNA50l8~@eeP|LTP zQWj`xR^xCxMeymssdnW-UVpoDoP&x@|wra;mCT}shN8m(DAJr95YU&gnNSNUfw?f?T{sf1Ozsj` zo&DmxoD^0b+7boonl_g1LBivFeNQD>d}Jo|t6BJ=sj0UHvXEPjFXpNYg_rT|v>pxC zCEfsT)Dr7h>?pNdQo<3zuiVu`#6*^cBRYXe^zOV z&6#OP_v2=O$GTI!cTD53wXf5{R|ysh7T@2-%WeXYV+~kx0TMU5CJcK54o+fZMrHYT zf{}p;4p5@CUYh9w)=Kg5wOm2XIN5tmV|T3A9ytd8W|Uu&xuMnrDGQDQHkUPO%?zCL zWph|?c|GwjS7p~CB;8(tbmKilxe)xf?~NRj8u^vDhih+y0#4Et+M90~%1Iu)FS+G>m*N%u2DRny__Xhk0M*mBP z+6+sH5S(qo$HN(&JA8a01&S%*2$8k5g_&griZ_Kr zkd0R3D6y?OW?RJc_Fy*ptbq|A=F2vuvvC25PDGk-ee&k+DU7wCvS!r2rJl0q3Mf6a zc699neytyzzKi2pvi{ojElnO4DmRlkbuD{6F|fHc6*%4iVZ(N5eh1aR=VWEO4KTFy zZg=SMEAZeM|C|2{fe3%SneRAglU`>PoUjF?%nVZK*=Osic?P^~Mr{Fbh2RMaTG!Y% z;$s|AZd-N^`b``hwXs;t&MqlV4_~9CP;LK0E`*--_)CpIXXma03DnYSQ|KgjF;G`% z7r`*qD6;%hBG;Ci^~jH?8$mOK9cVl}&46a*!{Dh7E8Z_@dfhr zd0a0g(G6pise^$|pvwxblB4~bvidN-WvGR5=$KmrKc^5Kpqya_p}f(JEUWP~Oa%DY zW`}h(%Sx{Kml7C`Sh{)xrbbQ&EAUQ?=Rn-$5NADaaj!O52aD4nu$LnoET?LUi8m$G zO`p6PcGJOos*6C0&=2p#N}V9{H$Y1sm@FCOA`3k%r|Y`ZY-r_5>s=%zei)?Ln zXF0%VeuZEIN_f0gYnc>JomTVe_I2ACw|OSfsWl*(1Gt>97Wlxtzu}G^8y{yend>J6 zzBwX%M)i2vDj6(BDr=9e4WHLg2Tu&``G#9?>?{mqaD*d2P*6YtxVWDEtV3#VrRfHn z?0(X2|A}sKsS}u=^*>@9tvo{l$47doPy*A%MP!6C0|@eZ2y%9pk_3v7#KM)Al;*J6!`;`$Hv>YPH$mXi z1-l`$PiiCzSQ>!kKz7)aPDC8cj{QERRAOu+({i;RWPtbWh7Dhf17F|5#$LbL-1i_c z%0`9o-DB|Fae|bEzx>~}_c;{ftriGGT9@8$qKJWo9H&_167`+6FK<82tP`G$(iUad zHcnUOW>7A^SSXCNC7E#Lav1hR0*(ha!RCjW52r!sY8(&ctjv}(j%wuBF4sCUNr*_s z&MAml0+F{o%6%@B5$61l5}WEa6XuCqH+b$HRtmB5CKnDNo89;Os#kj~ZKem;2@6RL zFOCn6=n02;my#MtRZQSTNGtaZ=&<5R&NnhmK@cX$_WTS33c)Ow&abg8Qi^kJeNpkP zTUjs>Af5|e@VQ2K3_8tf+81-Y=_r63#A(lC#H+qx{ttlb)QvuPpQAIN34}ZPpYJ_a zc)5H}RZ=7PpJvTo=Co)i@~;Q#UB@e@DhYi&V4hD6U2)GTiD6Kz1&g={mK+S~qqA#A z1VTAjb?#i3=%ouq{Y_VVQiEA6!#X}b>7c;f{h<8(%hwlS4c6bv=72(3_A%V0ys?&t z>UM8Vi8f<99!lD2ktk8+{2aym<*TYmQE%*lg}33CPR||ff&@!X-jhNxB! zU~+y~?$q`_*Fdk(x9$#JxOx%K*1@w;&NaUW3ap|w7B0>i4FnHJ5;CGxfBz?R zD0M;&;cl~XR?38E;2tm}TstByM~s+M9?a^{)?{~m?H)vfgg5^E{)qdtL-_Z9#+%Z| zMWbL*Z^mAWMB#5Icmb-d0a0c}g7E@*7w#cQ06U5a@=wOt@hdI34HQ^NZVfmcT$J961L4 z1MV@^c0R#_+m zMooi0!ZAXyp*W=H0}Wsz+zL^;u!Og&^zQyhE&XP(dV%GLG95b1xp?Z!oJ(7@E-_Rsj%qs)#zKBp>5Y zWq16(5Bjt9P|c0pYaoN8grrR<$3d-1NNOJZ=B{}Yxfd~a=WCS;i@+9&1_id1GFfKC zueQ8qEDMFHhQ5A@rA?8Nk16O3xSB@4mfj`2V#j?u1yts5YoAvVHo3MyDX~nnthF|9 zrh!(wSmT6U89A7Iiht?Ont>*G6Fu~)3 zn^^>;dYuPUsp&c)aY%vQj%@$hVHzkCwJJO}B)2ciiaTOqg$~(`k_Q-Ld5*KS?tdOMKty-+bp6(98N-3o^(hb%xTLKg#? z#|GcW7c)P{!dhDwn*&lij_2}kfrxa6P@IaUN8L57x*TxXYkxhA^L{3QkB%Bx&W-r@ zJ*SBTN#{Yhi2H?RcDC;SGQsrR8)-QrAPF~@^l6t7!0JzL>78Q=JI`CT2?8u3@#+aR zmUnLbPQQ(Q`&-Z2CQ|de!Sdb*8L`yPuH0;yM@zu(sNAGQQhVQgRRZm>*ZJ56D<0b! z@3|&`@?()H*2_NFKwN0*;99;RavYEvMn~@kk7Y+OQkK`wQ1KyJRB>#43MJm+pFn3U zVC6w||G&bF4a^Qc>62!KCG|jNecQV6aS}gABv*-T*vAr}1QKvxX{d*i{8?ar#u!%W zEbiO}^b}~HflX1@4B`i}fQI%%4cbque0qm7N>P^m-fkef)k#wJ!>yFEv$6Ser4|Tq zubRi^mO<2MC%uXT#zELi%AX=cYCT)d)%dW+0QbkT0=2Sa;0xlwR|9yp2fL3a^DXS6 zi+|OTjuI08;%)>(d}*t#o|nc8(k%E_t~b2f^ZLh2HM43gm(`_|JG}cxa^74~T?wj1_go)b(s^>u~h(MCDf^g{fD3 zCh*(gif2d3iZ{j`cce#}-a`+QXOmS=7pa5J<1VdI>HzEaou1cadoQU1w1kEcSo`Wr zr<+de>)Hlsz-97Dc1^TA?rP zT~KWCW-AQN_&t|6eK6B z-suc{08`$vFbPSpxR0V5F+nN2xP=7aTWx@Kbf^VdM=pp`?1R)50b=de-eIF+F<43q zR}s^aZ5n8)SMApVb1WUaB?WSy{9YWAT^jl`#=Lll?{Osr@@l8Hs>g-F7azep1A#;K zG~kKPLnqC;4!GIAe}F|R|A2i?N|D;|v7VB)@|2dJV*Qw$F-W6ev%ziwXt$HUqg1)B zaOCq54V9|xh(Fx%WLAtB+&SHb|g7IULVwl00nU>i@?jVu@p~#>jn;& zOX=JY?h7VnfqyoFDfQTAsu1&Skk1Gzk5eBRG`(i8528n!nwaacSoA)`_&AdZr0W+I z!x;?V*hWZdB$v+EXsS$SaLenx1+d+@DS0GuD0#uo$)wz{ldiu^31^3UV>_ImO~c?#gnF)#;xy z8qTwnY%a7(CCpo%=eX@`A?S-#*1Dscd?3E5*&W^2D$ z5<*nRE!K?GS3#;z6O?%X#~+3Glm>b?kHIUhhGa=@lx7y}*Rkib{ujI9KvpXxU>Oyy zj4<6hl9ZcJtkK#R5kZOKSdsnqCx9ld$fb>K9P1 z>CKO1dz3O%ba&Z9t7@tswpv{lKH)`V+r@SOPDrKb@~?=&ekW8-2;`Avw^7uhM!QhP zhCs6L8>jHK$n#T5f@ab!dtqQh4?a$C`pSQget<13)P(+sR6C!1M+1h`Oq|g~mXKkQa zDW&@>R$z6})Fc~cXyy-M{A7(i3K0MPpki%Hp3g*t%57DESRh|y<#tb<6B#-PZRIrU zq01`K45$uIXBBg)YRF_c*}cLR4T<9Ib=~`%&0Yxd%LM6)Dh`JUV;t#VjM?_+hO1?= z6?yZ^W?#PG{Ms&8>s}o{c!>V!u)(qnKqFM%NKB-y^iq`GZD{q$2pYg4E>+n=)XgrP zi1kR&9B{Z`3OV4r9Ao+?{+`9u3ouf}>sn$;J4t#<&e(Zqe@^UW69!N9Lc6hY2-<3s zoPE!a16IViYWP!NHEvbW@ev-J-!{B~+sd7bcFPK4so)D$ali|}Qp-nA*M0#6Bej$^ zU-}%`f3{oxjhh^4FDB{ra=DtWwXD%nQ6+9K1_mql%{WB{VQ=RED&~{SD{P%NUEZ%H zVtkA1uWHsiA=+$B_3bzx1s0K!)*i7$+7aZAPl9XL(VSB?OwoBk^l04um~PsXdfUcK z0b$}yr{vp7ylz|NlT{w;M*KU`6hCk*lYC-f_+jsrtnNd=o36k`_b=TiR9npQ$g8aB9@qR}mEz$0;Si?F*6LmboA6&=vdlDfnzQu@93#>+aA_=z!9`ekLQ3Rf9hw9R^Q;)k*TD9e0lHG&GsS(#% zFe9ZiX>QsW)z42&8)Xjb>0WI7`44*wAX=VW2W^G+uMNgs>rDQ3(cwZswynO4>cqdY z4~wdcBZaj#jEcDM*P3*5IH9BSrNCBG?dbdYp+lsMpxVS32H~$?F*#xMIzd8HYg43s z=|aNT%s(WnoIW^bA)vE8s z7-}DAqje)vbYC2Q^XQ~_drR{n3~r9jI-s&|&`h1z#)$pYMKTy@Atn@V)oE_S|zF^PabX!-fzRhWzB5&mVHCKGP zwgoQI!?MC8L*-+F)^2A2s1?lYFR;0e1hG<2b zaySL+W}g>3Cwk+jH4E1LHeqNw6K%+Q7dl}NUB{6Wt#S(Tk+S=+F;zNh1%qn8Jk{j= zHt{IjYEoV+%n2iQ-zqEo7C@azzFbwDu zqeOd4>Z6-UCo-hMz)352su~BO-^*G@i3e#^S)nKtcW|K}SoNJ=D_nl zUA#pF_ukAC^)?8+$GI4E44~<;vmiRVQ%$?@#mt3dviBEUDJwHrmPB^i-thH3-_C+g zwI*g6rG@6h%w{#`lp&?g(EaD@N$b93l8Pd}|Df%JY@m@PCoNp)b$#UE8OIn9C0 z352yRHHcv%E@Z$k(*A@CcWf~jDUD=Haq)mo>-(qNz3nM~p*0o~2?Nu)G)v!X~ojZCDCjm5{4{@ZW?vW32U)2TTFav_D1w5>W8 zBmLoaF5ko+i2OaYs3eE2a91o=hG>je=kS}Uo%3p?-P2V{*OJSL?(jWljWdXeuB^Xj zC=YRp4vWAD%b=M;G-6*7{=d(u-gX+cOnk zFY9w*{@MS~hftZmjMEmB{aN_F(e_2?efQrS$y~uZKh9m}*_J;mL4~(`wtoxn7zEaY zXDgBd6KR3wD*mfu>IwcJWGe>Pl(lrA1vsr9#QBvA&78Uz6G5e+MLCsT-IC6Cmmcdu zejfPHI&LeDnK@O%a5-{pdImm~a4aRl65adeWXn*EWg=odO*7UtHOd$I}&sN2lasWsA}D=I+hoh zWlQ?dAKYFj!>3~Rj2_IzIRd(6fi}zuh6FA?zK;;bG# zq^NOYlku3Z>ME+DY1N_>J2g}rlBF{G#FAPrUjP9xI*)^#ToW_weXONg`x*`(HctS) zcYH+|c|B25Q}6PsD3Br=LOC4T?SL-k_^KT?xEojZn^>keFu^3E?CZQ8;SOrPfaquq8eV76cU%^4&(1R&fe){eC0i<7SEr_qr zaxhy~*fDSj)V}i8GU4y~_7<+rLPy$@=Vlgry+GYUQxn^B*(s2oKySE-H^~1(Fo=+p zc=BbJT}LxFuBRLOejo^(5fK}ihXna>7sq8^jU6q5(VXI7U?TlFdTX1y1ji&Y}8NjTxcK#O^Ho>o@ij9Sf zKoiE;j2@I*Oua8(5N{S7ECfZ;%=mk>$)2L#=<9y(IJb2vqsAeWJjDd-T)Lj%H$F0d zw~!?0j%~g0X2_Yd?~w$sRFlqwo_*5@nt}Lb=G25FsorV`Gtl*Ptmwex8w1tnZBbJl z8k4}*hf0T6Y6kk-2`{S_Zy}}hYo3@JR>J*3XyLDC!2U(xvHa5D^G87f&;_)oDw;ta zBpDEFCNrk^Go+zGai23gwn0@(KNj>Kdl7>!%GObSHiX4Gn`>KZ%f}>X`)taTm_`@& z{TqpIwfwSuG_t#Ba!Yw1W|0xK-J_gjHA>w+J38BDKE- zLJ>V(z$yt9@V{~X`M4Yv3klaNQfkjr5ZeK_x?Rj ziw3<)95PkQ`>953E2{f#70DgB7a9XV!3s_*v2yvs3ZmVtMc_`#15;nAdi@&K*H)aVck!T94)M`3(mdb`jBXtO!9#kns}-hLzHlHx|P3MWypk-M3Lc z>V`+$_(>R7OMNX(ii;jE`3azl7ekKU`Kh}|+J1*)l8AH%^~L_#?VSGV?p+%8b{{Cd zRVa9DofRhuBi>KekVU%3sB}qE1qhr(P)sH+bJ=3?0x}gZ5G2Ye$6^KC+xJA&09S~) zEpObzwn*?(9Q}gJE7|_OluS9V_A*~#@uRW;_Jm%h&4^7HRHNPmiO<2{6Q~LcWG%^~ z8&t_@+;KoSb?oNFS`u~?McR&4UIJ(kYBr4SF%IFfjWo`8O!q{2-E%B#Dma%*DwJDh z^KhDpTYb}vKWjL@BxGHYUgpb-U)_`42iM8@e9kA^O1_a%PV~FF(bK+D9WlXZI8DSD z+4h+*_;77NZ`ck*kem4~6q zv^F-=M5F6cc$7n!>8B*^p>4kJAtW8LEzm@ndrn-aq6|K;len$B$s=yb)a&!b;YI*O zvXbj*?|9-s7V`W+*9j6f>dp`8-rd^Z+>ax6V!3&2@0MBdtjATrwfmVVVM@(}i}A~q zlJ5H?%JMQypGc(3SI|;(und!Ma`<-Sm#*``+0Z1IJ-gCd$)B1p3b=a36R;6xj%agi z68HFX+haHv6HX@BJ}Pc-y?9t-zGld-2EgKZSRW3C>JL2hPE*f=m!GhU~FU2O^0|vs4iEBK>vPeob*l9nWLzkLF$+>@8OZ5?_WLsmUx>0di|KYtF$w+=Mee|A8DJ}WiU z7K!9Ns-GhkNCm>#4xBcGBnjP;1w958E~c$@5IXbs>mCsj zYdz6m&y&E*l(QimebgFwiK0!0syfNdDef>W_P<()(_$deO8i{q}}waMcoFtYu=s^V(TgJ|C}_`@UifwHxAzo*vwTd(gt z?5E?*CjidnQA}%c3MX;E5v}KH2WegWI;+_X5JvbC?!q~U7ruurtR7*9l@_|KMQVpP zRLs|T9xTjE$gSC)6}tHdtH|Gw<#>cWa!5WnozC^o;DT>5Tr$B+$zzv*3N-KqkD(v5 z!7=+oYviTR@(>jDp*XiTCaV9FC`R~D2 zw&yopCt2udf^^&3r^^I-dv2@4Lei_;dZhpkXnI#0__2o~&#b^NFwtmv+#QI;ihMYv;uz+<)?pxV8o zM2HVyziJWN^h=@Ou`Et{+TR1P_~%h~r@P^P*d$u#6*fOVc-%QqnVz~zUBQDz%{SqHvdbRwUE`?j6;_a`*`y$mA%%0Y5 z-&VTR1~<1dZ5==<{nq!CIfW?2`?zijMZpG!QZXOtdgtORltS#xJ~3Do4i{k=J}&nm zSG)qdGH%spsqSWlBAua_zR3phkzE!(dSJDkUs+gNI^zMR0%<#9IlBai&%fWcl*$;u zI47e&Ih^wA)Z#0wlp2aisSL0K^hKjh#=&ADlfmSt&~glUUTrc%LFJ_P5dFK*PM%ub zCfaTMsha6EGxO~n+e>5!b1o;@HvJ)){;5l0oa^0oZCvKZ2tzb22b`=#{?KjBx_m=h61 zITaK%jVy{h22}cV0(A?2{|1p8of5Gt5A`2b^t7}{koJ%t`K9fkvfG-bW`=no+GWLi zpvUxb0;$3$>iN|j-(Hq90QdPR!i0{+Ws(7Z%aQ52t`C_6n3+Vt%d`!$F+Ak%;SKmf)^bMPfY`0aEHU^ zY*XNCxaQepm=Pc39jW7&_L*9jO?6PniEU3@S76xj9f0KPx`B0xgQqLJg}kf!1J=F- zxEj|%n%;0uyB@9xh?;(UT5tB?|Ni~E^W3$475kK^F5h(b-Oa0+1ipPFV&}`h_x{M> zvm4;2jlrgx<{s}#D7$pvTkBK~c$4Ed_yZ3_cZGqam?dJ=C3JFBwrI-C4Z^8gX~3{4 zmg)biBC;pCKo7ZsA<|Z?^vq_4=2~eqtL6ekAPx1Up`4t&EALI@Pp|%{fkn+Fo9>>t zIW|(%l7??)evVewLt{w*pE~$=jstni{I^%;Mpt4qnAu|f)>Q*PB8aIMot5Qu;_S3{ zVDC9GJ}{{`L!oP>*sVA&RbeW?o{HOB*~wD+D}tR|SCq;PVa8k`cFHH97N}AZ4QrrZ zhljSW(>E1DKh9l_@vjGA#jaM7py`6cNdsmJ*pQFywyOB0J$)xIPr8o=3AwDnfhcX< z>*63v=`cCJ?Ca}v+|vhZjCO>o^9(QzA$Kp#a6(q6+`+G(zRQl$J!@f=5N7i)rLcQX z_@@xu{k7GiTK3Qs^1|JU?9xs6B>w5Jpjg;F7CjLc`U-<~KI-b{Azg7*(fvf+c1)p* zth9b3rhPW(5S3s=1`y*%HUQHCTJsPWGBjo?FFC5)Nka!Stpnv&d$Ib90=1sV;g^R^ zI9RSO*-YR)vcd8)KpYGm)<0M5WymM4I=3#%Rmf!6&mv}*bGQaDq}GG)w$iBym~ghR z{B!6k*flZ_oo?pZf-bX;y6>Fs@+~wp1AOv+=~gc;X}u?)@@8gB#sYq3MJqeNJKPNh z|Cga}^x4qmB3dVJgcd3sMjysU6}1?UnZ0#_8By^E*WV$Xk2dhm}=J!-Ap zySvaTQ448#g7m0Pd2#`CJ<3C;SkB|D3xD7!76GJ2p}t2tSml$oftNWW$*3cd19La7 z4^@c%>RM?6UzsJ9ZHO2dHKlCTv{~QKeJ#>dr%xJZ@+3)!4zzi*61!l2)k%7ji<>ir zJ8iJTKCzDR9Q7s*N|ro-ev||<9+$OapJ2=?zsg*4A|>gMVaIjT*tHX9q9XQ=o2^(- zY6l6AV}%2E!hS#7z)VbQBjrf6%zzMqY3c!FcMgRy^6;hhxj zkBMaq_kmn<@&V<9Q-&~&+=8U0zZ`9t%t?{-D}IAGe4FEFdWKZy!UmV^LY zpv}wuZ2?+Q@mn!MilL8g;Cb8k&8Eff1ci+zXjX(9Sq|G#fCQ~}+ujtiDmM4v6|hF# ztXF9u(Y(RsKoIg7SC5-~Tx}@35r$|Nk=;Hz;mRP*7A+kpXxvq1a zbN+gt*X#LwJY>(#cY7KhIOo`0Al6_t%B z2qmpNnXrVxS-Bc@B5uaOp5>FJ~3NQMm0vo)@OV1dm#p{s+oH#F6CR zrw_?R_lBK8>2#n{-R_p3irhsB)e?sS6%9PDkvYjV0uk!q*yU&TeY^~u?p*N-R=dd3 zF=FXexS>^p>;Ye&IrsnO_WH1vxrC5o2GyKX;YnKhJj11Hc}KoO_BHpYt*(?C8|am+ z7a}DqK}1rCD}=w~3yw9bKz$nl*mGr&{@CdGGvnf$mD$qrnGDxADCoL$B4D(Tw7Cyb z-v{o3DY{d=UfX)RBBhbi9k&mbj|`YU72T^)faa5NT3XFhIU-pfy)8Bwb59>VvW|H2 ztOqTx;O*39Rv~}lKkSCOTRzu-mvuIRpmh|8)VyL;o2aX$k1W%%g2MFm!e__*QZq~1 z#l?_Mu?jx?;1*xn#DiQn=HERRlYG;s64P;7TQG2=Md+*(%PNt}-ukPbrLI{e4JL^9 z#qAAf_C67Ebh?s2u9aG5uk-2C#oe<^60X_rrNk~}T3sZwQA8W}I(S3qnd2)19lq}= z5AG408!oJx#mD7-Xqva18j8;D_hUuB3wI=i-PXkKV=}+!389lmGH0e}yn4 z;94+B1H9c-bs_+!DixO5mj{&^lq+5IPhbmLlHm^gbCJpddE6!NS-;2B1uis1oxnd3 z9dIZ)DD3v-J7RA{M?_N=MY;W|aMyRDtUncolhM^dyH$IN_GCKCNSIC)sdlhvnjJKs z;FZ)`HKi0A5sQC&-@cGGofJyN$O03+eJ^)X#$J$6qy@GmBq{7a*NCi~vlb*hiQ(81 z`YUjkX^B;64SFNnq9ig3dUr(D-Dc~WBgzpNwl}t`Jf<-1Y9o*m#$!{He{}E83 zKlX?y%)`YWv;~>(AU}eDjym1^`!@EThQ!ROAExPJg94m@&*y9FsN@s`pu>5wpXHi! zR*~laTQ7)f`QK->9KX#^@wpjEgsp{apR~L_-27R+c0%vK+Jct5=(T8Qm#;~Cc?U}@ zrpqMA*$!gBZE@*?s=h;(M#HbV@6+U$!#))eRpGdHhYI#tJ#OyG)8Hg8let$N4=@QR zO_11Ftot=P!eBJZLdV)34T7_;F0}jG?zs&bIJw^PVd@^Tdg45n$cu1_D{9HP5SSAt7TfyDvg*g&pPXN}|M!Qrwn0v93VGoDa0igEPE7xn#DDmY;jRY@Infbb2S0nhe3uCAqEg zU!=z^GG1Ls9RT=axLMieVvUNVdk-7lFQ444e<^|+iKXmKB0tJ)bOwgFkSS64mx(4y z0D)STWX%#*(s1d}TS=b`E&nbM-tgA%N8Wg^s8r#k?fLWWLuvGiK(1WHk#Et}$35&@ zEHW;zkZnuW_E(L)#w@&HjifUG^Q&C>w2F7AUy>{Q#LGE8W>4eeue(JOgB8|Rh+$gT z)o#s!iMo9ITJw^N8JTA1#MoM(zSkijuuUP$2eUNi>xyswbg^!vKSt}ga)h*f4Tl>F z_6{>~(u%k{5z)qM32TBJIt<|;g#)xp0POlT54Gu9whYr$HFg!4HZ;+j(yvA=Wz&=> zrrkwHEWVJ5FQ3;=v=nFj`}7g-D}4BmLBO*5N-gbHU~*wBp0qc$YorqX1q`kLyE1?b zUb%TvU}Ev!c8FGCC+_y}Q%aTIk9V8Pky@SKK&a2p(#4yX=m&7&vq=R-SC4=CC5`3| z6F*VT8>*a4nMdBBvrd!fddy9`&<`Fkw6=TYRD;aED?m_DSI|h+Ekvgu*nfizb2bTo z_k!5_Sl*TEskt}8NDMSGfUmUf(+ql%7c>|8qnI*YjiVA}9BU{4wZFr^E&51tFGdH5{W2gPLqS{MYhW<)i^& z4YE>f&;1b*ZXL5|g?w;-2ddHPWaTca(z@Yo4#5Y|iRuEuo18q1zdi#uQvs$tR2LNdpJT@S64x^x2iLyM~kj{D|ntP zbmyYwGeL`WX0rTY%@0O6#kle+8&*=pr-UkdM67i?zaUBT8&Li_RMC%7uB;PW*iuE1_q3JM8p>@fN3s_!tsTn#_C`}Y5!!4_8GNkh##Wv)7m<{s@E;iiy@`_d1A z!L`iN7I#hCW@dkP9`d4ImcVY=(<5^L*o)>&f4c**2g!Z2S(B_$2l{&H@FInx(fv_q z#INVBK9m5((I1ot@Okw0ALq+0!TYr=qKe7Ap{fTbJfr%%hC3I$Go9^V^w#r+WS#SRSE_s`lwRo zden|JD3G5u{*aMuV(b4rFu~Z|8MNM~HN1S-dfJu|v?jPWSL1xUyDJhq-9&mT`97Z-HM zMfFBOoK4rqcT@p+`c7?WYYn}mag2pb4OxBAxU3LzZj?Q}v@19-p~A72jERF%<89RC zL$f*vRn?Wv#8db*91h#gvF4xT=adU(e*3MwuR576uodSE5S|X#N?)}FI#D4O8 z5|AY33*ICouYGL8k*j1XBT_6AK1j=#wkZHr>PSAS*b*qwt2EVFVZ}_YdvjV8MH6LM@CN9#!14Q9vG`&RDhc$O{S?CE7yN!otfiuXM9FNs< zvR2ADAv$bD9$$0sz%3c zGGYP925qG$6h|(NTrJWU-pvUO8p5JIT0{;GJDAO?(4FYhy7p+j$XqbV$L%9e-FTl7 zE^C&N^6|KwlB&|>WAa00m-9?R)yQ9Ov7s6Ww|cdcIpK4R#_^btvNLj}6{zMFEZfN% zs3?REV9-LY?)3#U`L`VTUAkMLTfzqH1&thh6M zx7%v%hxGjL1G}D^8=_WKfc6(i3swxx+O(?*f2 zzYCr)iz@64J3fWk30qgb-SxPmQoQt?5XpeS0~Tp=T1RwOj_h^(J$0wEbJcZIK2>z; zw8;-y4GgP(_}Ee5GyKu6(@Rda=E<~pwzqD5kt8fdjI% zOio)}Hv2hVraa2TmBm?-A%XwY%FOAjNB*A0$TzCVu{-TcI#H?PC^eZWJ`$Y3!B6Gt zYFQkDG%HnS9YRFSQJgl35 z?6(oy1dYy?7&9%GoAskan3@H|R6_$2a&FQ=eEHEhz|5!5^7D zZj(}iA)iV+9NU*1??I54oKBtZJ3RgJ_a3WNpeHQE3JY#i9IzL==SPGf@gQxAF%n7M z3{Fdt+v7Wxr#MaB!GzmXDr#xTh}EXF4iU8|`7tz-k+zS_1`CCPqCN3WzWFhLtP}&3 zYXnN$>^TZUlEk$8Vzd+R;3*r7AbBqVF^x@TnJ5J+5%t*#nTVH%4px~0V*mpfBt~Ua ztmPYsanuspTN@1j(`&RL1y<-iE>D?qiLxln;V3-OvrveEY3u2w0A<8;dfuGX90Z^y z@5W~h`n`y>lt)KT_iJnHKbIMibKAX_29F5IRy4&lb2V<#3IIPaDF>xG=6^q&RlD_I zotjVz_%wD!q3+3XgS5?puSK$9fp+4CLt$g;Kd3nhG4|yVE{rQ}mVn#N?Tfl*?9qG6 zE(}=xiS6{;zPu}{@Z1f%#t~<)q=}YQFQLbQq{6XnN(SdEA-{M@PF)EGBU;1jzrfWX<`!d9RdU|s-lJV^!!jw5<|qUg82{;t$1&WKjaR{pz>6w#7Wc=5 zsUe-^zOo7`O%{_Xr)*C3D_FvM+t>rTNK?Zm!DH4%(px{7Jro;0GtYd1KGey45 z)?p^5GqFJii+sb!L67ZpM;tVc&DGD|*B#uu(>k!QYX3^^v`4C8U(~$!gblUl@amq9 zuf3!gAJA|>5XI7otEBm*=oa&=QS#3#$GW56l^gBcW6O4bTabr-F>8H>vqSioH@hIz zO)fG8mWjLnj*6%Br*faHhyk0%>}XtoZH(3r+6`-vq1Ao#cEP_4Aj`fPW9TNCEMli6o0UBX z_;w>@V;xQX)}ZS$U7$3;L-L4KzM(j_5{u676pQ1oQ$On6y#G!P0b(xK+@@Wd^Wqhk zR0iTAP#AyHrDnn-{1IGpauz6{Yp=6!ccWGIRU6`<8m}TFo}sQ$;`o)|jg=u4tFCA6 zD^J|Tf12F@sZ9t)WZn*w=)m^29gDLsP|N)5%RL21rd5G3V~~53lUL`;O#zzRv&~By zPl}_XL(rg@psDFk_hKSKmswNbFFR~frRKLBZE{Y6=G*%;@j}%a4)w+Ae@_{fI=@%q zJV>vS5v7v~NjPsXXRXI5x$AYHTxzesg^%__ldeKSiuQx<3ey?R8u*%-MVFUc9R(Z40JiLPVn&42tB&jeSqeS3?{-JC%H_u{> z?gDkiCu~wBR$fIFy&csh_Qd|SGG}9LtYmqyyvSB!d{8b=#jW|zeWkjCY!NP+2HSd>!(#Juv!VctZ@jMB5WIX8wT|@-a_C!6a4G^0Vj;QKaVYz9O0R z6&vlh7aUmT#%m99q~hIm;YZq=z`6-*soAU=-Q>Nkq`K@_J%+U}Os~wN`I7$NHI%{a zy5WtW!g}uCWDi%|K3=tn^g?N?Oxw-r57~XqW;1xS)3#}*uUTnY>SinPHF6&pYwcAY z?wQe&AD4edV>AYxfnP6|-&4)sT?3_Z5wT!)-}B@& zMEvGMShRa{Nb@*P|4;sSWhzF+KY{NT6||kxnB4d(SgfJPS@0@%oJ>*=U-UjaMp+L7 z`|r33H&;Y*X_LjB8Hw@sesgT zeNp?CpCFg|8=(S+&0iA+F-3xz*?9>wfPfX?pJMLJphu=;@_fQztQg(5^ zh6+T47Sy;)FDQjTyW$dlx$dFU^u-5afvYtozB}%;kbj;2Ct;{vbT7Y~nv@EQnK@Ez z$fza1TKZFT^o78E?mtY;wP>1lc(X_Rbswp=ry&Gx3!^|&7RtAHmfl3F>w;$s9-Ao) z?oj_4wtfN9ymg(;A+S#sIPQ;TIVkB&+06S^#K{ak&SyEZAS$kE%IzbRoi z)^6=OPm}6cbeWEDs>^)R`dling(-U~aEA&^^87WDxH>h2Q*ow^V+eGz`h@DRsZCy< zYr&ajOG*8)NMFB>FTN$-za=p}7W++cDL!8>UXN)HkK4y2t^f+4-Hn*xzbfPf^k9=F z$l6aq3`Wm?59A{NZ@eGs>(0Ln`Rf-F=4Z28k2#cLx2A3o(+k~7aYz4q@i~ax{Kn+Y zudzq&al1afBf;*Z;6H7>j(S{jA}A&Yzs-p(n%(sVj*zoMe;C)elvML|cVMVA)8@{t zU(NDutK;a8v@AgOyqZJub3Bd&i?DXzYsXj3EA3YO59Huclw|rdDd!tda2S)jNV)h5 zbH_A+mvygP_zVEdfqR@qaZu6t(IIPnIM!36EQO*;}km*=t zG%rxgW(Z|#d3Zr5F2XuZ3FbDBxH9Bl7suw8X$}_)WQ$;pr;(FYtH+$A8RzjP2z-u? zni2Dv)f>x!UN_)QNrU5t9j?lXqYzK0T*uS#xPpim*MYFn0k4-GmuQPKm!EeoW8_S& zh849cIHk@qS_NlWquv(Hz0V+<9Fu`vSLY&`vsjPa3nNJ5ccvtcaQ|dK1EtA9ogh@y zT4A~W)5ED{MPWC zhP%^~*wY32N`P#kzzV00`qf-v#{S>lmF<1D23%_da^@w3r-W48TK%4K56+vn4&Tbt z-6VneP3tnxATE21oi-Pn^Y99cW?#_$dwL94ND*5iD`Cr=$48|PkZ74e*!4%UFK-2Y zW@ueP(;zmDN}chZaK%a{gi`Sr2tx3{lU)0ytoxyoCMG5u?EfyeV~4 z?vl%?$5aBTPrI0+z&9VY{u@Lj-1R`fG)H81ZtF?{@J2}5m}Sl=ZXr+hbti?(SWh0S zCzj|ukc9=6nSV!am{*59vT5IL_n8J_*vMc&0a@nu!JnJZ_*RD0uT!WUIvyLARI4FI$-ggyY;q_~Q;XBOq z+y#1H*fUqQbA@}Jux%jGz1JK>K=u5G_S{EMb1*(do_eD(-B(^8cSfG9ks4}skw1&Ag zQn?ySLH9G?2^?OY5XpR^g((3xPL^RFpkKcHo~4R+TR>04aD$vVBw9a4nArLrJ;kWHRF|pj(uQs$%`A-lbwQ6?x9HTkkG^k_Abwj6n_FaokbP?psnTnkJt}{rn^N1O~y3kSo~!abb6SIx!1j-UBgZK7nt8#i;z z#=30Y3RNiT*3w7uJz9MLO>JO|KkVV`xJzMnBXS%2ltS>nPLz1YgCWmD$QBf&8(8oy z{!+Czz*p+_pT=)RBZOPzKSt!<#RGZvX;O>lfdL6ha0^l#c1g zJnin}brVVVGamJonzwTzy^^?HqC;)x@;UBe!Vl&BBIn8(0KcSxzirmx{I=*E-?X5t~J2BcGpg(YZXT@qq7}73Js%yeFQiw7L#rjm6osv8v{JU z)&z-jtHwcKhWK6Sf zU0RUgk<_QVigvJb2wA&#aRZkfvQF+oMI5DR15=aYAK0Ed zEzWbFK5wzSqi5icQ#4>p_?c99CtyeXbIKoYpdm|JW=1#-2AviIpGQM9@g89gew>q| z)LV|QG7c5tsld7m2b;qi804h8Z9;yE<6Te4g3|V0oLaK`T?C0@ar9PQo=@Z!f#W@I z^U6Ddu%bHnMXoN~=Zz@j5WLcMILf3A1JY(&V>M!M>WBAMzfQ8Y zAdkq3vl$hObJ9a07bK$Tl%*k`G7?l8M0uLN5Ea>aWmfG>*M{WzOh@(F|(o=6lo(?FGRy$uSlU&XHH z6Fbb{72DE<*^j)+Nc~$KVG$Bu7)TgacA&i=nD1UBHzsQ~j`tj6j(oB-E~7RFX6iNe zYM*Yy^H|Fz>B@;1#bdYbQ4$mohvUeIhREo;k3OgP`L~1MAX3pU$P{$8 zo^curpiSO4fXd(6Tcp|o2%K)!xwz*_VR61%E=rgY9Sqw&BoL$T{SzqP&;uXnK^g~U z@6Ok&vM)HQcV-Mhp6pGEuz1uiDjO6)O0}$qsMlYaz+`Sv26#~T-xK>2q~Jk|h(t~Y zEznRkM%#9~XI0gG7Vu_07@1jC-umUB!#4?i$VPKBJo_pUexIb93U?2!vpZmHfu<*! z5{*yFZ+qKbbmAhv>pnm$scPpve10E!8kdo17|RClY)ufXGZl?a!eW*Gn7Dst}b zEWm3g0NQEU&cF6Yt;DdR3;*CxWTeNHkf5{o&zyW12e3-q*QiR7*PfZ@#QD5T@^Bvu z)bgWdj`Uj|3wiKn^gQOjN7a{wuL`NDdPN^1Jt?ns9towjPvZw=5ubitQwPfIA=PMW zcur-B5*-_JUG`aVp%(-ve-Nr!HqFk)s~C5g5^WhvWD4Xah#cXt^X#w$6#QA+xyu@~ zJ&eaUAkNOsS1Y|&cZ#HO1l9Z`vTbAMTFeU7ZFB+>x z&mYG^>$QwBNW^K?p3$p$t0V(B(l;U3xx%azHfi7XwbuQJXXC2PPGrV6wa_%Py@>b8#-i3@Z zs!p8{B zTkIJ;RjPZj`3cS1QCL8huo#0+10Qzk*u+8V$8Q(j$QeJ6FfSAcxa-;IfwI8sf2OpD z%Gs9MnY~T!$j`e5{pO)zLzxy;{1jyCJMK`X?&F3arWhiSUCdWyc<;`oJWr7->Q75_o!IQCpf#J(=X}VxrMf!fsL#o&KPXc!Ov&isfOm{> z%Ev$p;F}U_`uS$YCTIJrxZJxhhc3p^FLMV4`Wr5*v1??@)2+!v_o^dp>*EmiWFcdj}r)jmcp4YDv2`YJUNeX*o5ojWR7UC6}2 zO!fNNpok0viw;F-#>RJDi$e$M3+UskzStz0>6SDgCn*u9-nmDAoX_qn4B91;*-f&2 z{?mn0R~>tCo4KcA9iuahE!5gjoFp3?bD~|F6rpN0pV3kXQ~JM=5t|801h$_=0$zds zCt;InX;<;?0N)J7+K3DBCuCT~D39N-TqQG8U0ai&UfqGg5QWx%gq`u|vWxKm6-ptX z*jThm_AN{S1hF2=j)W%rJ)R-jiC=Z3z&ftpX2VaZ*P@>!a4vao3$V`z?%pY8T#aMk z**>iR><`XKuFe?c)$+bR1?Mm1jF`1Y@R*7-qG_H2Q6+wceyGyiYgy3dF3d~2#f_C{ zd8tmht8Q&FI?in{g|l*$ObjxKi|7$O|3yS-$bgsRBh}NxwW1$DsjG9OREV@rRGiwC0VVp{`(9QHNUuGeE{flOHm=uPjxps#U8< zd-c<192e`g3r`bD2q9l)hL%!AMZrE=&f7ILCL&&G|H?EA-2%5m%({zu*7peFqXIMT zDbZ-H+*?}mL5pa}ALDqpnY;e`DG(6kt*dWGXbmzUi8-pcB1AUel$yu&Zl)iV@w8 zatnS;RI^$9>c!~?r=cqP`=bYKQkr2F>`Z z-p^t%bt|_IX4j`iXsgl?zpVi~)xBp+ndMD@v|3kDS=>h8%SdP^EY$t0kE-)@Z&u|3 zNCsIMYCdfz2osw0NddqAIDzwpw5-0`8%gk8*>&axd9Pz<34%WL$uP60mzQ7QjVFS# zxfSbRx$hbDkfkVgNqm;_6IozQrBL5IWxs>y-#%(cYlj^0S6tZ*_Z?d`pkj~!`NjEk z#DUv{1Cto8>_GZno~Fh8#aKhzUBu(l+eL^X+3mzVRQfQyPg|u^?n6d@NvDS?)=&Eq zc*B&=V{VC0y3PW}fj5AH;$lTdYqL8#uBcV;n-|SxKIBkT!1KjYDdBPM#niG`eXY;^ zQKRt`dm9gR8afhNU^Qd7gGb58OB@u$?GM!0sr1fI3Ri&sjSP+EOq1y9s#(26)xg&0 zdq#l2&&3E&ZxRTl0qfuU*E}0I*Y+?+upsrGO^#z*Z9^wfg;Ao~!Vlv8$TQuo?zZ<= zc)@(39pF*-gtc7rWM(DEbpGCSWW{{HPRv?NN=Ty+>^14m?z^KaoL@aui;*VOeJ3;&cuZZ1iB{f9_gbg zjj)#`(As8l9I>V^i{$(F z)v$GdlxXs0=xh#8{f{Q8NHCpbVog!~jpg8^cWhfe-pI8!zF1!xR0d0hPSE5_9Pvn< zlVu;??{;gT#v8SP**(fB#S{ z_yxYO@aXql^8}bv5}fCL$(?eIQeTrgM0Ve|>VppGF=e+O>Y!qKmdtgn{b&ws+!ffs$r13aY*{Q1ejpHG0h%3IEkJ8^zf)HXyqB7N7UvF^JuZRwC zQ_-fT0ywYa9BPl0+?^u>TpUgy*x9}rj^ewKobDD~Kb17sx@$fu&O2Wn^#u9qukNIP zQ{p?2G;v%tEf(Zd8PlQFUZq!SXS?P&cY1y5&YpNJ-5%cVy;T`6{C+63NAyYM{^AVH zId)@SD3qOsZK+-SUT)rjgo#8U0vL2b7QM>%pxR!orVgE6$3-vlb9B zn51SGeDdspU#u^*hH`Y<-vU*iaYB66!NsV)BJRyjmW&`FRF-*!2`hKSQRE3%3DE z-p{u_Pv0-qvrql)lRK&ad&xY0Kb^S5N}3sw|B#=7ZYuD|W(LI<7uIXiDe1x&O!Mf=6_jKIq{b9D>K2rEbxRl@BcFk&8;zuJM2? z>ix8?C*5e)a{WEU%eqsp5vsC!pq(#@cYGj4Rb)x zwqs|{G|1>)9frCdZR*Uhht$5!VQ+< z#)%lexVQj#&esQbG7lA;b$~jl5x-MR(4$nf{Ma?9@DF&by>0CtF#U<)Oz;Bt98RPS zYu$(`3JxlZS+3<+#>6C+7g@uCXP3DtSB;n2TxNzEYuIr(F=hQn@g)gE~_&nBHA zve=oxW8fE_wsH8zM+DPjh}(Ynu(i|maD;h&WVf`OoIO)7IXE5^huqi-nnF>KQXLrfO`8If`c`@fmT;0@+-(d?PdWD8Kw}To99e68~xS@8RSi67F9GlG*E0#i|{F zHuJv%xR`^HK08$7^j>3J~LAmkfWm8sU~wZvSmfy1}LMX z3qtsuqN1&=rxI0>H1(D#c(xXpv||XF_e~2`m6H_7XOTs+Wl*MMbh0LAmoneWzi4ND zDT}5&?j^@^htwQ3ZAdz|qhfOV?LT<{9+^ozkqUZRx*j?nHJcMX@;jEOE=4EvS`v%3 z9{55qrWbzKWr+DZLzmr(48C3XX!>;=Uf(9t*Jw{l^&Ffn)CMdB)CGpc>HcpW9!&n0 z4BQ=^Q4;IQ$kEl_Vvdbml6^nibRVZX#`;lUa}W90bdTwk*-4pLdBUvyf%P4$U;oKR zF!Fq0Gw$Crg$?FXm9JZ8Z1ScZ&8#$B1*n>B#8hlxdxQSd)iR$phYoC%y0?L3f9|Wu zxU;bwpkD8HSMTRC6?^yDUBif`zI;!PY>9KrmeaAG8KQr*jCWnW*8P&aeoiT=CWr4y%A|MkX#qK25+(_K;5Gz(5_I!r=f?sBgnnM(^a3X25j zZ-XC<6ogvd8S)j(ey3j{V=6>DSvI||n)d+0nX#)M${fE=`km=Ns>k{*f?m2=OKD9_1t76Nt4y!;^Yjs*bKCt;Hx+DPX&!v!C#XFkIvN z;v&&48};Ww^MP)_Ok7i;7J63f$V3g527Y)E^uuy?G1Pw-6kKu5nKV6#9PJovlwGH7 z0q@#kP+_J7+Q~>8`p=Pl5kq#XLK&bKJk>;MeJt9^#MFD4>E(Ye-0+xA6zv2T(=Gv@ zR}F5^F!`MP`2y;A!R1K|rE!v%@)~{>zLK8WHN+$_&94X+(IB;>4`-df8r4BPqSWCX zLuRP++Z#CE#y)__(a8ClN#Mf@ZjJ5`JCOBQ$w?(d@X)FmUdcnJqU9D zjhD)Os@`z8L8Z?Pl(7~gr-Vdjf~L{x`|27tj=m=D9$N$JPO)Fc#w^SV$0I2@-IKP1c0rY zEdXJA_Frgm9VBvetV^)2Jh^6jQ%%6v`^~!?-OgD$eUpi;DK48!KjcPBQ? zX?XB^?xOc@Wy8nI@kcwOPCYK8Y4#iyA@5XP&B@&sn?}3Cls!&LRV&709Duo~1PHJi zig{$eizbn!9*|Q0I$cFiDw{MZ+zs8RZt{DBKb!9vBdS2@iKoA8c7muY zsfAj07(w_*?)$Nd<7AD!|CZeZz#z3icOw(Qw=gZ@g2F_3F*-$8RX0+~1+FFT`WLhy z4bz=_CH1uv`%k<8N!_w5Fc?Sg2#lSkX_q?j=&=FXl<{F%>jDEKgLsdX;qCh6qL-j= zVLnSQT)~0?dU*6Yw*0}q9bAmcHIqY|`#z5SH6cBOu9NON2F=b@TD*45%l}+0U_J#I zg4#ftVFcJ`LV~KJob*W3O8NC7{YUvaicyZ{@iurWOmZgH_j)x^7pVgS*0~M)(vHJM zng6+oRSci}3k4@Xg0 z6x^*Uh!p1DWTS-EcrS{KI=6OCfh<(&RNr{gq6YbPm88uAE)|n!%C|~IkkG!1Ix(Dl$h&Z(?^GnB3v9ks|fe>|0ojoD(Dme z$IY=Y`G!q*qFP<6arCm@v@8mL_V{w(8E0WGdlbwF&B~241cYWm8aqaHbK^(__J$dV zsodS+xopkhm^Zm~0j|N*veP&ezHW;B7fsnd)76a8O~MbA!b)vE3y=2ujLHSWNkId~%VzrV<5dsTb{--KPMMnZH^ z5#6mTn`pI7myX%K;VVO)GTuP5gWx6@>@#3_X;7pV@kN%{oRR-elV&Ah#AV=te;ApH z8x&*I;=l%4^MFvvUe88GtngSwX^j}adO(XV0dBl3&OlB9(hvu>DgkL|HTd@>8`fxD zhz`LFtAfSXzg?=72RfwRtS98TVGr+0KvSc9MXesx(d}^{4GK3RyG>=XzfjI#g4aGK zn6;RW|8ewwVqy$+KQCc4T=EcZ^i}+b{5BM-(?5=!{wIhG%uz-zNmo;ay_e_I>Hv<# znK}bG6;Hv$5ZQST(nX@Oqa>JQw{q6d-sb^cp+Z*g3e@FAec^_7ld%ei*wfm9vR=Z}ucZr!MpWWl@9hoz*z-tPGYef|W0Puh$+m+Cx zPm>}&muT0SuVexn{OxqrF9?o>kG3Qm>}=_J5JW>ajYROUU9rLS=aa0||Jmb{~FN9-@8(Tk-f1 zgOU4NnrC$_SJq`T8)AuD?K4F~+}*u(j>IM9#zc8cer&{GWWk=qfmNh?JEU>SBs;$p3J5Wt`BpJpM5+W3}SfdHf+XNvNcb$;+f%+*EB z@=kSG-5K7F4k~%&uwfX2T_XGI8EB`}5mIt!>yXERHBm=^sSdR^F}3|k;6O{3WH%WB z>uk8RO_qSu>5vbnDF+XF$Qh@^MVtm@eV?1mk;{SSjg}16Oa6F8>|N-+=zN`K;>-}tORg*wkpkCD>4jrp=!TJAQCLBYA*a(;$wF&q zuGh#mqr^qcf<;xoeHUYW25&UvWg3qRYz->u+*UPBcsyyxs{9{C=l;)RQkGW*%`QJi2uYSnIZb9ng<8SX(2dwj$}x-QXTuq@?NUjPc! zpKxT<-s{b(mc6vuKhh({g8@?RP|g-fe0^H+;OpKb^(a_gUF%7K6Pyvl*HdNf_TKV$ z)xPwHb&>T)6_1&Uq0tt)FKmYUl^9gS;dY9K=dW)l#3zk2n%$=s(gxVMC@C5PoX`un z(bejdeA&uF{@l$a_B5duu}%)%V;TZfmTo-~bxk_Y zr8lK1v02wP4`-41zS4cnglk?NUTD_;>;_C`hz3VaU)#@-`9yU-M%iGfw87&S1o+k%w(qe}T|KmLB zx+FH|Q-SSkLx@}mu`L^_UY=khjIb0bIL3Y|J&4C7E6gGsw~^OKjH5sPDxvKZ=6JU_ zFBE^350ozpv}GSWQ8@fIR*0hJdi8l0OQ<`eYL}hyjVuL$ovwbqF(hi_ZKcZ7Z7SKI z`Uds}?nGa~|F|~*R6|TDWI>`Wo^=R_kz_1m#%}^$S(7d z+TaZ2W3izj5899M*Gdq-($JgsM<2Ob79F26YP`h|Pv775bUdo{3acgUf4 zcg3AeD?=0eLiL~Z=FEg*LrEOE#IllKImg1pMV@Klvz;Z;Avf!dV%ypclbva4?rrX8 z3}WO^{{xKajyNTPe^7L7fQtatiW_;BO5GLzR@eko2&Rbz-2WCmqX*wakn0Xk5^vEd z{mMY{%9XSUT1=Q*P4laPN&jPE^8>bnocPs}Q}wn75ZD_#Jz!o=DxoMWpPMQ=knTqoEjeG3U^NI{u%=z0@ z5}0(&s(Fnn`xA&NjgDG_L$zc_%AR;$l3Sc)^&Y~@qT+BT=>Y{IX^$@%&5x_?nDTd@ z@fkIc0meDWAWh~!5#xNP8fqO3C8uiZ8z3?itNJ16iRhIHw?h^Dh`hX%^M(n!4n6Fg zQ}YT==Rc>{3Cx7k|9 zMj;T$`^ejc=HD2=Kh1><~C5HSQoa3A?)}@lnMz5xQL5vsh+M1D@*~#(%uG-_$7`C)J$_GZ?%}-pISS@L*H^*Q`I1p;Fq7n{qH@w>M2k-@wU*HKzj4_It&Aq{o%L7%B zuQma0a$a+uwr-e6)Q3ff&4Xq|lD8X7Bw7NhdjS{Gi*8U)yn&m9l+~pMZdcCD-sv%( z$M_n>tr2Wt9ypvNUu7OU+&-nL7~10Cxj`FFIqCVegLQSNB&6siep)Vay!-VkIz2SM zT8%r64MCZC#WRPRQdR9f>*-vyxk>~WR4AHkoEejCL%|P3_7@&b2nW=hQKi2tsd+(j zDu(6eRUEU7bIO+?ibz%r7^Qf3CU&qN?>CWDF<|9Lv=6r_`Krk5q&^@`!?mrLnemx4324teQ8q<`b7 zT6#L;Sk}3~rJJHqa7X23${5!qKfp<2h@q>NP*Vx%4#U#Yll*fZtNKU}Z8o&!397Io zmV-_G#Sty6YRgb_C@QgXvc{PfqvPwrW;FW#{pJq@UM^;iYBQ5vTG_0UY&bG9 zp*0Z5Q)I4CYq@x%IR21uqh!M!2pA)~3u-D_SDA$cboC2zuEorUAZSzIc2P?U&*bT+ z*iFZ|?coNW@5!}E-g>e9s*uwIB~Bv`vG^Kj=OM{CjpssDeJpz1T!w>SO%-J~e^lfg zBHa;|1_)8w3G_2FQaP7OlS&zsinwf1@|Z+nkNtD}?{g667`2V`++Rdqq00p98B|h% zjUnqGgL`1tT-c{Cp$C@1HKE$65D)m^k~Y#;xb0VemKXL8@c4foL!V>lvT3lSE}(;~ z2*cYOJw1MDLmlGkKnlVImCS@4a13V~sw$*OX2+JGXLmYr1GAj4`+!_tOaU(&*{E+$YI43QA)Crr;IRyZwHWTS4mwrl_ zW8wOeYT(acPVsKAoue(dtZtYc;pKlH6tyE-{6Rlc9EKN!6~CP2 zJetl27|fnB`hKyvZEO0>96|yrAX~8XJUMa9`g3EsaraBtW;eB7#BJ;Yl*g0-ABVJ+ z$Gv8$Q6Zrwuu5a;aHakJbc90U} zix0#X^glb%H$DM)nyTD}b7YfUl(dVlm3WHk@a%g;sDgz^;3=wJPJf?QZQ)!lh)@v% z1M4t>=Y3yl)fJ;vE{7RU3vIyZx3hZqG!yPHu3-_G^Sv!egK zz`@KgF)EEkh=SkbmJN#M$U_ak>VURB3LfunfO_9kPRe76bj*`c*# zEuJH(y41!rD*#qKc2ifotjoRm$B6Ep7FAc}ZzlkT9Fbh9Ags~2?0Wk}uUl2AXO;|^ zP)VzBQ=a3kIYH9<_r&mK8pLe1Z7vpbf1y5~%U=BNpHzZR=4R=!J@kE%wLQ~o8;gMX z+^oeF&;CkJSzV{{P;a!^Xg6Th8Jf8?Yv`tvcZ8M*tf+oP)hRi#Thnn|2#HHNmflX^ z6L^H0O?yQ?E=no_7b#6mNsE#mvXXp&*gXZQ9k9mJDhcGYDD9~CiRthKVR{5=SY-IX zMtPfpZ_Dlqo-H{J%z*PAru;4PtX;mqKBOI-eBPi1Aal9)g|Enjl^F|DgcL2bFTVAl zipn(aSw&?Q=nutTz1&NPl?)~6b5&N=WZ3%#Hs4qJNmSre4{&VADL!iND0km_;GkfK z$3fE~!)q0@+f=9KoabR9FV7Xl`(3LKln;t8Y6>Xq1$>JvtzX4WE?tUe13%`ITX*%4 zL_6t|=dm2k7@O|I^R$gfDz)f39yVnyYraKZN z<&`Enpf{<}&Ue#Y5l50r>^W9edaKA@@i!56-4lfJYw|D;JaJ6~^-FJgJ3w zv~X)y4DwY8%Zdk(*JJp|?)7=|q?(g%BVzC<5tMoa0h6txvjm;Wk2zjC?ly0yoS*Be zIKx!~JMrX%$Ux)x6wBhC!oJ;Ek9XfE{#PrbVskG8{?g?NArwbE3$x)5?cG_uHx@I* z!^RQK1_iy#@<}UE_t%At=A|q8lg72Td2FeF zydsHiyU0QoH;X2jYkRwAvZqg^brhRB8gcU!Z-?^#k2$w_e%JfgHy5blDD%t^WrAnX z{GOgbGEQCoh+qOknTL@z-srjX0K7xE=s_vZ#*%y$%33k`TO^0=3zGV`EI`pOBg>%i zu*A%x{K%Eo$E6v#YA%|gl-VKQx*4r*QQ$G1Jm>rJJlA}?hbE=&)D`9?u9hERB8J3e zhw||*2KrwR7Tn@c4A%?UpG!DhRGlZ_gPHXw1m!n-1L#KO`7T3BR{KnmxKFI);_sB_ z@lGYVT7IF{GBMp=;|OXZsAop;ioEYBpXoH8*`_B=m$8h<9-?@5l3j{4GZ3r2_ir)y zq@F4xG%kj$p1sE!KqU5(?to{gDi$Ei{2O%AntQ4FwGx?fIbc?YQc6a|{-2gzF#y2L zUQj8vaACc|VPi}2CQrB5?<46cuoUWNkFiD{cbPPe()IUFms|Y!m3>66> z+}}>hLxr#)lW%?Ot3kj6disTw=kfW)Um%`!>pP0of}ke;5xi$BRBiaI{&lJN8J#E> z)T3fpI^OR|sR%p*3K_)kQv>3v$|;cmh3OamX056IQjBf&Lq#{#lPLf8ru8$9SFV~{Xsjzk3g6>% z8L$2YluBsV%Ds_-s6s=AEag+rofJb}Eso)}$uj;(1%H!AHylNEw&0CQms;$u7u+Le zZ4~nNJI0QpRnP?LQlo4>lijqYxRw6g&dcou#BvraS z>-IQhRIiTTo2vF~ty#|OiK!hJmQ?tU?8?&2fF%FDiK4x6u+tFOD^{DhmBeuh+h}&) zBn;AVNRjk4CuYk(>hadk0*-BSo4C`se33{z#g836ll<7N*7AlJL zRHUl06#w~?-ZMId9E`2ZeqMv7L)5oWNBmjaI}rO-ZYJ4TUGoZmYFJB0J6k1F5=T~x zX{uZjxu&v%Dwpz+Q>4nxuT{lM7T-U@F%=2jQp;G6JpHx((l7Zmnx~HH$mmk;!Zumz zH&D+kN6MSNou?IvT(*xzZ(4hlY3vr+t^_=nGWDdzGSA$Bn^2_W;L1{}*_%hjfKXlw`O0|7!b-DOC_8iNo(6p(zn*xy z!o7R4GpU7WgP6F`FVhaR{YprrTMYQ_iEQ5JYvdW7Y^dNT5w`(V<%Q?kW8k}+{@$)? ze0=JCbP%~({|y^Q)tK1lFov`7hDn2{e`gq~u^q zL*S-l6+3jZ|LZHZSBWQR3?tJTa0TRp2TwvLTC)h@o3^ zYIly0L`XzEi&cE8bNm{2Z*XDh*`g4YXU!Ue;tD z2qSX_u|V84>0S83Pk{G#J7V%Ag02~;s7mOnYPOsSM(<(LEMVCQA3>p5O(%q^%eN_zNCnOfO1gW9cOHA+jsnjJy$>2IxXJ)0USSnQ`#{JwWgkWo2~PF3;%g@ zMJSjcREl+FCSwU*<#uv&jhGYp4RImq$W{GO9G~MX1Y4R96jj9Uu`wZM-DQ{{H9mXF^F<)3tU!O66R42MbAyj8Q zLxiWn?hoK)$=j?c-u#yJ?hFeRwp-&x?GJW~b#TU96dt|CBW(p7izkVG^h8C*6eE*ZIunCax z^8_{FZs$V=wlwcnLv_OcrBfy)wKxqA1>4h#UZM;Cd*VJL{JG;0Y}@y3;^XH%R#~l2 zMwifX{R`dkobkw_AsUWdMBhkXj_CNd8uZ--G)%}cbb|aZ@J+_!)hoHL)v9w}p(?eW z%B0BTzEDB5g-2Pe6zAFF^)JKzZnEEa##dG={{PcLN38~VoU@&o)DtJaMftMkLmnLz zx<>J&-JY9Lo$!Eon@21y_#63zQ##0UfBCxQgc;+la8ZL>nFzm_n8AN~YZH9@H9QA= zze%dX?h|q%dQ*q|=%yBd*zm#b3(#oXI3&MNfV>Je+{ilvIM;zmXnOm*aO45MA246n z<{iA?gsOO(=15;U3CwfD-65>y8je5B_o&9nHW|{7j_5x`2S13z>4IwnU1GF%-cqF4 zsEI>xOVUo27U`^FV)SvtZ|!I9lT~7H^OApkfR6#FJiZATQ`%P~5)rT_NFQgj7iAY) zh)&IpD@Hu(kc7{B;Y^*|2Xu}5E4Ce1MCp~ek=6&w>SA(|)|K(m@sq4vB;Psmsds(8 zcUioN)zplDW3b=gGDpMq=#{|Qv1-T- zNb92OUGvR^T`u* z!lEp?f{v@w;0kb;uG)t}rw^nQba>y960q{kd17Ht651v}pdfi(;-2NtOg-`7U4ceZ zpCNqU$&ox?P}*XbzBmKuA|aTJH$NL0;rTOI=Ht>;{*iyg(n{|~bUIbcg^5F(p8jXzD24`DP`DVi{?A#vsA0 z+GDJNFXHOOt}D(ye^#MU_Qq^u1nq z{EJBoJarY_H0YD4@1e4X$<-jJFJaNsv{J~Vg9II9I5B!`$HG$puY5i4C~2DfuTBIU6E;m{lU*8e4B3nQ*a}gNLnH!57v~Ver{=g^9Yb;&n z7tOfbq5ancHkwLp*{ZS-MP<<)t8A_d22|SSqxQgR&?-UKatF$knVGqcr|J@aKp?iA zA*fM&`MIhE2D>)6(tAX9pL6VKtL2+du1TyDLwP_2YwBBgHn>+|A;VvX>Z!C!i&P_Y z+*nL}DY5fnsnxjQMW;wBN+VCywerv@Gl^jk-@Pas%61Kv+YPe&(sgxXYlp^b5p07)A6`k*i7djZosJ}#`MUPhDAzVT8_pCe zAROF?=BIyLgu)->te_U1!F@y%Uli=-+zDP|eS-IkYjxz5JOb0=8gNlhI8bDy-0 znpb#SKbStZ5!fz59rSr5A8aXor2MFco@^3EH?1@$t7NW3Y(IdO%4d5(53Sn2)SD3)a{j@bF z*w;6rm?<;TQCSWL7&qq2*EfgV{TAmuvajJ+tnX5Jv`jJy+PG>I>+g&xB_{Oj0=y@O zV^l}vz-fo99%USGw1G}zeKc=K`3=C%!7FfP$pMQ{N}hu00~zT#L)4=utLImn0Bh_N zySfJ?5Ld?U?bj)=T(*C`8=JHF6(Lv zRYoh@`I^S}@gylA}SXlcZS}V1*#Q@S9{74~MCeBx!sA%cMs~Dt&LH| z)+*47indCvVFLg>61}f1%A^3&XD7Umfxo3^860 z2{Kl#I5~aeOHvv5*>$JQ4rj=CHP+NNG#ziD6Y9gC;!A}@mMIb|-H(*nyf?ETnr$Gz z1Bdq*vvdjXL1QHs16s~{2r!2oCr?%cH>B}7mXfI=YfC|r-ex@6V6E89Z{*3G%Gp9m zAF0x$caS1Ti+BL2o%9CQ&M7PRcw4nKue_-^7I4XL*E3Zr07mwn8oSnD-|@9TiaqU_ z^N@+k%u~cc8S8B-6Iovfj*+BdX zn#-n!PGImP7d?m|acYX{Tg3F#grG3YVZV7AhUIU|YC0H6PNO~n0%mN(+e=mojW<*H zCdg8}H&d_yYBqLK$aRBjDy9$j^mxZn4IWy9=1w4q-)!}pUy1!_NKSYZ%>g~vP|dd zUgM$reFabMjcqh}FJv<_&Li7%I~M@dgtph|4)cIZ7XCT!$NRg_iYw4cwPQF^S3i|G zXApdEVWC^)1y#ZJP5@rftPKQ6m!EX+$aKR25AOC zfK|nSefNw%GKT)0yeoNfx#3yCuPh1hQocd|EOarrr_P&xboQ{yS`U|GiJvAf&BdUn z+*IL%-;L_Db^+W5GVg(k-^(mzs3s(x#g}uMk&rM51x#m zeDvGCH!@J+z)je@W|M!hgXefm|8pOniXtDtUW6zzvO|VT?q*xPfD6odZwQbo9bKg> z#NH<-ol6%HQf3&JG66*XcL>_LUMG%rO2qhwWJ|XsI{C30uPauNYCmTxzdQh{AXShc zKx5u{q%d!I73=6^r$er2qVXLzO+L8cL=GS?{S|G}tzLlKa@x>l(AIScYZiONRU z8ee8YT@1I7>YjIe7Tjur=+NqGWV#lUT+z59-Cy=!8= zHz?VIIh55<%mS<#=GFv%3d1S!x@Yht1{E)Z#1-(N56ts>ghPub8H7z0+cC{Ib68QG zHrl@nPxDGdXzXvyay_goH0bmT2@VZ;ScMvC-P36*$)SF$>Nsoph}0V_Cqg*~uonXY z?1n2nyW1`Y*-!Lu>_QIAt;P{`o`O0j@;;EWa<@7 zo26>W*SQpGx|%O@%QPWq?M&4i(Ljt0TF&I7dsXKkZw)sP>XDZ=qyQ%TIcq#uzNt{U zCpQ^@mMU{*oOF=yO9+QwVH94fxdAg+^T?{a`_GtCo}{LW8UTB|%fwVNLT7h(kivw8 zqWOKFlhjL=-oiz?ap65Hkk(%7md{4?6a1qkM}l2eO&5tfUptr4eO7?!?3k4#eA>x3 z#WVk&*z(l*&ZBrXZZjTgzg%3!y`!4q6|Iw$Qo{PCsCW(wEyNv1V4` zN%AI|mRWB(s3u+Ak^eb6bR}4+>drxZ9jj_i4v`)MWCaH=+>iGjmb-lae=tHJP{r2f zm~{5hnsEe@mi4#$vm~rJz9xxG^Kcl$Ql)bxRr4om98A=BgJf^{I}%HUDj7Dsc8w1U zw{riO1YHp8tmeK4%!RAP^DY{M0Wr>U2KvY37qu^XUxuCT;=#l^%jA=GvvX2I7kej@ z^b{Y=0S~1`-y&@Z3eZp+xVkg(ND;>_?$l3}tE6vS^U(*5fV}fZ#i}s3=#?!Cgvo<$ zIUO=eHN60j?Jnin-p8q8F%R_W5uc`8I2rnPxG{+75fze^mCjVcf~Th(96$)D>FR*| zk5DVMp5>&i3B2ZfLhBxonXr5T5P9+8o+65xAj!s`j9jMp7tJ6^^pS~@^HCJTNXN>}2yOjdhpLh85g!}|PYz7KT>0lwLteqyxD~;%iRQ>@4}pSmAX8^2%p1;mTU7Ngu&+nb zn=FEyLvu-d`^#Oqr7wjdH-vz||6So((M-7EyIWk5gDM0%Kam6 z-%Iy{JJM>g9c1c1N&@ztbgfQJm)@WPc?}yym|azGgQxkAccegRZ<$9UvmCy4)EH86a}|KB`w4BT)0HMuib;xSbc9R!@l zW7oCa#10aQpNV7GBVr5xTmO@PCMFjR6icprYU4dFcJlvUnHj?xh%Qk@r%7)Z7#jLB zi(6>k$Fa6GaEa!;v(+(1I(w*}#5s}Ty&=lsh!MQC)Xbn% ziXnYpy!Wb<2yLn{7t$y*Zh))=%@4=}5q&f9+E52lvSn|Qsw6XNnk!L5gRH%ve5L8o zjBZ#6qS2Y#5gPe@o9r^IzHoPN4t>Zk0js}NLFw9^&>=A(JHg4VInH-gkuEw@e|#ulh#zQXV#IzEo4xR- z0cBjCkfQrDQzf3GI||6bybBu~BmiFzN{JC+F>H=z5evC4t+At8(mlqZrRKtGj}~$~ z=~+ST=%nisovokJ?`>Ft%yxJCSCJqR61m_k_1duZuzHCN_L=M(M&*G0CKfeCk7j>Y z{DTyFd;cu$o*&aBgUZZ4#=-2uxP*M_Y4d_d@oCSFH%qx9RrML`H{YKlDEmWGW7k4k zy#J)O+@m&5pZ}Yw3McO`r*~ddlck3&zNqHFe{Mr6-Lz{hCBemA{(zrOF~4-DbeB#7 z?BE|_n0zWM28c09#zMs+_v8OY&PxhUf8t(s0cLjg+BGZK$Vfl*17CAfnPy+TAa(Bo zl;?wp=Aa@xJ7O~6^z7-IDF!C~2FCx%T%p3V+Rg4a`P5=q%phNqWVS}0D$8! zC>}`|SKD{I+!nD$u03OAXpmfS#OR}hs@m5C42&*iC3n_=hk~+0JwNBGBCF_D@&3>W zL6x1XqQYs%cJs}EuI1(zl6f9xfi;0rpLSBE(-Fu-5z*LV9|q_u=l<5|XGd*2xO_Le zx>Jjh>=tuNM>4S@LzJLK?=nQ@2_AKI3Bt#EG7+CGHxTw;h1<}2ikLeG0aX2b}~Z* zby^2%0X++C%T57u*;2nCH+^SEaV&h}7`)P!cP_X6ezDo(ysma*791?tLdVZ$RO5DK z@iIeb_s)jSJ3%xLEtbU297O?>hUr@=2zX$K_qxpcQ}?;ujy)o0RnV4P>E1h_W7bD{ zGlqn>!aRA>g4%KJ?6{|}L&JDy{iq5RpQ`wZ{hqO+25N8YNDBQ=MJ8S#nW31QiIq$o z@~CLJCsP#p)<$`O{Bi9{!WSxpDB>xM^_#Mg!WjdRNfkU#2ArqxKZ$^D{93{@6oL)s zB=`V3a(d3EJ$8%F56V0gt%I260KlVcUFUDj@}Hp)5q5#nP%cK*-?CFSXr z;`^!v(|%L@U~d4~_4ydR?Yf|BiqsE!=Z3Z%>|{ffmu z>|YZeOajQ8PbDR_k3=>GhgxU}p8|-%($k=jsX4c7)P^1h~PhJ4cRz`2PB^_r6E5nnO+Iy)wKtAR4{>gdPS-*G@L$3BL!1s8P5)SsG z`7!G)v&RcmPQQTqQOxXIYq1k1W}pdE;MS{76ft-hPeLd_(<6syZGh zM7Sgaspd2Hn=i<(4$3?MRar;6AwlA8n@4aJ9D--zQw``o2KeOOPNI~(*#tm)nC#Ds}JhKDATmCFW zEfcReJ#hXeO^W_nPZy)<`Pd680@;2ph?ipXsCo@ z%J~;${O^DHV%<$ZTjDYlX;_sQ+xrLl;s@B8uT|lZ|Y4< zgWlGM)HK_b8%n+lJ7?S@kUxA9x|L8F00kxA*4O|J!z%|LpxxBUSlU{YiWnH*Q)Fe?Gt#CEUZMkXEP71I^lhzq_xGI zd%ZphE7AJPmXQ*ls}4J{4iU8PYfp%PKKbC$u`b#qL}z-|ZWeUKf6HS7Ap^Q8^^B=lh(8V!A%KiZHzdO|&wb@Z z??5bR=HkHku7R(AN=)}J4Ou*vylF0kR5@QFyVdr81c1rqCPePlrG_pYf14Mz=eYcv z3r=IlxbBB;MmKfyE$Uu2dzN~GbG0Tud1ja!NX(P`+cZH32-SRBIxqn7R%cq(aUS_~ z;v~r+#_?yYm>E%*VHsZ=|PkeR7*38Rvk{=KVRJjj9Pyfx>6A+(wJ;PFwUDj|ha;KIcv7%I{ zxulmIJg9RrroxRvrDcpbXz3(ZC8wPnoASx6DE?olUvngg-(Sv4YdJbF@Uqv(B}B`) z-2Vb1pv`f@f0Rb@frk07XAh>rp1SC(M2BaBfR&5sY;6i9ipf#$@<|Ozu+(Bt3=<37k@t9XtPkMhhmnUpj zU5M#CcH|kTv#>Imwi$z-aSH>s_lC=E16caw9?C`293b_*>3z3n0hF+`UdwLki3155 z+*%3@`e1G*pj^THeca^0yB17VgU>8AdI-Vzdrogy2lZ~schovYDksphsqMLM+!(pQ zEA;S_*bjO;iJEfnXQlL0sYnlYh*Ex)OI!M*HC|snK$99gM56> zO-BRE^H=8ONRGwI6SNei4CVYlpEM_8LHJ>Le6f7-*#|PwD)Iphy`b|6=a-slugtNy z35xim2Ch*B+#6z5W`r1hTgm7f>7-bZBu+4aY!cj@l5x}IN>5chS#KC*g7Z-ClqB5z zT?oc@=b5<#9Ydx#Cum@9TyP5>w1GJeg}5-s=-078H3!hEi3~gL%cMjWlvr1_@-VOq z`1f`i1rNEtz)Z}r>!-J8j=P-7?VC1+OQ#PN+#YHt9xO2R*p_Gj=Bu48kK0i5$JVnO z2F60pgf%alw&fz<#!PqD+E%4A=VGFi8lMm%tn;HgNzTD4u!+Rv9}fz7wTOGy=CdrUp{j4F3L7y_`VRm_81^FRvxVFh>o>?u!GufQ=*X%tf|{R-b4gi~zx z?{WxV4;mLZuH%Db4D%Wbw-7-Cog5`tIVDcivu<3!nc$$k zbtA*6K`F~rG$JzDAbwzuE>O;bPgqE1lc~TwGub;=Q{>}0Bq#p0PL@`hEfCa!bSpYx zxfK(qd6b^~;$oVyZ*^hxkzQXFO1~b!t4x(Q@9eWM?^(g5V%a;+?XbExUF|D>ZE-@C zUM*UX311WQ@^3y@w>euO53mDhvYhv{Ggdr;2rPKiBEG7dO>i$#7;E^{1>|4fDNL8p z0%&IOt1?0t%5yE4`gkJEr~G}`XWNJ*vc0_}%^C$NRO;#;l7R*Xf(ilz=(D?&T+oU- z;{E#m!ex31wp;>2J^7OBYI~l_)OwPE?N2g*$0DGG2OG3qkHB@=a+BG4rl{fh(X!+& zV_dU_u5e60HsT*p!B>Ax!{1LIwYwQY>L@q@wW|L$%h>8cT=Y-|;}ro^B-(I#W83G^ zm2ws~6px4z+LBi~zjXzlL(BEJgr9@d?gbgigVUe)`Gz!A4bGyqj(@1%&~nD7T~l=+ z>i(l@gDt)frtMW-9FSUTsd&=O9Eoop1?JTsYw~ZpQjxFl=8Pu}4jxl9ta>K4hH;cs z%OR<565as~#%eiWyN!#zywPk}FR0}*?e|{!Ot|Y6g&!+G9+cWgo`iHMS%c|%TD&79 z_4I0u&!;g7dManDp43nSbrEJPw)}jJbQPi5+LAU(a7cu2cA@EM%L^5M^4JYn7-B$xeMB; z`{O1gHKtI~1u4d8L*0^j*VczWJaO2C%B2#Cm1X69^DhMBgx7a>H7vS`2ZsQ(ojI)v z=#OXF2}l2wu_i>d=%c*og)qOWv{We6VW&z<7XUicob>@mKC?)$Cf5dP=iWEil>8aI zdVz#=;q0yv<8lu#gK69SLgcYPc;$2HViv4$+y%l#j7*Qc7stYGiUC0neH8)F7>nLn zz!Du{IPC0qEnY%H2CwuazJ5kt?)eYKx^n*H@8B?t$-)nL{#FiHWr(@NafVx$bD~pY z&=$^0cAIRY@f*xBA(HlSglB9*7jrz8`Rl3Xu)CtNP_n}CTS%YklonNkEwSbe(M``)`&RQ#T%16)tjzo;JsJc4Q1>g?99ns7*o?Ij$JdZaHQ`E7Fa zS~%HUupMqE(yAExJb=Ay9P{F^{7*m5T`45oRWL&Bc=hV&Ewi5q(iiX#zmEcG{>vp^ zwGR*Qu8r>4f9BO&n5rk7Ydjg_>nd`{RjEj{q|?D4%6LeoV`+gFiuk81Bk+J0FXXZr zKt}Xv(>_UEo@`ukiEMcv`9=sxZ=~qf_@a^?Q)2t&qG&Hny-EDE8eZ7T)-#( zv&Z6bk!d`bU+MELul@5H&Cc-jX=g>i4Z@axSxQnYKIeqw>Aj~L1(Xvlj=N7kI&*Df zcF!%wnf;Ax6>hSixwq@BSLmj;o;1NjeA^q-^VK>31wkmlOqip|w!@=%FG-6UmSve8 z(1ES(hVd4uZ-=E7o7i`ceYb<>qBUk@LWWbJ#l52m~Ic%U3YRv!Sk>E}6@0C5Hw-CO zBP*Ry{Mxwir&eI9Wbpzy?u}4J zvf7WIfaTK;et)qqfpW3~fSReW{^2N=f2|kB9`F|)b{K0N3bd3ezHT4XiuX4Ryfm-j zr1SJgOdTL3&q#}3RwSn8*k(nc7RtX$wUNx;LP#*^TeOi zu;wGu5lheS%PbGRk(_6AU$ks{HM`?MsC0T$By5oS60c}NK?Zz1QDMIkh?@{rJ^%zh zid;T?`|JbkJi<+UM|O!6@SjuRE&hXZ7znR@3k~dDK9USl0UgV;&2sXBNNax_(d;On zRCKQqLlHj^f-b-Q;`l#90`rVv$)}!mgtM2yc&1rnVx7v^n5WWr>^wa1#}yTMxD{Rf zPS@_KsboYXtAp5v%kSNgy9mr_ny-JO>R_GmU*Gy?GI@yQAq23`=AovZ729&L5WV`(mDI1{%!`K{EJ;Y z$il-fsHB*N7S{a}Y>1QxKQ}6rA64%IcJvAIT(}$LnszawSZ;!M7l@(zu*1eZeoIq8 zj2Gvfy^i|z7ZmNlJD4@0dos*d0gJy`#>OVT4IU#Vb2s2i=?H9MX`r8bORL?U_1(SZ zKmMLtvYNTH%Yw7U_^Z3LCq0(EEb^KOeBAUGFA^*}{7BC$^gqGg-8~JET|NrD>35Pb zoYKqN^;Js~cnG2B34Ec!Fbciku5P)Ge1&h3xQrM*5ej<9*qMLS%5s{A#00A^GP~-C zXT&9Y7xSTQs{4Et9?@~($PZZ+MIIOF*}l1xeqHLRzph~*tG~f$em07|zOeYZg%^l) z3Pmt;fxTdIZ5_D|R;YAb)L`yK*ZGdLh|Kq|4Y)X%wa<3$dK;&ZGvKJT9s8r{^1!2AUS zf?c)wNbC|fWjT5h7+XeU8N~#vXSyQqslOzFErGd>kP*uY?G7Y?$N+);cZ$x4g8Jx95&}!7huB z0W6UbyD9M!^>%LxEqh=)GgcKD2gQAl8#&S2yENy6PYK zpX@Z4&Nwy3t;*S12h)-SQ=SFA1>wIQ;=KCGDh|^{T{`$&>HF79XQISF^$y@Dc!4qW z^T%$=g3NAI8!#t*<2&aRAwSP4LWn{Nr^I^@kXC*D8k`SMwgmeL&sm=pR^J|-Kn`DD zd+o%NfV$5(Gxk=bF7ke5KTGAP6iF@a2D;}F`@A(>m>=?hHHG0ttO*)6y@zp-?y0j! z9(s@KqO6iuS}5y8(=<4!z`ovMYQr)Z3Liq|+=nj(N_lv+F@X9FU|-8_$dg0<*mEsu zZ4YM|+EL+)qpvFV`?AhAqYM9a17as;j&O%F*iH>+wqEzj14aXcYBi;{AMk${*!uO` z^+-T*;^m$5k5Qop)c^4Qy+W`Fu%SE{e$#36x2DrYJt2!9}GhZa2?V zYwi>MD#jF(-BaZ6UAx*63o3B3>UAmdiXJr!X#MD&Lwgp4XSAy{1yt3sZ=d1b>G9xZsZp ztX2A7k@FgV6eIz?I;Zwvf-AMzl$j!wxq1gjS_;mz2TfF*AG`rd903utAWEE3`UQw% zH(gU#VVnFh)3m@3mkb&EF`DN`2$$Wa5{aHX30NP#xQ0Eww1>pXo@#YTyNjXma z7Qz6e7+;aP`~OjN-eF0#{~u=yii(Je8xaR8uF%|q6IZ#ni8IYTC@n2e97HB=&4x2I zcWPN$;nu8g?vV{Gdm1!sJ=yT-=kNS?uJh+P*L^e@V%six&?_c)lL>2Ose{vn@p$ajHE!}g-0sjoIB@JTss*m zVKk9?3w_W?w}@YNeMg|uzA3d~Rxc}f9>Bj%oEbCTd9jaiz}xp9*ZvLxA|L_wqMH*^ z{vP)3EK8>0EL6I;wEylh+d1^}pg#-`0%>)$i)I|c}v3vI@&-}^7e zsUIE1Uz}jU)XICj?5;l#d%=|tBb^%L)mKJ^{kDj@7?+yj|Fm+cl4&a}VuD~!uhcp{jQbj$J#ymucJ zQPIK;9==g1H1AniNW83Ac@wSNA_Y9I<(C@k@bZyuc;^;nSn=i&xbNGdpmk+v4~u!l zdJb+M&Q-o#?on*G^l9$M0xjSRp~L+d*%Nn$YftYg)bHG`+@1lgr5~JLty#JvRb_FE z9=EyVb44K0IZ1@`V-cWQ&?6gg%TiIF<>^OP9w2O3j8qGGE7yb57NG3PuCaDQ$r(*F zrjU^G<)~Vn5^0dVNPynx32>Gft**Nix1sJCD<_6Tz&0(#X!wV!7~>@(800pnNovGV)NxRz=h=%wpCKC-f~V2OJJPTs)CNuxPZWBQp$ISc`yHHg(JKi|Ipj= zAc351VDsxLhw}l^TnOq&+a^X62taftJA^RuwgEW%!KexSH_3r}jy?+EB8uXXh z6ulTYXH?@cE*)PT@9!1h`gAE%jhDEbA%GZ71A4Podz&8){5EGay@tG6QpCmek8SA= z*_WvM>9`)Hm%824Z35*u?Puo?hDqr^GWB<-Bebov-XWVr@n3}9Q)X233f)a@kx1lX zXQ6tS4+m~fMg);A0BN;aEXZhj)s7YjwpAzTpwtRg?QH4fF5HI9=P^!Of1YICd8mC= zxaiK>H-Bb}WzF8pC4l;)w8t1vDab7McDUR=7weyFpiu?}X(5U^FW=BhDTM~t<;xv_ zIf!9Tn$%Vd**js?NlP_{`1|6kvyVXn6^rKlU(t#&iPB+^L8QjJsWni zp*XSM9t+xcY|@Sovont2{?opbl@XbqeuSF{XWo;x`Ye}evwB?8XSYJka9dz$S(dXI zZ~^PoeM9sUl6l2=De9SeI5=^^*|D48o+|>s5Ni)m2kSx__|P19@R;qS8bHB4th~}@ zLEkkO<8}6@kVotIG1O>rL&B)P`>5WCivOswtn*?#eGCWqJVywCt=cS6j*PgFos^tq zZ^0Vw-|Y#1LE=4>;1!|{UEk5h;DHfTApx@oU0=f;H%G2l`}%#hCsHR{AHRe)uA}7>X+gi|p{gJ`UpOUZ z3@W&XlSTcm#rWF~Yy8VLYPtX&KtTS>t=!{w&FTBLbh@{Z39{+&g^!b6#JIAw-t^=o zzVhU)M1Z7^R4aFRtU;LvqKNmt^$;j6sic>bWSl}9HI`Dt7Aaa7W-QRri`d^Ki-K1cg;x3gu9z2UMqJwqh%jmNuBHF>4 zA12R?^>a@yCQKAgJ?WWKi?fVDH9I9?+j@C?rnID_&OQ2_lxKkT2Qu?jZnB>!=5pgI z3c%xl`_eXsE{ty`~P%8VO1}(;e>=5zN=z42+n6Q6a`CT@d7naw~V;Y2aI^|3A z?Xl6l`6n=$Yd4Svol+d*=f-Wxu?+>0@)22=EWSuH(7ww5rTpv&={rN#>?D0q$(y)o zDm2o$C&AHtyY(X!U&<7GpVQa1iOaL@e^~e4L`gBnyVGd?*J%9F6?v(Y?p)&DK-a+4 zsg_B5C~$$eMku!Q&KQC7gDMjr)icnxl>5?IaI)pwa7O{#BwJg146h+ z^GHA%qR@FjMmBVT+&~HT65wL;Te;etjGvZ4ySGGw8nNeV1HEH8MLQ#^rL{?ouzm4_!qk07nG($2uOD92+} zGe*zQbZK_t9bbh<{uB0;m5Z)I5;tAbm2onQ83OwJafM!$TNWl`UTFlGFO+o;ejRt^ z_<`&Bp#24ASy)zkJuXB%`&RH_CtGf^d9KTDQITwD;NZIwF|a@rI8EgX9h)aree@M` z7xuWa>U0j!Jlam?rrfpyd)0&??#<&hOM@Be{KoARB}Y&j95~6oy_Sy z!BOSdEx8!utPnx{EUeIe`J9M|BI+O2ZARD{%izjtFgeTSnZ_v{!6PmGsvN;BUXdtv z)#=I$z}A|n2FOeuCx@^f_?E=nN1KeN^ZR=~(#YJQEk6_Bs`BJm8#Gw}8Y zJ_a>3hG8kjCMH|`wCr&Yz13(<6BQAMnWNlvxM`TcK`g!9*g`X~?6O?WmQ_3Z*WQQ4 z74kE&FM?5H{1|5cdr?h4S8u4KaHtz|(O5DfxSxIT<;_A5;6c(iy?saQNr9#B7mAj* zLLK}xL&T8dU1Sq47P&3gj0JcCA+lJ8dqepf@_ds+m*jKT0Nu{ZMdwEV-noucb^#*9 z{JIVjy%xhTvnb)7kNjy$mbmy%rZ;yiK5AVn52>Qs>e$XwKG7kynq-SoI<^EPN9YXM4rfw2>J|BY(wmA#Z8Y=^91z`GID|0FmTF z^<}#Qfi{D7s_-8axCm+WWbhpN`oTSdV<_ho4DX~#6jOZ%D4iN624R7NlAz7%S<`p= zTe`qc;?1mK6lWJedJ2|!YlAdN<9sN+99?E3(%LKv6JBw69qKRXG&W~P3OVB6M)MPj zLJSp$4TYVh9mZMN*o)WrjT;4x==@P=V_oC{6@ayo*>%g%&Z@|WX(aHix_{Dbk)olr z_P>u%*Po5t=%^P(H<9DMLDngIWkAw?w%}9@3;?w2uLPbLS*1wOM2ik_GLH79>s28_F0eN0t=>~m$tRJ z-_vr#fDmFCB`uw4Q}4w3y=mxr{yF)kv+oOb6syuGQMRncIkE0Ut{ZeIF+(OlzFkAs z)WKt1?M>eEG6No;IvT$_vp8JnNr91Aes^5}EfGUNJ zbkZr9+CN)bvDN62<(SgZMIn^#+Eu2H7Me5 z?;joD#%!wuR98VLfeShQ7j7>?6~`Jol$!) z6P>W|lvx~<%Rh^_#B&%KJV;Q>lR9hI3u71$nky&;3J} z%=;I>7M#i-n7gsZs%Y}CAfLM9EjgO!lDcdbJFwb>_3PJFlEwZ5+q{?J3Ix68*L1jk zD|KZ_AP0UIIUCluxI>iv=Xw-cVM4P7NcdDr3l$V3iLKYjWN~N`Ivu)gB|!4u%b$c@ zj+2+C0W5z0K;Bo-MTD0P5Nmg-=X5~n?c?R#hr8NU6^Ek6d<}(EdWVJR6NLj-u-ya7 z-o+73t|2YecP4s(3(zeQoezN)+MXqHT=PPq56Q#?5$R#u`q|Vjjapp~f^K0yHz*JR zKHDjNAgZCp2*1ed#w~6SS_WCc` zn&-*7>0eZKY3i&>ZmeAVi;d>KwKFJ(?fx|%A9@c9BLI1=hr#nwA@@YBEd(_O`B$ zAY*g;Ym9J;9d%oJ1m{r{39V>3AU}dRX#F@9Zi{nryq^aIgr@X-yK;VvqMe)5v@v0; zev9voG9OxSCG4ahg<8OzEZiqVOEXqB4v_FO?JrW{<|!Ke^s1ty|6QIz526LIqd$)2 z5`Oe?>pjftRWE(FSsCbQyb{mX3F)#WM>)W@8F2w>i0>}aSJ>H0T%)J`6}a6=cMQR6 ztQHMJhjmC=U2-Ek;&IHNX5#+BSfSqW z@yG*WLR%QvLl}a+)P^#`B04Gqn39l6!oxIAm=!aAu`xs?(eF;hI#4sb?|JUKCf~5+ zD^=sEu|A7IM#MSz^dJBr?O8gg&!gsk|1Fy-t{PC1*xzb$PJ!#Vb`CB=c}}k^BZkP3D>4I6jmqth>4(oqFAV}# z9_uQ!pH^|TqFw6;kVax=eWMf$fqATl03OXVavCJNJxDs4%qqd3w)y9Yz_S1&lR(Mw0|?Ix!hGMNxDYy3Gh zE9?(91fEfKCgs5F+Yr)?p8}aw_nnerf=Yau=7Ln#=tpDDo%pwcgNUmGvs>XM_Dv&3IE_26Q=%o30t4irRp)mWY=p1&YnR%V4536~&XG6@4ZSo)cNt$Ddg1YEEt4J_Bc3G!T3CY?)7&5s#QufkyX9kgC0%_4-UM z3jfFs0;EJ6KOO-Tb*dvR%FfvA5|A5*-fBVoY^=fCin3&Zf|d6o4S4vYUldR8_!|w1 zhmO}@-q3l^L*}65x9o?qFJR;F1f84v<5B#>jY#ya12!s0JmB%eqSceGb9YWe5|f%; z^IjL~*P&&4#N)10Np8q=G>k4`XCK%1t=Al2=)aIpxCI!;zx5@{lJF2t9<{f#+~$Xd zN*|7q|2IqEntax^Tp%SnPNBum%&ERu26fwL*dTGiLd)JGr0_cb&pap4=xs@W1#7PR zn`GcP*u3+^x-PiN+XqS_g7hC{KEUb~UNAewE>$gR6q|h+ihu*&$nRCZhI8F}{PGz8 z+U7U<72p0J^d%iFVsVxjAlrQ91^Y7ZXl^^PE!)@h6hxuur@yjEAz0G3qRzu+mJ()w zOYt%Bhzo_>>ju!-uPc-7s|yFh;2uv9ZjX$2n^k9*;wg-kFG021KWYFM%?450DfK_qt*V^rmVjH zL@jPQ@?F^LvBdEv`cC3pf!$CU#LdJs-Of-&29Y*5r_`Ii-+|sf%GqcVNopxGPENNg zF9FiYBIZ=wY4pfPk?SQPOckWgYjPeW?2JO2J0fG@-knD}IT^C|#0WRh7jFlpVTe!V z+xd@wf5(!y5>A)|O-K!iR+zbpt`jey({K<#+)D{#e(a#fQ%!!T*6a#i%0+cTUpI>x zYO0uvp_}OCFKr9NuPL0G<|hUkdCHMcmxiW&`hB@A9hT1u_G38NOT)QRxxCFH(=u1l zF%$GyqTf5v?99?oJh3s^zTRUVBbFyZYA*iFyv?{_z~2?PAVnZ(DWz7xB*1oG-248) ztGSb&WN-ITn|X8pD#9D(E7!mOsrgA=&Y&b*b=tnSCz7ZF9B$xFro{@2#lEwT(zDE(3=le7W2@7ug}p31 zy=y&B{%VOglc~KX0Sk74TPA9o03@y$)4eD$Edqq_3`#@A3p-BTJd@N;iWQ@7Ch3{a zBRm|FcGs0!)$q-vV_7P*a`Q<+N2cda{qcye>Qz05Vb^v^cLEM~j1z5ao9*E>=M>Ei zpeMEMdvDl8f@GyD^H&Zrv4`m-3FIX6fI8Rb)d)1o+rQfO{c7 zQn+TWAM1$xvABrRjZ^uwd^Q1*gxuC-`;RssEhjf{h+BB{r_e8M9%3zV4vJ+PT4|GoUDZ>~(PJ%*istL#& zVjRV#)mwER{U6K5#j|0wwhhN%VZM*`CXQZj)lp^m->oEJ>|5G(2s~d6i@OO}nGs?A z?<|D?yfB&&I!IICP&N$7m+&cqdUp^Xq@eN@5eM(mcUx<$R5C$O=e<=^3UX%xzWp#a zVOr?`WpHrGURm5TYUG*BX6ifntqfPodx0v{YZ+4*JB#uX3$<#Jv%hG9CC_>(U~Zdh zM?e9LN`zgxatTJ0wx5i(#c7iXCC-4EoRG+wM_7I|OhRNq0~* z@+0w_e6`**H87ik%P_qc(-j)@HizQa8|zO8&2>lrbmRJj&)XxuJ9I}@&s1{pVh|Rn zp|dE;@=ci2#Lh^EDrk{-8x0we&ZWzmtI%RRqkg_E{yo#nH(D#H;K_4w$RYgcd zh4c_)u8?N3JS%yz!Bda}-mhKvH!N&UM6AuYM2c$_rHlIdsc5~2MCj91dU&Y$VnjsG zI;AukR&H_2FBeLsHT&KFbmGm8PqJ>G_iClMha$c5$C}u-7yT$jcRni`sztq zjwcb_y^T7z@wx2eT>ju6o4$CH)df2^WXuhtx!(i&j_Hb6h(Sq)BwM_gnD$QoA161| z(o-beHBVmc55wu!!#Ur;igJc!lqOLSXc^@M-?ces!Rk*r#fjE+;oQdp;k7AVU5XGw zPvKA1Eu;7FQ;75j{q-8g#da2|P@?Lya_@4G5WUDd(=HYwpZVIeUK^QPGdVE3-V8Zl zrdyHO37sO06V$Wj}mYrNgRzT{h3dxtBwxUtJ_+)aVO zh`ov9YEKmfF{~h+d7P^k^LOsnxE6%q0u0l7KT=#RC+#^@ZX=7OR++;0S- zdi-PzTl${ zvNutw)|DT`yk!?N&e^17b}e7?khS=bD18_hhgiRvctNh;UhJR77+~YRbz+!m)ru0R ziuipL|Egc)EGpR~-6p|l2e#J3H&*+fGcT*A65q1VUQ_2?(@cB=Jt`7dGVd`0$O(P@ zgct+gNW*?{O>pzZh=aGaPT@oC7Zf0wYgiK#@E5CdD6F0%4EnyRq-pF12aB}p96Vb< zy07VldKz}``*D#|{)?Aoff6ogD=|6I+ug@4#|#TM90-co{(FJU!wH<-LI+%||A1|3w5IlL2-#3^`+!fCTk4f!b2&_%%a<8P?-T#_*mYI1s6DzH@MOE6~J z(}NDF3%ZBB$Gwl@J9we%KAJ7R%$=`kV}Ic87Ysgm$_%pySYr zX7G0+q3VUY)JZG-8UVJi|@F_<#V{N$_;wXaC2vFOkM^3HEpoaFXyG< z#<4Ggyn~`T&0OqOQNvB#*9CiG_+NBvY))6kP;~aXp&3$?j!Ia{t#wB2tl8BIZUN_< z4GMrd_47Xdt#AGFzP_~cIc9Kn?_RVM^nySATPdVR4%`EP9bfEjntqs5uP}>CsU|La zJtUzx2saEo_D1B*Rw*Q`AdHIdHBqGzT-^_QKnm@#!3ckAhj|g$kz>gB4uf3}y{UJa z@$Yrpz8NTJN(B*i$YmF02nlr=9J`2WJ50QgfguJX`+fWpSwC3T-T9Ey$n$i7Fj{J) zu?$|`E1aLalQWg}r(=nVQ{~JL;7r#vg=t%*Cj|}chFbC91!>p28;Y*NCifi4pw^seA}MY6tL;s@jz_d{ zlEiDszL#1v?8meij8kIn9~7=4bU+Y!^2c4ZdwS90@Kn_7V&uYTlx*3ToMEoYn~}K@ z(~-op1o}p;4XUqY92X&VP;bBXqtx&xCWazSJ0A}){5%Fs5;li3j;X31$Q23?^z5&R z3F>tg!?>j_KEW_-uvmtfg2EH>!G{b(9FCzyATaO`_n&EMGURl07-)Scbnl=(L-?#G z+031s276YDwxYqU=Rf^rJVECCZ?^RP*IW{eI{wfU7=MC&s=X-0$>AY>PI33J!sXji zLiy|mLucoNT-ilHH&jjdEZk`zu*l*a)!b_iJ@4@v^Gb zB(OM@xKvoFQXvmlI?XNnd!tlkmq_KO?NY8G3*)w!-jZ@zTSy!U=hjVCtGRHPZzqPc zHXk1c_BWJj9?c7K+ds#2eOU-9(&YMsvx&Ek$!dpgFG+WV9lqP`Aa58S^u`M;|M*6= z&(1>_3pb@7mXEU8r8Z7!yLdqa!B6x#)9!s{b`9{?@qu<}<2HHuB5f~Re-PS?;~RgSpudcIua8JXv&i-;OCkWMX!eOM@8 zN6jbj?W=>n{v^AWv_~^4utJx%@_BoK$JMpkS9Mecllo##l+N?-P_>(74RCoYMMxgz zdFQjDm*;=0N=UE=ksyBQd3|#vQsY@cRgP{Q6&Sk;V^5O zETehAHVF=m@CgbskwXxXtrd!~e+hMQV+B&4kDY}SWRDoKUq`s8gyBUtZ*;!2mG~-W zV(UAJD1gECB@A?!{{DE>7b@YOEj@?#xVMIj?FA2 zYTTBE>Iz%5m7r#QobHbMbD8Zq*$j5yhc7(gwF2N%k@+-8Zrt6S=RIq{-J%|XM9vNO zd~*l;(1h59%i`dSjsjKYNY{s3hg-*E>5t}xGY%gA1ueQzBwE*x5|=w86$WSj91C{5 zW^$a@ljxVyD4Be{&9;%Pb1Y|9X#Nu@7KB{U;lfxatsgvDwY|G`|6k1?gdYZ+;A?KV ztsX(-AHHjW?BuOLzWfcZ&cJH?1-!_Wdlj{zcW5qo8{+12!kqISmCGU+4@%vRamC$8 zI;=HitPdD#x0&mJH=0pw0e(xxsfCFgtsulS?%2ABgBaeXf74x@=3KZ*{$s@>jZUv` zTpnP$hTJTiTUG0fd1BPmr*qq)iGbY{XtYsaO~h&)0?vwOKxqKY3l=p4{~7!d4|^b( zShh!fMYhC)o`e4`ybZZzpZr-6I^6T?&;`{=fjb3N3Ay2!H+7E#P`yya122PS9 z_f{xUE`sbGvP+zYIoJ4Fhu}apI6+9)>z{ZBXc)qOe;;D{RvC_Q%j3alO~YiRT77jlo8M*rtiS#5^v&hvMYR^49~1_*B( z=K=6}lY%z2l|mr&`J8;28-`7kx^+&z75@Hw3er|m^h~ar(3lz{{D)d@y=RVYmRapd z8tsL0F9kRZj|h0LZL6@lb3SJ&=zwUq8=z2CU^8E)TB8!>@dAPyD^U=L9qa!)J+kg|2CqyCQ{> zu@e@_LvsvtOwK$ntnfQfFcdQ!-%4?Mv+VCxi!U$925@7N;-RO?c}aHp5Oz{ZKRT4l zzWm{9DUYcSJz@2vR{kaTM&l7vwl&*m_>Xmi=~u=(t3%5-#)|HCTG@+UT%+d9aW4yj z+doos$50W^CZu(WjEb>wR+9#snhcFxh2l9n;!-EmuYmdOuV*LK`>J4>8s`qz)X#GQ zHCLl)m-4lRD5j#Kd7+B9LR-?iLT-u>9PVzpibAhCAkVZnE*i4-aZD4DwnGPSK24GQ z@r5c=;BrhOvnY8t*TsOe^P=do7id@n{pizFR}XwRopLJPw{Y~D3~89H(5l!3zx@_& z8NarVm}9ir6LV*BL(?Ks zG<(WNuepW9nw@H@w?51W*yd?T6qZ+CA2_ROA`ew75lLI&bq06GyYEt^_UevgaH$PK z0pj^@BpL$bO{zv*|3>6!QYG(c)*4I7s691GIbUR6`mkTv{j~n8}7i)eF)W4^gS?`~Ioq)qa%GgsK{1vFytsImL5-OPcPy z@JEULdq~-I6JR%%W!QI8NZwpd`fKh7hN!2%WK4`AAoOnE=M?t}#kT^LxH-*}BBdZr zjYVHO&_>p0;ik`4C<@mIpYQhK-=(lRz`+ErWS*lBBI9kEa&GDO+ui7!5jF&YtX6f3(=fg^K8rhhmA+hkx_74{owR{Jw6mZq*GgbQ|Uydq(jo;c+_Vx)54ZSd5f>?urgW?0Oz|Ti)3z z@Xo(YY#;N(&YTM|_#M&XO7>Ti)jI9{?V1W7KJjo`zn7a*f07DYBP>Kp>eZ+|935Tw zb~I3*3DF5(XFF7H9vuq%*yD`!KBCu?7YJfhBmdF+Se_Fjnxy^YJA7`f7O&@q0yhEK z=H^m#DP)@bTBF#sLfjC68#=27Tx5!>td0I3*`h#=>-OM zyM(>>swK@AQ{~g8CX6>n)S3^S{}n{EjFOx6eE<|;at)5?*-`e5a9%MjuKKy@yW8_e zH@TL~1VNT6LvT#yw@tneI!kakn%!DsT%EI5;*kE$T> z8km@{bJq%{_fG%rfafM3jE&=cwrEyMkb0!F(*hj4zGrFsae7?N>FEPUIDREIytg^e zk=OiNlphqH`pU;6On%5n5NF$N%I`ULCPFE0G}-DrGFjDf9fRTT8T{Dne24z2Cb6FC zW$%Wo(XlU(m5JUlVt0z-|j$Z9LtaP=Br{Z@&tl|8V`0@#%Zg%%M|=fB(4hF2;JbfeAYPeP#6& z5-FH@SJ>}f%)Pn(#qx53jO zlBYy8v0nGpSY9yu$t)I}OI7-x&NyqLZb2M04P>m2d;$xfP*^ySZHJulh^o;j6AdZ_ z5`U}MH@Z}RF{RLQ^MJfPeP-<6@PlxyK*o@6Fjlmb@J1NoQz2(PdVJXu z{L;A4R!&{-cd9Jxe~?#z$&lYqC@N!B-5bJvP!6ISOA4?ZbDL zYcD1W*OLAgR63}51#|2uZ(P21fgO7gB~GWrWp3(&7cmc>XAVu4! z+I^a!RMUIdXB5)Y{&aiffD!GWJnkth=i@ojcumJoO`>zfb$x?&DS+#DvUqKqRxyDxaF0A1E=g08yG{+O7*@PgC~QC z_+jng3QZLF*jtFZzTfAaZ#E8HT{}C=Pa?Q*)Jvmx&JBfyy=orq$i8z@b<{iOdV_lI z9?>4tt^_^=QqEkwh=fQyfBsw&VlH}0q~9LGtOI!9q*Av5fF8gCT}br#J^cY}Q!+Ud zRSz^-WR?@5dfk&f^ok(j^H>Q`{}k#UU($@nC!zi9vx}onZF6AU zcxk^fB=p#a6RORElx*oBw9Ts#{AhF74-*mJ(3UKeMJT2mE6v}qWElWymTxs3Pvr7oYNaMinpb}?lC)1;m({19PAt(B)z|58$ zef!Pu5Hb^@2{Dxt(g%r<1O?4HjIJRyNqMA(xCp@t+?31!w@@~Zr${sp5F<*5y{o2Q z=AaAG(peBtLX!@{=5b|k@bh2*0p#M<@6xWKSi5#c3lLDhzyk+0e^6v8kly{x4mwqS z`rOj1H_|=8YakniuVNU2($uA|B3=S{N>7TbBx1zBrzc=k!ah)YQgtJ$c1`4H5)7gP z$_HSMELrO!wU-)|V%yD%fWYRD&U>G*-WkfroUkTd0%skJ@n$pe$LAj=@lCk|jPR@g zgYR@Dd5Bx^qQRh#n0M$fhZ+igo5D7-u@a&VzQ+*1?FpytVo*Nm3)%-SmM=vfVvqXkft2^#?_T2NPfFsRS3O%$n$m;qFT1g|Ntjx&I+3gGRFV zu4u3_gyaQTUkcrz=TCI5^2H2wFh<_FLw3W;ZDmEaSAJ1txBmmL9ly`?La^;-STAuB z=R%&ZmUDD8xE*Sa@^mGU-#$iFPFikdbNJL)T4Vso_}w|lvboP;Jn=w(10F2&*H%|X5#+BjA??J2Fv?Lc}ZqaUyDyAfL#$K6WH`Z z+AWHO(4fUrA)icZ3LJ#;%I|ut2H217M0#vMP1tsF5ZTOVCn;B;`#|f_ZICxO?P9(P zEzeGfHSVpY5@57}Vl!wrV^n~#%a)G7V1L<}EwHX1`HhKO&bRCR4YIzQ(<;t+OXkO; z?(9Hk(}T-_NtE=PvII$QTmyjd}^H1c{_DCcy7d0iva}xycy=$yh^Qy!Yv(EPtvb; z)=uWe0|zYpUUP*^@x4Vh)tv_9?^U)+n26jttVDRz`gLUfE-<0OC@4Y12XZNqzaX!o z9IqC8RUUGTUn;eHuhq$R@VU0U-T|Y|?+Ib~M&Lf3mmR2rIM{f&hG*YvnyP`%yeX=^ zhFar)kUDDGGo|sB54%x+YVcaIv-5?1BQuKwoDiGGnmD#HSOt}sZE!7^^SYsfff5kN z1Lc}+1Xas%<8;heZZgO@RnhJDkhovwdjspnO53t@=_wc6+ro#^UF^&kY&2)iXS8S7 zF61aQ#n(BX&r%z$X;H$+Kv<4didU8-{e*lXPS5sDBy1H)iXwGXRaH?K?Dz||8;9LS z9&608OmLHd9U!kcsV0K@a(%I+PsTHRLr1DR*m4=-)a99Kt>%|H;{o^DVfrm0T`OrC z3MvUygfq&sNd>T=ZRI{wJS%gxsv# zrK&=uWB>>N^6YuQKbQj{dO3mkbnv^Yzcn{FtpC~WE-LEjTReIB&6nIBf9QyzbPLU1 zqm3Y17xQ%C5L=NZV+7L=&z&lN+I1l)GBX}6gKQG&T~UKv?~c z4-vfULEn#~&lFO4CJoM}iZK$$y$oDGh!A#+Gmpn78gg%pzkY09Ud52K9U3W(&M%r_ z>@*D=a7u7F5Ko?B;>g%)ev6w#duMI1Mj@&%$wS@2c%dL&b54$*Le(rngFFWbZ_{qL z8Ci24aMQn5+P!G#oz;LRL@3s*71cTQ_asL-Jd?-XgqyoS<^XkzwhZ;>UPX4>lHEG8 zrTf03Fca6<+G_-Kjp{UT0idbrDcb@oOM~25Xn>q`_o^>zzLQKjg?;w-sT*SQsj>}H zcu-OLk_rk4AR)%VPIXUZ?=91W;?kX_*-t1xlaswG)n$@@GK8hYeBiSjRu21=t+Uv4 zIxrn*CW;{p8=TsnL74vkE$2b(F@plmgVAFaJ0Z7!qt1>$dAcxl#u4be(5oxEhE#Q% z6Nn!Us{G2*Fi!4())v5Y(k#uc zZzhj;sejT>m_yJzi7He7;I)!+%sX7l)6k$PW*GnW(X~so^P5mhZW&){aiy!q1PYE0 zR5bG!iqteI&8u0gmlUuioDMBpCybK8Q|0tK9PD)&=>nV8}G~gnH zKOTwuuW1|Ce*)lpq>3gfn=I#l%u`IBJ5MFT(Bq5h=X}_-#eX+E@y*F;m`qcOm?_!L z&bGIeh}|#B6-Uev-f)NwMiwGUG+5}W4x&KN-k<3T-<6cDK0`Dvb@w|Tyc12ZZ)fWPU!1?NgZcB*rS9z>F- zPpGJpArV-Y@qVQ{b~j(Y+TPv)q?*BW(@QE|!3$LdhZG2`UVM99&MzXHp8 z7TH5$N7EIinA&bL)TYVr; zQ=~kYlYc2GqRBTr9L=-Y(!T^RhW_+JiRThZpmK@8mk?cW`||V$rodmJPsm@qXWKhN^WT_1$qCJw>FHFh316=tyU>ny zMeR1Ec6@RVLFjS(til_8#HPa{R>6Hm3K;ORfogeuV-T{HgsTCn#;$(v&?MxzOGIfa zgKV#<1*PT7Z7ghR5`Vf{#X6_-J73H=B7zzNsn^fomeKlCvvb){8C5xsyR$aahg9Eo zBh0?I+*RRhpqQ(U`>;lseU~pMO7($M?U_AMe-q^L#&F zNDF3ML(Df)@}3yz9Try_SFYm)cMna)e}!a4jM~MGdN-ebu%4`iy6U3#mmelC6)ouv zcLDQ%e~`ai{*U51?UH+pm`9sSaESVmk9B*bY_Wq!Ck+ty%MfV1>hvjZm)9F^qRm1{ z#U;BhUvqIoq(v2=<+^Dx6Xg#gMioD~i1AmE_8_y51W&yO4BDL-#yx7hezX-prc>r@ zxkw6l$d9a1eBCb#BwWKWE6JC(Z0BsAQ2N!Qk& z3{auHy?Pj6y=q0C^tG%mA=_q!X!X-mZJ|~xNN<%$(g_k>S9td;J>Ke1aa|%%j@?P+ zC^|^HzAkYR)qVJEMlvhQUfS#h?&~L;&iS$-M3deo)$%y|&+ZrQIk*{`Cy(xU^_1hG zOT=PzGd__TsZSrst|oRjnINl=YoN|i2atrrxC>gO%uo7x`hE>YIR6J>$#s0F>BkEZ z9tmhX7=1H8y7$^*18=Ve*=Aiji_|ey;oW#KzTCr-a8$nD!IH=O<>N;YjZ6m9}y-i zo8E-+>P%ZG-h4%^0~vTca|(*5G=K0yQqt;)YOv_(%EaW}ZS}39QN=q)pzXtT3od-V zB2=Z^rEON$RI7~s(e{XxyOA1x`F{ZFbyC-QcsGr`{N@3e_p(7~I6qS@qb`(*Z(DrP zU9664QU}6YRs}Jb zPHn3IEC1qPQA!yw<*(ngk69ra2fbvNP)1tP9|+C;?PKQES;a*~OaoI%q@_|BenAz| z8F;fZyoTG(^aiL&&Ko@7cPG(qq39JJL-Joc?)Vp7cR&h zz(QW)AK>T+T<=TGf1*3a=w#m(zN8c5AL>8vamKna(RtY*@Pvw|%e61J+_bhXWJK>R z$e^P+mefff1GoXKzH#P!vi5rlT2*iIJWd{$8*LUvy-h#G0-Kc#O{38V=(dv&zw<_< zsaF@=)1?(gDU^>N50aKJSAFI}J5om>XQYj)h(YGnY=Q>jT-oU7GK16ZkAOxB21?^r zbd=3}c5meBITI80s^%-O-R}5=NExo*XjytS#=5HLV?jpEg0~k^Y`oJCoQH!sbA!qa z%4I)2;3Mb4oX$s6oeB7Vvf2i|FBk8AbtK%=N`Y0X?m4@M*0wx6t=x;|Qs+a05A5Mi zUX6HSW`@tDV++TQvS^JVJ!<(wSIK{`q}5%YHkKzzwb{kh;URUWCM>o-8E6l$Taa~! zTfRk}Hu5yKj%`)PlucYd4kd1osic{*~+(>Cg6Uv7z&O|ckE3htKO4YWHQD4Byc zWa`K>yKPmBb!TpVw_O$!)$+fRU=+~TU?`jwqiZ%RDp5fLG`;JWH4|c+uU|`yZ!&-c7N#~iWNbq4R(=lJ$yjqur z3J7OLYU`iM|6P{jMGx7k2xwphVhYf`S<~;F@plP#R>rQal7P{Y@>pRuCxZh zptNG!W9myQ`r75}j}Tv&sS!RCI-Cr=Dv&z=7e`i5iDG>=&~pEY2AM(*svkL_f7$}m zOGWVu?&Icu*jS?+>|^Nvb3yG8su<%Ud`c}st0*K zDFo20S6>W6UaLLHMZv`b?I0-|u7-M7`WmLDj}$*yF{Les4lIm@Hpa$04>L;8@|_c@ z%efeFfwx)}t!usIPUHZkCJJsoMr}Gu5nAStGAvZV&DJuArephIq7ffJ&`5n_^xjX4 zTo1Wc$nP!3U4lPJ62u9>*(Uz=yhUE)l8aDqvx%X!ssA=j`oGptfLmnRsF-PFB;o3K zQ(j1WdSp9=iWBMeLiBVrbn0!zR;D=V$a~_Z+M<|jXA^1@xtO_V^AmRy;mT7CehiZ-KQuap9Y0#_hb{4Fj2RT*unCKzlE4(N1>XkqD!qx zlLbd2#gTY@k>HA8w^T763+_&LStLqGB1`{ZKZNQ&!#`Bj8URvQkg>)KMCQK^7LUbq z-)$Q1l9lvN7;hR6d+|!KyHNXsoxxuzvf==PhaLtPjOs`N-(^FuL>6F(f8zYnaJFx3Rz9i(pu?_d(lb&|p~7S69hvj<+RWL{=AumD=Knr86~o z?QGvYC`xhh&js_R!yBiH<0kd3*`SOecuA_cj;T-6hH#heY5nc+8I7}bTT^1W6?I9S zUIq*M%SM7Rq8e1|<;iGOi`@t7grE&W-bX1nt-Om$Cl3`Ue|`t@9Oj+c(_UEP z+HF$1Br~>W!M|eB$LxvcnU!@;9^ofPO+xDGFY_VV4*`5|*EOQpT@s|?5iL->e-e^@ zYO-N8;BroyU-Va#i!DSkS5^xR9S8W7RCO;5Nm5oN$aoL4exkb z6&x|E_E+*%G!^Hg)cFvgzt2?0)zCNBlat-CsX%_g1~^PNP6f6ggKls(_VCE@ZQ!a5 z%RObgAVX8H1_NAf0|R|%UZt@)`pMXEnwzJoNK&}2YZBe9PEyFg_lDLkXbYXY)w_v! z$-L3hYa3W+v+0?cg-iEHPRH>bk;0jUYa2UOpG>=3^ zbXu5|pv-dREwI$>+TRZ861B*^*JcFqdkW?TcPO=o!j-m zA00L(Pm=8bmirI+Y7EhL$E2TozMErWL^IWIYguOCH|_;;-ky(*byEs)z%+t%5>CCI zkzj~SrS3FJJ{xn@mywycw;z<#j%^u=DlYi*fJLiqoi8o?S?{yegTu> z(Cf)uNSNWD@cR5ye+l-Q0z+)p`v8UFb~!s{vkF3jRfugpFNsjfDWY+yI9Pq$pm_J; zA}3Qoq6NhneTT#5M1JYR|t|2(PeWY^KSf9vYN9+ODCUq8t=Ps_M+zlA3h`ebOi z5%&%?lZZ<>g-8G}%oI#=B;>BP^L zpX9mYiKl)phwog`F=^8`@RE72-wHxf=J^JH@&3TqjYK z0{N{{ThMXSXjC=?VIwQrYquEKut&*vcmxR4cz$l=>0|zhr|d&9R~miX^U4&xrIpvA zkMysn7zu{9{4z~s9H1s?W_2m7(%i3V34lPzf`Fe&(s_tZCkMbd z7qwe6)N9ctV6;dlg2SobopRXZyupA&*=^^3GP=gj!6d&1Qy0~xD9Z}7bn6bKsF`4} zw~}%DrTuN$JLP09VfS+^d%{k{;K$V_RGK%j!wUE|gZf`eU3~CIR(;q8w#*^$(*<*6 z8#X8@PO)f}a#Xa~Bro>ngcK;qdwAJLw_6~EF&)Muge6c>)Cb-sRsXu<=Q9Dr2GlOP_V(;PwVfUbE1HZg+0O zk|}PvuTI6V=Gu#am#aEJX1X%w^3U>!%b{xDPqFWg)jtAg{+*pDt%b|x4t6k%R!=dG z7&EliLySYsJ&!-TPCD@Kt}EgUm2h#~_m&f}QGteHUqXnwc)yD5PuzaLISQbIJHJl@>E-Av(nu5J3-c zI3_Qd)i2fN`e3}K3p~^7R;->$`c1{su#{`7!#$g%KWyB4reqmN)KumaDKl)p|4GRq!n=%1)E!+~iGeh)`| z3ccV($0?ZQb^haK46Arh_|}0c#q3xwDl1<5F7?sMIF!DtaS<1s|sB2VwBklsvaqE*Fc(5_|pZYoo9gM2?_$z$L>oi znI`VRm=d9IC)UYSEg(?@wV2iLX(K|_OyLd>m$;mXJnMa)-eq82#~G+p1Wy+;8vee%yX2mg&&nb{8f@58mqBdKXh=V!nxobn zEm4BF%ns^m&O}(lgW9eq)6T4dZhD((AXGZn+m_Bf0d^AN-;7;Mm)_oe;BYi?A)2^+ zdL?xB?cSs61jNg~YkwE1;3+{s7pl{8*mNA-qZXN7AC9%|BJ`+DL(i4;hj!aC&4lV+ zL%~R&V64ZZo;U8(#UfUIjP2)=ceEX;GBMrf!PnrqAx17kRKeuvOmGD<9k)aS~Gedb*C%5&|q<}&d7onA@)`j!2%W(o!sb{FV@MqWX* zcbz`8Yec+AsWY%HDcLRAt-h%bRQ9ZA@Sfj+#j`zDz1X7Tt+bJ+acwg96fAegrXS`k zfO@oKr=jm9m2JgG1*6rg!&e{7W-;i*h5+8AE!w_3M^dO)Qm)l&i_cXOc<}nka?bT! zZfEK4XYxQ7fBP>;U_Gdp@k zfzEwxK{u(XI?8QflotIr^cSHerg;~uV({%J%}q?XyP3ZC5fX0o*Rd7nxsadNEeReB zyd~op)eX(I7jcl+b*BKBsXxB%QUn6*nV=P3bl}vT?&!+6P@sHBMM_Ghgm5k3$=JkL zP!p2q_7)Q=6&C031hA~8DX&ilEh??CBD08UshRZd@Nn}m6S-gbWU?NkVYX~U)b7V~ z)gI0>HH0qzj~Rj;Cn1N1^c%-w${&3wX<25E7t}uXBn|Q6TAynj_U1T3$r(@8EZ+9S z?%IQ0>bv1@lA2B+N{*@?Qk$T@*NRj$kqA;Q^`xBj*XPtxF1bIU+y0?#O*;0rngS;< z_Hy-s!2Md78q@DhRzRgzqTzNHG=$X`@S?;apUB~akLO;T#pI*F=lI@XagI9Uie20D`3Ove``ZEgFS-&5WdS)0l z)Exi$Da(gqeBHU^J6SRE?+o)UjVcq-l>XA7O$$>kniOBo#9Y;r1KP(>9P5)CaSHM6 zv@pj8FP9^g`Dy0*^K%(O?U*Dj(y@j*=c(BG$y&}a?a zCnQ?MHK@7Bzhh#)t37xBXJBbtAK&vy*w>FNjkJ5NX|zIUstX%vf=SgeEjT>W*Lb=n zaGYZb$dc@J&<4rQfMD)@*5SPklFSb6)#iQy$FvaVY*W%dbX-K8ELOii#Vza6UeCrxJ*H)vW<3bWDk*k}NhfN2B0{7q13v;Ca z0Z|8>gfr3Ju_N?e^>tk2Fd8;*Gjn~WDLoAhy_5)@m-5Okp>}mM+QK5T{_C`=D%)NFS;dEB1F+BYh9ydci9Hv(ab3BRM`38y5j2NhHe%?X6vGI!5?k-CZd${6B#6FXQyB#kz=QFD1z813@dyLrWN&1|`adtle>7o|#WTL&RUv6^ z@54bNw!?nP&3S!hQys~P+H>?*(@mkrjgM&*O-@On1?#O>wCZ@rm(Hr@;62Vr7(otN z3rkN`#Sxr@Id}siT7F5qt8Z5O5>+8($23?n5+ovTNOPIPfGWv78JeZzQ>cfH{r`c^ zRYXLB#-_mBXil1juDbM+1=MrA0+8|yS`I2mplxX$Frk@^NW@6A~aTLITuu}fuKDk0;-aNi& za5*fQM=qEE{Ny$~j>l7U`VMiwm74WmS;{$c$M*S^vh5mW?6m^=as3b67-E1`qnh72 zuU~9gNDOc@+x04Juj+ra?4*DSJH5EMFACDi$sfoMi_{d-ussK=`~Ns@QEiVun(c7H zWF;NX23QV~O#Q=7yuY|%>-3ggjStB{Qln`3I_jFDvR>Eq{#3jng>*CFHP@N>im}@(CXtku&Pu3KVi=71 zL>L^9INH7iX)BjZ%(_FoJ3~M3T7MNoNs0Qv5qxD=v@i(FPLB~lg^@YRFdm~H@nLs1 zgZ!+-23nD07YDiHd%6uU=(5B+Gb=Rlf;1ZT8%Q92`Y$i_5XC|dq|O-f;>x`&c! zs6&gHZH!Ye6TH1zhRI>K-nv|W*C`L^>?=oBy3TBvGziN~e&1#X*_4w`_7-JWnZXjL zMxg2QOGwq+D|8#2KM*^Q#D3%#J@|4nXroD9VDnoc_=~#Qm>O&dl6|87*GkT3@>E88 z#~Ym%T|8w|U2Mc*>AYS~r0&|@Vt8xH-Dx5+j958B9gQ--c-zKCJIK?Kj+8K}YI5%L z$Yk&}zOuw4QY1hh342^MVrRTp?8r=_8>cV9WSIpchwo#HK{I;&`ry{Rxy`?|EQ-m- zKlljFRQ{DT?GG#*=eV6crc8OsxX8-u5$T>NNJ}lUS)S8fXK{DL#PsnT!^oHD0Jp3> zYFfzLheBFlB)G3PVm7e%YKMB}`jmgOE?dxR%`P@fFG$s`lSHQ2QoG$tjx3%o z#y=qK+&u7nSVMEn@Q<-BGnghrc%AI=lQY4pWJa(_UJ#Q?T@(vsatwR@dGql!H~O zFLyO3>|f@M%e`)2vy7}c*x)cxtckm}b;Zy1Ac6USx?A|aV?lxLvR>r-#Cw71wte== z5oR~L9Zq-2CDiR3OF8Rx3&^jGUq63XY+pGs*i4;t{J^z=s}9n2`>a2ldr*)7X|#z? z>)cl9Q$+9kJ7@rk?q|K-qxKrN%XFOzF06-PE;+`Cim~>0OD3tVk6R*pIBsnf!SK>c z@(%G=Z(pQ=Kg-Thg@?VZd`WMmRzeN{8DT$K)wD36eTut$X}fP1RI&(x?GHIuJ-^D% zfISM*`YA$X_}Nq0{Xx2Uz0S7>O+OY%S(xmy1=TaI-@^>Okh)@A@Wm#V(5cHLy($7~ zZC1!6ASRNfN_w8`hLMjU&^S``TY@LS3jau6#0-fO`^+83qYUJpn3^l8Ryg{Fr z=Y6sxwagw0gOLOv7~={?UG{8;OT^CEIQ$n0koTe-X}_#~Y+Co8f>GF)!<5f3MUELp z+72QkN7x4e@9M{ZO1!Ve+zn=>#{$oZx;@ZG2^`h#yM&X0Y9hTX?ehkA36H-1kyj~@ zA)ur&vgc{_PzAAL47!Fl=G>V2DK-Aku=kugB43@oc~A)0qBLXKwqgfJ$_vof2Vhp# z;}XOBe|Kd-739?1aX&P5`(EjtU92;GuH}v9WRp<)_pSc#tS>mNNBkjsFyY#YTS1;y zsi^oiRUz26SgXrbjgl45eNt7nIxh+;d-=1=*D%hh(FZB2u}JLaU4r)q33xeWrGI5E8Y~b0 zt2!3^Di@+Y_{o}n_H=c9XWsn z96jk))GbL5A7l=?=0v^S-F--xSm#+$ca&sF)%}|`6;Y1Er&SUj#m^VmwO#0>U=g{Z zHT-Yk4;zIv<1Xwt|J3Qx_Jf@O2Cn?DjLK_4pt^)sn4CHj85rs&bTD1?XX{V@3o zsV*JAFL73=(A@|Ufpm$_eUrAcTe_O(06CP?79lSvXrGn1=br%56y6bc`E{G`z}0f? zJl7qqKz}nN{b47n#dz7FwLf_%NVDTKv_#&A|ISxPhAYLmd4Aj_;BjiihJ;FhI9E_x zg08vjE!OQ7@-7=(6<)en$bhPgg?c$;2>&qIE>SkPwm~qdeXUG0266B@bQ!Z4r}^WS zy1f8bFc^2@#&>AY;S<`e)aAyygC$E)%xKR0!|`uw;eEVMl*TK{ntaKQe5kH$pj53mOt(n z!?eNuGiS?0UG}k`$3Oj%X8=-@7kE*F2r^SxZ@t=T>g@9u0g&xya7qRzIaGtUj8v<7 z5U>zT=*{P+ro*ZcwMvY-KjDA(T?6ci<&UhW=un+mcio^N)hrZZUno9(q^MXsQH%nf5^~064X;1RH8N=f0tQ{2rM8kV7oh5n*w34W? zcvur5lUnW7!%0B`%z@z+!b@fH62(w2u!SQ|!T4VqY_pc(%^gwyQ(qplm#I~N*nZlP zuzuOq;&$^*-~&E(0Y$OZ$~!n$1crfQ;#3d*LPVo}UU}gwTc9S7hcy7_?BWT?vvE#p zx{$11&!wz0LJg$Bfc0RZi^K+Wk+MHhu9;d`*$XzE(b9g%8Yj1HxE*SP2Qn7}6fl%Z zRMv!k=={2ETtne}p&eY$OQw8DXzZ2rP;P2^LLohhtlmx2t0OoC#kTAD#TsfSmDE{i zHuvjX@>9ud=utET%H@(PoZHwjuXEjf_2D+XdvHf|_uULVWn4_}{H0g@oPC@(wCnPU zgT_v}fdhvk0d#2p;`Pd16r=Jho$tSF80%Wd+hT0rcb4>l7Gw6rjG!bIz<%x^DMS~o zwq#nat_K@FXQ2&eQhx0=)KjLF&cGdI4cz}6EOxlKI3Al6Ua35{5Ewwxr#m z;COMa*Avmp5!b0fOpNZ-6F1GVfiG{z7u;?Z;_nyYUqIv!Y0OFGOZaset{9o1b%r7+ zYwX?d&!JMnuT~3iy7({5Xjt`MMc%F{W&V@zRk20EWy__tSZ~jV%Xs3O^EP@Wb)l1z`b_ z``ekJS`*@i+>;;m1L?Y4(k{B3lkm+KoqH_vI%+Ghm{pl-5Dz~m&9pz^C2@ysfr)un zR)HZ2Hgh2Wy&1FHIyh-mr9zD0^Dhm)G?D90wj-ncAUzHSAmDn!)?Iti6i4lC^hC9SVX5Erz>#enQDPUAK z;|T)?FFo7AQZ;ftH$LdpEMNZjOrvw&^xjrPt_0YzutBke(eXedD(>|0(q#~t3t6HC zKEfK;JDUSulS>aEk}fnsPLtX07HFj#VYVm{D%*GCKn34& zc6uTH|J(a-HAhMtnev^j4U=l6G?IYojsGA^{E`WaDz)n6+_*THI7&prCb1zdl{PW5 zw%Z;-+Xl|0(y?ho+eezXZX@(*>DXzl3zw9+9lmyloBf)=wBAdlMFmzKfVpMhk-bgw zb1>jzQ7H6AJHm-B8SPH$=ouee@M+8btR=)snt4gqTAc}=0=l`izJ6M4?MerhGVx%l zq@P!Js5(wZ`Pqz?Dxw&i=U0m;D-r1T^3xFCO2Cl-Z(Gpy4NhybP~ML-+LapPuk{*p zrr%EnxbW=}XH!KZ<69@lV<|--^$Ui^U+cZqjPT|XF8JIFr0b1RG9Wi^Xl36USMS`1 z4p1@X{q{BX5-q7^axELnFG-~$GJM`-yQao>zHVVviqr)aIr0Wp#9?pc#)Qx6ID??D z(t;vS0O6lnpFqck!+xvNvRCf?0&D_!5u#6P^1{8W(S!+wCF`F(-)QPK`$*hQdxE9= z8d^)56HJ~YZ}r?hF&P;K{`fOi#CdL{3A%>5mBWy`84XW7L};>yd%x^>JGXOt330oa$)nsBMS z9DVq;fU%qNmOE;=QEv<(#$RM^A+6M^IdYvrldR=6T={8&M3&a-;}lH`em*))=G{7_ z$owxHJ%7)a6E|f~SSO4!(jy+@n}F!B%52XQ7a+QPXCvkLBoRsRv^ny^M~%;6zV|}J z7LL@mssGrTV#D+n#SlKbYuSDphdPX=KTu?dq4%;6e7Ct}!E( z(wOUclvGvJp0o#*2VXG~UXCn(tX7v$*VhNmPygnyLBL&|i}5a^=S(wWqg&3;I_Xnr zg{aO>n$gQjyDKwCb`Yse)ub!*NMfDw`+RzuZK=!HLplFC(#q z^;X*TPk_~31Nl1x^|&>EqJmx2b6imluL(X|*j(6$l38!XLE>lXA1EkwapxXCNtnq{ zPLiFHJtwT}F^Tq8QUrkNxe1LMn+`>XRLSM9gQGAOI@jlC|Z93#4FgSDEVI`)*d!TWjDx=Dk6VAXGzXhBLrC199a& zk!Z8Fh&}G(g=wUDhxJCMofQb`K_V}W&VmAvJX6Co!g(lpoJg$UFYQD{gS zGJh0MqmIysGOzBPU#dC1l^CQb#wpa5cYx z2WY$uEndeVywH$q3LB{@ob7K*jA5$UR;l&$?+#P$P1X%N{cb_v`Ymmrib7sG`p_is zrbUH7l7V9@}=AuH|iI6Xo3}$E_=2QI6R@oYO9``jU7B; z6W6?CFQ@(6G)XaKCiHC5Q%D!wh#iDIIVDb)b%hFAO^*2L=Dm=0a2w!ISC|*vg8@)OMs-p73spUd-tgD^|*}cC_0O;el1I3Qv+|CTThMYqMaG#Fm3a zm^gWSy1;$G6*1e0EgTr|>wcdCKhxrB+g#64nu`W<(2Mkq(o^61Yq%2kVbA;V1E)R{xB$`=#wx7P7Ui-pE7%|g1vXv5RNz1|7yd#2 zpi0Sx4(=oC6ls(krCs`v@ax363iQ8pkbi-O813Dl6rKu9ll@0G`I>LiKz(u=973vi zgoJ+ zVvlYPI7K~D!P*quC8=u4b+JoT+R>^FBSZHYm;&3XnB5B#`j}9#(r}-9aG_Csif}HL z_w^i}Y2|Y_`+iR0G#QBKswz=h0jjzk!$nFIxwBlh>vJzD)~&6OWu(pHn*vuvmrW=4 zM5=nCN*m_p7p_oi4!?ccj|XL_f+#uF*kvb#dV)kDf*m|u_H3jNW?)e=94J&9R&)iQk>LiIZKE}{lFBp3Wm%>b?bsnNI3Eiuro zGVteLHXjOT^hU?S+TC*69hF-qyR7_k!@&iD=@6}$p2|d9cV~SIe9v%%s<%7Q`>=RJ zPM3W;hiA9jX`FO6)RM%_l&d*QDG6VZ35_2O6$_8pm`WtPE||V~>xoc*X9HTX?Z^u{ zKr&W(m%56fn$^N7BHbkpdFW+{LrvDyJq(7`i@dZZuXJy76H+h8y3gK$v_|-`x;Jl@Rt~llgP6n_!vzMhk=8# zPCHP-Jl)|4V>OAKs%ftnifrzc?KEU;DcWVW%^SoH~NHp zUD4bTZGJ8}LB&O_lN`Uc75rh6(*zp7@)4VgdsNQg07{WqrdM9!qw-*!x_2^`nTi83 zFt}1=Mwam^C}wKsrU+e(DbewW0m?NrBeDb`gs_6`jfDghrFs>#3Z>D7h*da}q&ol@ zkg&2{1r6B4u=B@}4_ji0-P|$g~x4psfgpGfZepKdo@Lt)`!9Stk&iDd&lRn=KB^fvvL#Nrr@D}Y2G|sDMJDTC|+?sr* zFa5`wm}Vc{2kae|A6=*QOTAM5#F5U84}eF&0=Lc(<6=Uer6uT8yV8${W-QKTH$Qkd z#YK66p6t#vG58`Cv!z%xRS69QQc50m!gK1}oD5a7FVd!BX=kQ>89zG8^Y);~XDF{q zcTJCFekjGM%_{vho>Z-RjXQI2@_qsCxcbq>`7OXxr^4PGxBo6!l^vDN9ncE*9Q_EK zye}hhtL56y+d=E9?jh4#fVRIMT+dDD5CyL^Ks;rWf-}_yvjr8eVc69R?uaS9u-}C> z4cF3q+uR~eJFfeJxYEtjo|79y*WUFHQgAigpExCqQnkhLq2zh8>&tsyGAFH;j%R}t z!Otp`bEXP|Danmxh4A8Z?t5gBB(s$EZRY;{2os0AVI}aXeb^PY$u8L<%CTQ&w_B7g z(5Dn)>9E4ju0D2>(f0=axlw=G!d6FruW6Ll`>D=ypb>Vz`u$rOSWD?H`M@t0FQIsj zP*&lKN>aRf*yCubojZKJ5EDi#E}G~GeE{mkzI6PkzsA0jTtIc@zBYOza)m`H$`DsW z{hc^_4LXWuGTX_G5HM4$?+~80zL1=TlifEM`i%^OIl6PXkF{?o0J<{EhpBLmPQ`r+ zOzlJ%P%>_N)?n(bcOt_l7-Xj>2&OIJW(|EROnHD=ACit$qa-oEX zxMRnfLJXr%1io;odr<(=GuD`zNgN#C9Y_mM+3N;Om9|t-Pje_GMOVm7p?Dh|@Ao?R zAiA^9)zFM~-zKe|mP4y7eD0gmI^I3^d8DCO^$+4-(`5xhfkrw15`i+`HJ^PN|DpD) z&}k~ryROAnLF9o|B~hRFpmkpMDj^s2jvHD@w=mKc*oGz8GkIJPzO&P$;MWNxBpvvj zfl7pvz3i=RrSOs~l($QV6(nMhzy89YNr@p0Er>Djue*2(_TEb}M^oN*|D#7_d>WdB zO@mvJXHIYG58I{7i^yCmHr!D<-PIE=h|6cX&(^$!cKDPX$2mG2(!)SO&G|v;Q$i2b zymyUuAI=o*QyXmlV~PQ6n1Y;3%3gjb#H+l>J*y1D$s0??XY>ApoU|kSiNBnUK+Qga z9qj_N1|wsgM&_EoM&?pujT?!jNU<7C7DD;`?Riw*_W|G$bcYz6*c9qW@Sd-P%sp{* zheEgvWWe-CP5>eA=~c(J>lU?-E**@Jhvv_9vs@pPDJmtmE8b$ffWJBF!^LLfQydcj z#iulRRzDRo7-_aky09tc>&?_KbDJ=oUabNSv~&&SHa0xHo;jtaG~NoV1GZvaWXplu zvXraRm%4Or^1_DGFz0@SM`gi$$o!`>4TDnkL9wzsePZ6ZzO}^(?PnV6*~CXIC%t2t zH8eWKrVM@A(7;wmm(j_ zEgkg>T-r;`xw08yn{?Z9`&&wLTQ7~_Fzjt9a>7cUeH4z-&@|s~xrx*%H+{WZPWzar zmmus92CXQ2=|qTlZ*SY|&hklvn_3QcHtH~Iu2;1@n3vKh^@z7AnU?uQtPTm9k%lb1 z&;0qY{4ZGT1%J~fHfl8}8B@55Jo~s!HI>fiTa-6l2yrk<(^G;?sfjLsAw$MwecdPW zJrjZ^4Mhi8*~wr+D97QAm9*iqBy!n2|LoS()Rdf2Xk_$^+|WjRQEAJ4=?Y)%p0D)k zP-~Z+Wpo`Y`;qP*#Vpi2jS~hIRLD3cTIz{yr6nZN5R&!u@~6xp1c3MAfZvmrRtQ=E zBK5|^m^8zrnv54JhgQ3GKX(J|1DQ6+)K`KY8@ehwmD7rZ+%+gODz=hj7eAvdA|KBn ztr&2Ay0q4Dd!vcvPW0yptgU=hi$+cSPsWE{sMnRUM5 zo7&kn)p%g}kL6rT*$fxS4Ew)qn_&ZM{cUub)aToYh~rD<*4fD`E(p{f-y<1pg3&!p zS1xyq8Z??*bH#4fUEe+VcWu5^)s{|RLNSW`qox|>>evvASAjB^tyVpLU&W*CcGGu zR&R|kB%#FPMR{?8>tX&E#37kOmR11=_H0aoV4lkZRUZN+3l@I*ZmIF<5f7{+k|?!v zoDt0VQzgL8b2dR8#TTXv42m?)q0eB?ct6gtX#oS4A-*S%;t`dXeGMhujL|62lfqS& zixa*7$p}kA<;5y6J1o+A-eWU#xL}uZ0SgiJfr|Nd($*8S&8el@{qH+%4qgG&@$&ob z8kfn63vKS$`<0z<%!Z>8M$}>Hr&EohF*{4!{a#FhOSQonXibI{?fnUdfb{D%`|a%{ zIz#9!u=)gjbNlw+*Ei})%DqVVT=kG*(HLrh0&~=6MY~v~oddKhmZU*}PhWN^IL6== zt!`ZZks7%wt@^tS0K|qyu69CtlupyTqR_${r@0o%s6w`#D4uHNur$u6y_QR^*$D9w zbPBu2wA|ITz)mrDU3=Y*6+DR$BWY85te1J9ImePqKs^vIV#&|WIuEjqPKFAc?d;Gg z%;)u<9XpXn;(Ac#63*a_V2L}XVOjbhMdBMF2Eg1;akWkJKe(iG?X>KS&xih$Mh(P8 zx=a^QY@Ga34yB9gS(jmYvQ3G`HU{#b15jcj%qC{!``3sUi4dEZqez?PG{n}wcHE%* zc0qkoA0jPJAt{n7{(AnhU~f0kI!bPT-r>y$4KphGbd~dNy4D#HpU^1n&u3h4j}2AN zPvk zr{aH$#z>Ti<7b~P7hQT_rjkdHW}z*0@~-0m2KU(u$81Vby^21$cy|U z8XMCC&?FfR^{3b}9*eOMuA^cA4b{^A{9^R}N81iT(7Yj_qE(khJwOV4C4lo2`JgI` z7!6P}>$alQ&9BqJ=ieh1<^}@cW63n@(UAPgo-{e-M9bov0M8HGHXYi*k<9q74rXct zwz{3H-=1wVQIV@uNDt{uy85#_F&S!MUv2AA#5V##u)-t{^5XEv$XdL@7kL`G(|}_! z-Ghk~;2u`fNjj9*t2V7Fg8GTqqDRv6H~%g!J?-4@ zSnDRrGJ6(}V|9fKf}L&hCb!y8(EeF{Ef|{vxTPGl6-&znfVP)uSnY&3tOPpG=$`H& zRVQd+6@UbCY5FSenth@j9PqBavmXjQBQU;`&?*PV-Dr1{yAe_J603Ar+7WC$fQlz5 zj>tjRi?_1AZFE4=434EI^9Q|%7CEO74cXDS0^9koDkXL`2eV*qBYARm%fX3q(p}Pz+5#Bcd|p!O+9F=oYu8;+wq)DwFzj3LptYXrVBd%@-vxYBDT~Z%xmD0A+3~^5+2(6 zR8OnpEhWwl_OOaraI{Jlo}{keqk9>9ByACBHN|I(&E<5%!vC^s9X0~5eob)w-bXOo zs!JXXUM*fR-N92; zUJIjv{K2llrSi@Ti~XRK4vbcuduz;lf?bk|4%i$eRY)1PIm=eWZci<~8W|kWw-WoY=61IchQ}<1FB6*l3lwehj}7>i!ZSdodE+(z`9;31{9%is zS?MBM*n^wFy1f^Q3uFtF6dbGXdv9#|fjtl2{2rezao-Y!`d$BSui1MmXgWzCFMY*$ zMZoz#N9PvE^#A|yov_(3=Q$5^9)>xEYz%YE`JCoZ5z1joq2@5GkvSAO6gh_?5sBtZ zlv5!c5WdkWhZG(C{r)%aoA=e{>hpfRUeDL#fzQ7Y=vi@GzGV8CMxUx~b?#m)yHCJ` z8BRR+B_MbDim6cc`mUrzh=;-RD`?a-gjY)qSikJ>f;`g$fPJP&2D1OA)c^Oj_R2~E zB;tD&siD`*j2fN(yr#;pK$CNKdPhV=`KGy1l%`j|OY-0z6+9!BDTHp;x5_RMBI}ER7cboQ80b%~(Z!lVJvWDyC zFKYu+qtucN1p|{!Ea3;a7w0jA(d+jmN+fsZd1|8 z0#XzILnbo465y2jME&48fv~BRki*jXwUUD>MevwwL@0KHb&Ve1|Ec{WV~CE1Z;p%u z#ks&_K~ucxW_^)^E&>1R$)$!Si{KNz#?L5H4YHWbdt5Hity+ z*Fv5N|8>J@We(-8i3OrzUoH6_K3dM?I_6&>MHUs^WK`KU$cR$D(!Vyl;bJf`%Y2mycXlPJRC1i9dnAl3divWc7uYuN&ja5L(TzQg=D zZ-ru=7yN;nFMnb~-Yp&pd;RVCIPRik+E8Dh1nnt;3g7gX8p@DxM-ES?(=qWT9zS>h zg?Ptb+~L>EmcjmHOXzFP*l@{t;v@xp|_1Whw1FIwQU>~38atKb3EzV@@Ecm z(6rhr4LJ}PtP&O~bXz;OD8Armz?QxFlKnGHzhs)7AMrVckR^z^URA-yxW=DS!6*uk z_^M9wSLPvIH*DsW6oQ<9T41TbH07^{kw5QkyI5MA0mT59xBduB7BTE&Gj@aK!? zUm^xENZ^q7l)7rA;>bNjjwZ1Or1TdZZ7YeGg!MEK;R2}Z3(X0(k}vuj#d$MN#86wO zIUTIjvm1nu5#A2pmu;tuEoPwc7Q?*_ z+{n20!&Nh~sV3ZCYFL6&w~Nh*0)D8V=dj8IiRiWTK`VLgz^G!pO=v{cP@I z)v#OMc{jb%22atgN`5h1>aEn+8#Hz)1!$=M|y!UQhm`jS}4@gPEGNSuAII6_Bex;b-H<)tdfpWt|cXr$bb zR{Fp}8#O8NP)E>TV^ko?JKoD*iw~xK_-cl%D)hJ~4{C-g^orgxn$iXMt7iuAhTeJI z`1K6*5+nx1|5G(uHST@iIS_Noue_eX<@;`tJ9E%7wwN{fX9wO#9g4N409fSwHC z%$t0ATnek^eJ@V>aGMLje7dG}l-iv+L|IX=eHz;nis)F{E4{{u6|n9#ysg=h?&r8CWhZG^2VVMv&D zk>=Q%nU>pG*(%|*aQ|D7avTy9vN&^$5#1EgL2QiH+j@s$>XNo{@`SfmYn-9Z6rdxiX4gLK49-x{df);5!x$4 zE;*}?U55N#1DVRpad?5yQaeik9~Y?H>iMA&&%vm6gGg{BAME~NCI^psJXaIiOKS)* zcaHGSG@4iKKhnt-eiouOZ*%^n_b1Hh)uAZRqbU&=2LT##W>B1Z2MbA&AFPlU;tc*Z zE$7~{=jCB$2tytQF%ivK4V*?rlG|&0uL*+?z47nZG83zspCIr19v7`PZ~vK`pQZjB z4_h!@{7>ae6a^$o_2{uQ%}!jhTkksmOA&1byCX+F4n3UGfQ&v2Ki)hfrOUMNp0KI^ zja9y-BYhmy2PRmnU#$1Zfafnv_hv|GkZt^kZ#WjajSO5 z;Ie&?P}x)A^iy7P`P-@nepHBvIyarh!&P{Ve=+U)`o&d-W1Q}#hgfyJNxH|?SJ(Lt z0tUGQ>H5stfN3LK>$s4wG)SXosZBZfdlr?LBL8MQysS{Z{(&=Q8|315 z&MaoFz+{O726dE^&!wIF?(mQML_vS%%|B^(Un#5{y}{iq3>p@H*fP2-#DaG!+uN6` zTM_=#MV{?9l^l z!pgHz;6#j7Fwi*MaU&+t=dm(BIJ-FUzBRkPyB8Fn@8MPuy-2&)MDY+{5Aeaid$2N9&}riD@B8d zIw!7opY_@k>LM*-Vu?mCcA@weFea*ISh?OPd2t+`BN5b^DxPbkW11%)0ws{r{QY_t zr@&*n%&L8?_?f>0^4V=V~!jVt|!Ld#e7mpo}1Qh3@y)?(obaZhC$;MsDIlh{CvuL0zzzq_d5IVc>%UEoM91}lr3iRqU%=WU>JkV>$ z?CIA`?n?g14d7SNKRkB|?yua0d`o=y2>6Q=l8aFDF;{c%`P$H-Q5SA0+Gyk|39Vx> zXghJ|5(2~)t?{uUqV8bW+iIA%i^f)NXc!SLe~?0OyZAyD*!@^hZys$nQ;{$Jo67?& zHxKk589aMpU2fygJIL#wm$LpJUAe`Ns<0 zbL?e~P9cq&4U&ws9D& z2L=W{5}8zPB@|U==~P@~)ZnUkDD#f71s?_L1@lhweZFJ41Jdh3#!3Tt{*y$ zy;Hxx6wx~Z;pzlnG@3s2DQNuM_HDm0aP_>CRgDV1;`wKKs!uxW5w~oFyVcs+@)R0g zVx@Jv?}cF;lDms34ED=rsnIK~VX-K#8L-gWGGF))$hprzab+0qX^W!|G~JJ{Uiik7 z$xXv6S`K=ny$dG>N2ngw=wcvdphEPbNY1S^UK@a~HaWRI4SDgVJ4Gmv8J@k>YT!PZdBtN?|dpUwij-jod%}E6+RqUCYMSqb) z19owI-TC@=rho9j+EtyA*-oCPTD7Hpq)QQ`PBWqT)NM8LC9xOBb&`h!@I2?;m{Mhr z)K=c|w?s~J(Z$Z9r=xLu|8WB1$viK3t>%) z{pn+~>WW6bg@UM*Noc->B^R}Rl5pAF=5c)Hl64_WQy>(H5IKrGqBgWxH()6Z2#<6 z}xha`MJKw0c^KQWW!E6bc~Qs2tU7FZR%g~Buax5BV+290c9r<7qHj}<`aF?hP@g!IbyU$!lWK$?M+Rk> zbd@t2jM_uW2c0ZErr2j*xk-w7My!2GbI2-TLP{1WJs*w#N-aX7<5t5)tsiqG$BitW z%I=zA_^)d957f4{rk7S}lDE6XYgY66&AQDzlC^H;*;ftk*g5Txdt`bn^3*y*Laz6( zVschFPmxcJ4{vKugq{x+ve&wrNl3rG{u&OLX-3^+eIMMu<}rA+mrF`i+oMI)QAyil z+tpFu@$eM2`u|hg@uZ{c;boj7{qWp&yzW?C%+?nx{+x`Dik2HR1D@DfWa)ftk2DbC z{u)N8fdcC@U)o7U5nn#Di?ZJ@B);4cqY$u)ljpq*eanwN{zmJX(%^%%Og()sH>s6# zWhm7Kf6FoXw*W-GN@Iz_GvIQUtFdZ&=s^mvL-VKPV(Z zqh@kY{&v`tD0K(SE?j$HVj2OyTa0_a;_TCOw^lr4I{z( zBO+Z5ny=bHHKVMsQr6f>-qiBa(zI0kD%nn0VVuOs zJuZma`B)Ao03M&YX<8mf@DjyJrJV{@yxwxe)k^f9(b}>FnMXvoh;Zg``|#p=gr$s_ ztS7%t9N0`-BCW~iuh=y4kD^qBp0jXj^8LW%ckNF2Kd+mf;nL|DFRha`BTdxZ>_*5f ze0dqAPfMP5UTasX@}6jN+>AMsKU2#Vc4RB}70e2i+&E^PGH4||kkVHWX9sE?RRL5E z)CK3b{3akOwPm?k36vWU`A0Bc%5qW5D#7>kn`5NN8*xOCUq^h3`W399CEzPXY;(^5X1)bn6I_i2CnIqJjcmiHg8J2B$#1N27lp8RULJ*1`KPKVjXOAn@OZxJ^+seyK=X;yW3tEWBzNb6nYPi*~$B zC>fN>0t_pd2%g@g?*Z?#jd~-oaRTGisOh0}5 zyn-k9Z1>U|lqt(FxLEn-qi;IlBM9&{H5YvZ>^?v^``kf8V=}2y>@U*V&2O@%mWUkw zahviNPGI~tiAj7$b|x4m=SB6vZPpxs^j_v4#~!%e~L3sI_9 zl#Es2=PFVX4 z7~hP4CBEe_eu$x~81ehaNtW!(Z`wTVKcfo=FJ0CXyLk+SD?ZczE!R2Wyma_fkIGS` zZ`tfqEwHZ$2Mmr8`O2jNz;f+|%G|XzZTU8FxC~!G*2ung`0MAL$bxy~VrKoA3ZiFt zpqo(-Aq5%k^nasMqHD10ixuE@dATVubvEj!yn2>2WHd)#>H~U2gm@7<%Cv> z5Q#U_9EAw>@DZOrIo&tqZQS0hE5Wpe@^?UT^%8p;+t2jOWZ#Q(LXtz%Fu*Xga(n;7 zX+eV>TB~5~cM;jad(anPw|6UlDVK>63+7891n6ROCn?Pw3n%1w;IrSetql7wr^jYJ zhLpdW|~z>};5+?@*9kSR(0GF{u&W zs;%Q3PJXKZ-!=(M7uEioK5pb3)-#IIL{ZbqsXuG}Ccm=G22%sx+JF^Dq~M zw5;TZa^X2U32ZV;*+Bk_&HVhxxXfgTMX~*>scGd93+0)Y^RS!q1FdgmmQcAmtkqy{ zgXzR8B3npJqQ*TDMp zQ@<{_$|}W}Y`p0ME2#O^Yb)7?aQ}qeEY8y%b$WOWLL(VDa(M4aX4^tv#f`R)*lLAX zj8C5Za?{4gTYbu2?yw`kI?M(Nm$1bCn?L-3Lw=3?>Xwv>knTR8qWThFbXV{&k|VIm z<9pvs?CLdHAtq!mwdb3grYqOmxH*WJnvLW|koRci z9smeLC8Af1S-06-A7GLK=9uiLFsU@n<-#@y^(>JxtPcBlKM4a6UzExOU1Qtw2L9a0 zNSaPyxe@aQlKV4~Yqnnd=U76fMVj**(x*_)Yu&AIas$unQ6T1zwqTgHF*STHlEBTf z+=ZoW_X?6Rq0hNnz1?Oj9t~W!oh3Iump(0y3t22l)a~y+OuYzOK?!!Le)je|BmT|> z6wWQ%+nX6dmwi`!@1#qpjpkZqH%kTRNvSy8ajw-g*j>30{saNeuXcr91EgIZI=|i( zx^P~Eq{h=_5=eaGbmL0QP~urzWZKP5hj9Y1)vIEnzOipYVM)eD(_6({$zsC}OKzrv4O7YrM3;nnr z0W6Nc*dTQf)>lNnKT?SK)H|#2FAndp{O&teqTd7Dbi%+889h1q2CcinoyiBR{lGuT z@WSN{16wi@vk6NeA3j3*IvQ|=B<#Rh%CjVY38Hp>s@0s?_-9rc{;X7e+a35;^o@Ij zHe$r3O5oOjsxcB=vvpaj@9U3FJ+wd>R4q}?Hc4Xj!6DgQw9|MtY5RVGUx9j@lTj$n zH;%lX0N&KPqoRIZuw59O2)oC3^pTK8R(EhM&pR@-^9u2H)R=trMoFoLK(-+;ie?0x z0KptKxD~T+Nh9Y-K%}C~oyqGM;d2!ig{&7aun)Se8;K^yq4nU?78@{(6Y0g9`45%g ziKG9;Gc5tbqcOQlFWq)sXkR`JqWDMF&?p9(p?cU^pH#d$4a9A$et1sYoViBKA-Hjc z0K2TdKQR%2YPf&h$35~cU&<$5S{QX@;h4gNn;Y!`l@G%?Zt=hBmb30>g!1Skf%hSunoIB1XEuwm`Y8Lb zQyTVl@g(lgSsTL_--A?DulEXC+z4oExo9U+5EXU)ztPJWTS79xt0;R!ABspu%Vnps zX15|Q!S_}ePt9vYd=C6UZ}kv<{DsHuCkgScG*t?r>`zpXnpt};y)N@ovZg3gP!qGQ zMsX1a0iJZv@%Sf)K?^PBPBZ{V9_(M%*#)1gKZuOqW$b$la}KdqUDDFhKaShpzW)L+ z1SAt7E4_nSjl=S9k$7XrJ1*|uC!TJDXb9n;@h73z-5wEuN_~&L{k)NiqN#Bp1m8 zp&}JnM`O;FpiqAbG>Okb)$aY+KVDqo0_Rxh^q)kzO90=yX+G-zi$8W1SubS+^ix4E z1b1F%cQ03Hv~U`?WZ#v)iC4Q1z)~Nul;pM*{aSfVZjC1jAny@|IK1iH&n@FgAQi** zG!noI2;SEi)g~A{2FW~6lUii9KrfUBik)iExCGkc`jg57S^u|{1Sc~7LBG6cZhFt* zqM(E)uFEg%PbzrQp*c6U6r_}nLvBCR8FLXTP3@ZRIqky@?wb*W#mW>+E4-~@)=Psy zM*&xk7*r>?#6vhVBj+J=J6q#_S0tjE7kmMMw`h&%C8q*CYtBksk3}!e(7cAN+dpil z?5*woQvwB&Qa#|H&7XuSpZOah?I^dORLp8&BZ-qrV&6ZQq+49^rNvWdkF?Fn3>wvO zfv^5y_mtqlAV*gL42EspcYTYtj)OZaSa^)KXoR>M|^!jdO}Yw z4V5%rZXy+bTeD~`T2&|Sjj@2dsW%m`ktv3jGeck$tWg}n02J&F^eB?rZ^t=XDf7Dq zy&F&N62>NVBxY8p(we36=#c1wl*L1nadpYm_lt=+{jdH8UrEf#_9~s2Os7Ax(LHva zJ7q4$m(M{7Vd&Azb!<<*Up)OYHmL|~QQw!VVPiReQhkS6#9*YAKh%4gLOYVR94W5I zXBu7kZ|cABSGD%TQJIL+-VaAV7=}`MpgaSWK(>v%)vX-^#;IWg90|D{RQH&Eptt%P zCzcy$F-P_KQs#6V$@BM9hu|gk&J!xSz$$fID3sA}51j=3;*w|s-q|Ktov@@!zh(v8 zkx}VH1DpA}vK`LmL6>(Vj<79Kfg{%y?<%l?0>A!2r^G{Y*4+0rVGH51@{sO!8tFKw zkuvkeE!#t2*b&4dc*H{CPeW<~TPZ`@D3$OZ^glJApgShEirc z2=JC?r5Rbsz1kim@R~%p{DK6=f8ny=D21Dcq?@6?kmpTpY3#~HFf6- zG0I#vXQf*){X1U!n92D{>^oCGT-TOCUOJEBy*?O3wKGU0EH|fjS7PD;44Wpxah3Pbl4NTjZPsk{EmF$M@X`UWt27!7quF;F{~AV<%oSh zC3ny9lXZ2esEwk&?PR{nqr6#c&;?iQ2ML=SQ71j%DI+`(OuepCN=(VGnxjC?bSniO z_+>ySXXeB1l{lKhpBv)`)bme1=}i9;i$fH0+#r`JaVRBxP^;>*?B$L%PdG zkBZzv@}|byPfand7u2X~6yP0oZsCn^hIS>HJgHrD@ZdEgN3M4c$p|Y9#}wkJ$B@Y- z0>j~jqTU$KsVoel{JPxqGC27!-@&!HK;l3ywowsm=-|BfS598O!ezTLUGu{rW3bP$ ztoGf@m0a8MoZVCH&E0p?s1t+GmQ~k{3GRCl*E2sp5O#6!h`z{s)th^ly#;=#(>8`Y zwBzET@g+WIUK)bej z`KEL>0HjmWY{73_2hc@}=M_Lr!we#1Ot%{+hXVCtmn!C$n&rWJF&o#Gi~50kH{9Lu zl0uJNcx;2+&#B2jXGLM#A>Je*oGT1Dt>$wxSBWAMT#YZ{Td~{D{2~mHTW$~v3;HvK zIvE~XZ|cFIm9wgYOM(O?)B4IQb2;&j{%rQ_bhW5+>Hwnt{xg~rhtf_ zgxsdhIAct*fsz%M$0LFajRvgI#1KB5!pt= z0jJad67EIt$#S$#Xepqd*zpeq<^U8Mz@$%VN3Zeld%Up_moctO&wA0UBWmD+mhbyZ zJ5Q@Iv{ZM~w94mUwjor~B4F!P#DeH@m(S!|^hbj#->RKLuEB_ol9Swo_^qfuQpe)4 zMhNNB#XsY{cFBgS7x;`rK3s~Qzt4;qx+`XE`b#<)Q!Of_F9=A-dxeGzWg!P2*|WoJ zj340J>1TPTsJBsW9~G}BoFbl83XsbXOjitdrazlieQIS!PtIlm7O%p2oDxiF|m1z{k6uQ0xoB7>|v35!iT3Buzo z_`ruaL#ipmjnxr-O&3^Sg!v|#$$eh*-KT1NGFXPq7Q~uR_*eNg>zchrq0~h9R>~Em zYl=&AiBm5(Nx4i+Q;`x9UXAkhKgcpllgFl!RLe0% zzG_=WgAQ)|IkHD`3rT$ZWzDD#&vBB4zoQ><(RhvTK@3dw_BlRxrftnc3jCm73Is>>+C0 zh zGXZnlXaqtOs82Y1dBqNLOMF#iu=g?FO?8O!LqU}ZQ`4n7udi~)ez)5?<`I}<#z!=L z`Oe_C%#H>!_RbkwLoVB=&@Mc$W}fSCzM8qw27Fy;KNSg(>01!wdUxG7J!PCr-vm3Z z2GZ>mg;lE2WpIazK{aF2Hl7@;(LddgZpQsT=>bT{&~S-J5cugD;ietJ1tK;S+&!u?F% z)9>-vmluxjQ$@0;iUR*Y?rW9j>r7)1g;I3jdX&z>T<~bJ^b!jnDTtK_G>z^dRTQ2) zhblPZs{Y5_!<>7%4)V`;Q*H0e>rd_=)BU_YfmC@)TXrj#$*Z^{SAr^S!$$LWL$m~T zT9B@?&mnbmj*;Cn=s+yTzDl7vA*i}ICD}Oxcw{8PqYSrA46Gz}uNUN2O{O>i-|PsU zk6L#Ogw6-fQ5}_KYsfNZ-Areh-0yG8ar$eUvH#w0rB#@+k0 z@j?F|hKYcWcXEsUOT4!UW&t9_a$E+_5nJdRffFNNtHds(O(3 zCFWI4;iU&ih08*fn2GSZvrZXzHPbM3JYDhJmhfyZ?VMc1<}rz_g}(3EfgjnFdtg=O zO1wVYba*fQ5FX@z<%8mlzn^0JIJ~FjQu_f{ps+^X(h`IBKYO#K$Z{V~U-zqk8WQh2 zOn-%NPFu%Ew{s~#x~Ngd61h(*@{NEFNEf<#YR zTyBF>RH9$51ybXX)U4;Yv~oW_5oSFA<$of>37s)^A3P8(o8<0sc;#gO>WqfG>}_7+ zPt`R{b_0kavME(|k zt!iQ5OrF51==Z5*%47*A>jYkYmfLbHP-LJh5fqPu+5)%YEhGVYgAAcrVUQB?ToeQQ z%DQKb`{<~zYT}?qUB`xRe^m%$<0Z{=|Nfv^jl*3evo#tB@1Q-~xs`p`&Q*xi?QggQ z+%fpY4jf*mN`j^6j=We!H~SqTKXs9&^8Oh4Q($jpb)sSJWdg%hqSFeZ^mOarh%6_1B%GEa% z5=Nt{^eQcjY-pCRVFJ);vnt$zQ1j7$@h|&ybbT$JaI%a7%e;qh82($s zas&E3@khd(4f|2b)r%S2z65r8Qww_;={h>ZxX2SD9O~hZ+Zr}Pr#>}1tj6>R*G6uL zo3iJVe+LzS-Fs`g$uRqQj?PIOAw0$+}gnF#{ zl3ND56K-y4Md9U&hy3+rm+h9a8w$=}yHt-fEv~GRa40&t@LiS!%GMXg*?)3EUkXhx zRsVu|-TPJ7eh^|6Xz%S8sMep6CVVt^B{4cGMB>vW(O7mu5tz}*Q9KYbP8@5dVE*ct zl*<}~nFBTdl%))srx~5P9zJP!fS$fsWaMbPIg!LSLntjF7@3etEzD52UZgsEdkmV; z-T_n!(gl(r%t$Nr#xcuiaHH8r6~A4zuTd0d^BcgS_OM@B0f6W(dH>Y=nfujyY@N~I zGe)+S$~$$ZgJO|r;r?%Nc*4@E3P`aiU4NDSyWix%36z$v`ds_=WT6lG%%e1xwDa2pv8#Zkhm71gYrB{BqtMYo84xd zXX>8loH%vPkr5#RT-FXZ$riy~4TM%c(j?B<=|tvjUnR80apVe;KTKOl+TuZI4=r8k z!!#1DXN{isE`yN%VmtBu+Gs4=#?%zA6$nGg>N>g^8FBjLcRH6!~)~^MKh^?WNQ4k*2b)dm}jd@}-Zp4W83%)u-cifE1sr?#Eo|p5gQp zw}=1Sdc|Hk0eK}scWvf%|2dQjY-MXmIu2VZdIwWQ2Nrl{viS`Q>Fo7yDLRMC{rll(@742W zz8iM-;{*s$y?-Ll`Fu2`C_#@&iaR@t&?sTXLj0-q3=0GAbHTAuFqn^!=Ag~Ljc|2mD~OCZPgKWaY`esCE0GY zx;Ht0y|feab_U&bS(Y$#b*Q{aye*wHWVMnw^Qc@H-Z$s|c7L5uXeN#uVno&Dl`Of` zsC5kniVy4&xGy4@0gv^h#Lc=f;u(96&Qyb-vFSQa>;?Pn78Q*I?QgfJ)&thJw}zDj z##1om~rG_c9XzHcLfqF>(z-V3O8C1y;}^JK7zB|>F7r3vsm?PW+{a;A4F zmU$0lFWIa7ed5g|1()9wEFK+wJE5D-zXE!y&(g6)s(V?s$#`CaNjO_p_5&Kf*n zm3w8_{$Wm=kWT%w9y}KvoorJ_YXj~dyCM&pt#w^Diy4YJPJ{(B|7;IDBY*o;U;#$* zihKv=ULrjnIpLY-n$!mpqjg>++1$IlrD;o!S1?JgmSi$E^8o>x*l&D}CPK0jx#IcJ z1>a@L$5Y+@C5ZqG0Gw7IG@5$TL@3~W}h>PD@aDjXPNb*Qpp<`H@>1$L+GDZTUVQ8izsR4gge4Iur*z~ z2Fh7_Y{MZpt257Gv8}yaqfycDLH29t_&wl&iXqnU#|K>f(BDI6&g;;?fw`uL zQ@l4~&o2sa7x)bX4pnGIbp3qD!hd~DjfC4y;6GZBVO1>60}0Ouo^@th?YRoQjE)O} zF87_-q}QsA1r8_9z1e^?)m&{DTQ@fXaG%oFa{wGI50gNAlR~2h3!`D-j+P;rSj@%L zU4d8WX_oDLAN;DK>I~gjjB{-r1W86}f|eL2?K&R!BD*Vm_)v;ducwC9(}?E-=KOdW zAEk7D@#R%pojPgDvb5G))`5fVP!s-z4lZu~e6c=}o3{g3>hXcFU7jVCzC#3MLs+kaT*$gmh5E zS%J4m&7LuNl7E8m08}Tecnfr@_Y#INyogp7$qnWa&HzvGyuYaR+$01Q9}J-?8%$Jt zA`)#u#cHT**zfrGWi3dUWs_yzG%r);eV|Vvf4C~v3bVUclqh5iy?j3DC%$(`)XRD9 z)k@QoBkm&r_sl zph(yEN+aP(Kh#tB)dVu@Xc>H!#WRm^S!zp;Zb#jiT)yl`^`iF)qa8VBYaG@irSJ7u9(PR6RkTik9AeUEO$#% zlH~$@mD5fdj`+j15KHiDP{b-47}%~IGD7RM|1f(h!C-k3Nl*cMSjE0!qvmc)OJOU_utrz0 zQcvNV6Bu7AcjgqoRKXF>QG2E}T>xWIX;L(uDe6#5^GhjW$-bSuPUYLn14a-AI8jEB z3;=4+J7Xk6QF3ZORS(M&RS|?gRbCWS3N_IRxe27YrbWXqW9NBxXrMiH!0x16p3%}t(vBns z?#?LRKPfl>quZ`<0jXAllS)F~w)dTBIH@Mff;#g0!-8C`&-e3s9JoGq0Dx7eJ)rwQ zmy2eRJo4XXQr&&xMViheSEt&bQXiT|W_h}pM%tH0skhP^ufB+sz6qxyYVUU!p4To{ zoit?HxITe1@v>zdGXsryI#PQ%r2m%nmB*ZbdXFn1bGv{dyVD96;>h7APwHx46d3lL?9!W$Y%EF2 z0KGirDsvA4-SjbL+Vi8~()8$eKy(u;*O@B=n3~h>oxCEiZQ{Dh%L=VbPZ+(97y-l+ z_?@QFAIVgk_wi7v`-H*&q8ob$MQ02d!U>G!c^Z#sa#rHV5+D(SgJ@c?bxlVcxu-il zOfhPJIy-781_FIf;SNxg=TP^|l72|w&u$55e&!GySLfxw00W+M2($Sbi>Je6!BsX) z@*nw)MtL0&UJ++aN6e(pcuDoDUlDGBZ?uf6q!&G@N%@o+ z`z9$9a3!9TqSKM)^c;dRl=R}RAkuUyv^F*<#aiR4)&fvL3vd2ZN3K1x`mK&-mgR738ddxX(rEsiUp(Aq_P6b`KGc$6(qx2=f<`s{RFQ7BHPX9Cl{jGexS*4gW26Se%{d|m_mA@Q&0}as|via zSU~&4mzfgNEKs6$^1aZoe4*{I-XBFTLGEQ7#PO3sy|%R>^<3OImZCmyab+K0L}*fx zU9*T8C2!1waRr@P$QRh_aiQ{WsJF59TMk-{+hJCcbjJfcB$v(THXOiV@A}1ZQNU7P zj#u=9R*vB49wJxR(_%~Ml?^JwX7l?N%2)XKk#jjnEv1J>%AlY9KH9cTNt)NlXK0@5 zmM?wWTv$;H$<(Wj!mOc%XLrRz6(pCLS_eZ~Kv?n@j`ENCa@&wy4!OGd+wCZO@zWu) z;D&{@f{Od;uYRW}6R8pi^9zb830%(qs& zC3X2FU=EM1mP$tpn?xFCR304UYO7|yBg3(=a~y4uGkf?;X5XYj5&-H)&sLMFJl$p4 zqbS(gwfb`%`KwGj&KUAv`;kJIeAHh9xw zjRHAchpB{1iUz}m+O3J<`lT8v{`PJFm52S@wTfHWCO3~Tdc6hQsoEoMBB&GSCe2eK zJ`M3+POKlWlehKa;8{b<_(vR(`m1|w2uL_%QNG2wl;fGB7YV!V8&yp=rxwnccII#r z{Zvx~uN$$f%L#a+Uu%{kQnTtR_jTCm(SP93)P(^`iS$mrogke})i4!T4Nhyx7_z7c zTdW>i^5~;NyOR6i)Lnv_4zZ_^!Totn{`-Eca&sNJv_1}EU+yGS@Y)8J!c(_5oY;gA zgROu~IK+jTw zb<=-$*w8rrd|;=-Zu1U5*X6?IEFT5}R;)X37o)VT#1XMxnDuVN+PJBSd9UyY5g1&x zih=g~2H@=*Pp-PqKvI^UM`@OUX`bwBN*a$w6!>WmvYb=pg^#qZZ@uhO>~sGlm~K( zyjSgxg^}bX%;kb48!g7K*CRDmBbSibUSBFR`Cj=r=%z@;gUL-+e^LiEcxdMYLX;P; z2Lc|g7NsWisat0O1>+km!c!iZR!`$3SR~TCw88GOyvH2EiP-1TF1|_*uzXi^@gN5( zK~sUG@?5tq{t}VH{J_)(gG?s!Tw>Fvs<^Zx7lR$5SF2=|+>2y~w*3Lh;E(DMZ;Ph`*kmmDY3r1Ax%q%flSA8?>Yky5o@V zUqCaV^a|%w#J&o79IiQ;ZBZN*fAwLnn!djMc~q0iBnP{A11`EGFL1NIFun-I_4y7l z@}YahtMHF8q1R|8R)L~MeEVV`h)hvQYw`7CcDrz8V2l%so&4oXo`J`DaO9x!6ZW|l zK^3|D8o�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

(gC#t6j}8FtEk^|!ny9)|y+i@+(~%n|@D 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%0D)EFUguutc-7E|TQvtf6qVuH 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

bY2I&n_gPz*L1+9xGtBnqq@oJ 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%0AdMqw>IASGf*9D+ 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%0D6I;?fEaI3iQ5zq2T~0$(+^@Lg;koA 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%0Ad2?DL0Ie(|#z4oeqlq%(O67$w?x*%^-orvx- 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�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 D^lOB1H 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

&Ktbozfbi=HVt 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

nE*;;(F=1oJU6>ivAYDSDPek{TGsXx3A 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

Gg>Ga@0M9w3AzRQUwz)yYzi?smYs zhW049PG*S`6Xy&o^SMsMV+;6}uigQlkjE|syqA986ZFFgSr4r^DxX1NM`Q+8InE$+ z8~OG_Ego8Ev@`o3g#!@n?;pn*w!EZ~~+AfHLo9Eo|o3AY_c#KE8L z;o;fpe4Rh99AaLYMDL1Q#DY5>_&z$XQGX$|<3!RkUO)JV2WjsSL`gjn_5wf5y`XQ) zjJM){P4soUUhmN1AXVOxxN)IO&%(^KC_ zmY$x75rt3Lvg4GrnQ{6fl=}P;3DuVLWMP~Sq_0?7iI+d;b8t)l>2ptWj);+J)SlU` zg37iGS{8!UoD2b3#3L#is;-EEW6G7Fg=V{Gjh;+8)1^MH(256Cre9_YL-xy9>Ar0L zmV5f7$IuenFT&}i`CETOvGdAF>5$vB`3Ho~fPluHCm$i)wxflJm;PpL3vDP@wJ3BT z5^bj>;w`-;?m&WxjS=%rGHLl5#+p)jFO8EP2+}Q7G^O)vpr?rgE%vt&(!Szg+tB4K zk#-{g-4Gx+2)ypV)p7@-jG)NBo82vl}z>Fn!kqe%afnXt8}2xK-3OS zh(=LTP5>cT%rLg*x+kF$-39{*dd_G-Qe)e@vT4E4@Dq|P98EG=&^o4 z9xByM;X!2NceARl8+<{Ft-w2&9HyeAGhVj+zwt5HKKvna=1upVi zs)aTHyGby9hp{+TgciWq;26&Svf*My19N%-#~4pzbdPm>Slb4*-3T=wrYC;SqU|

1~u2tDV0G=7n{dq^^ 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

jVd{B&=zhSH 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 OlRymU_O7GQu>S*SYrCre literal 0 HcmV?d00001 diff --git a/bsnesd.exe b/bsnesd.exe new file mode 100644 index 0000000000000000000000000000000000000000..272a2b61adf60d0ef8231de261a11e60169f6f36 GIT binary patch literal 489472 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

y=pXlePyB` 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

`R*}1kIrMxCUqv<@)=^6 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 z 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

<)FX*U=DG75a36oryrR@?YA6Tki}*HY9W0-uYA zf3Dj=NsYv6{&5*Gli)|GXIo2aoQe!E4KH(aWK*)$^VJbxt6MM+kN{zjV!Ad~L32!{v{Q#NiGm)PKxn)=L>1sr??} z-fqc-?dlx@53&z_w5h&%*Ra8t4Kkz`6!RL2T>`3x6G^h9^JxH3f<=sU*s9Qm;LnIv zh=|u3ze17oIV@BYtlCRIS3stl?p}3rS+&L*Q(~kTL~v$N^{(9e$%xGE`@j1eo<&zl zH;BeTAUu@_jT)VfZ{QFkzV=S4_?3@$K(er|5Z1>k*^h%~Se?1D9}_|F@>;`Jp!IK^ zpv8P+6%9so1t={wp(V*Y`Nzf|Ob!#;#0Mri=#Erl||^iNp%jdOMv-*4Va$}~mEpH{rL;bhR@E#OYm ziIXvQYw^NoCx2SrN29n z*=7Dm%?cRrS$WjVx5m4Z1^8i@_;tqL+)Nf=U3pq~q@<6AR`OTB9g_iaN4Dca%rjRz z@@l*c<~-B=GmjXtN>O<4Ehq6M(Ri=m?7~arn0XWOs0Uk3bEvCr{qm(0c&vX`VQd;I zcug14hBzH13-Q191DU-(ZDaT>Ho@kdd*HN7b$2oas=={Lj;nUNb^Xe7l|8xJxb7jV z+8tdm`0Gk0QxtqXBoUGRae#q)*+^TueMUBcsMi9p*fR1 zh-}Dghdizq)W>RX4=``A=+vL+429-*zXi2>voclJ$#lMJKZO8&rOB4oHx}wsD7iDk zKz^-McgO?D;A4b}*MD|@kG$dp7UW|vSX4qLkJ7>(_=OtWmK^mpp{*I85H-B*!Z)?& zG6dqd`qNH2f^VS&yMFC7*Knr9uQ+IP7NtR%vU-H(AyD+xpqy-R_OoZB=)ju`aBfV* z_ieEb6fvf?^_aY~LYp=)2{a@SX&%1qx53p{Sy^QbJPzj^Y6Y(TopR826FW$wWt#Kr zc10gdDF9}O*@i}p?0aln%-i9p1oDHZ*G3YvVQtKzbPxClR2l2mQ3H+vuA3}b9&E#G z27_P3n-~84^z-L*1)ejV{dhAt*Ncu7y?Rs0bPIJj&=n^3uprkyS4tO<&8Vn(_~9#NRNHxt;XqGQGBA?8 zr}XtjX!x2sFHm<(f&e#SR=4Yq!8pW}C1pN<7r+(AP$)qjvRht)=1=Hk>4TA7WT7-H zWjyVmffkk`t9F_K;+N(0DI*Ta%%KB0oG;bVc!754YkzHtF~8LyAdi&Ob4~ITppS*d z)fLFvCh#TjQG^96(K|U$RrylA;l!P|YeC!3H!+NNx!GT6xD`G*`W*_ay@u=F@LZ-l z`tu=@;fs-j{PO(cUZ?$|B=|rjqafEv_7wb!dDBhc^OqX!wLO7$`cym>wV|df$Q{P` zmmC7nH44M4Ladyx0v0a2yLPzVpaRZ0=E^j-;*1l7M)3rW>*Gj1h(4ZRn2+Q$M{@s7 z`)^ai>D4H0HlclNiNhvP0k|c^O^Xf1QB(uOGcqj(@lbXhI+}GcX(8jhi*WVrRz_?L zRv_kp2%P@56cNlQG0XDs97~j)`Lo{woskV!C}EF-zRi-#bmA?%kv$mci>Jjn8Tc7- z5Yznv?BUcc2!bOI*MfRO#1W~L0Ep{b`Min}WUK$<%$q^|D%X!@B0WIOZYfM8si3fu z^Bvv=Pls>#IYm0bv2Z?wDLQ=~X3Re5)BuZwWm6q`U6EY`b1WXP#6$UNp(FG4u|2_V z{IkEuhf-6CIb()u-8BPPgw@(lUF3$I*jV=8TV1}wxwzZ+yKz4DL1z;gJ2qI{F4WV;aaFLJix*z0X zPvSM+zPcq;N;D7t%0xETf*&UTpyT-*cMCKAiH$6AD$I#T5B$EPJHJDdHAA1_ke@6doYeTH28;&9ly(KXP}9Ppt_Od zSh8m@VP zR+(+jZ*_jxNfz|^UF{E##3U7ka4j;_Ul8!rVp{A(mua@Oq=|s22%A#W5d_;ZMwEfu zuQ&M_@I6P*-~A&|@;FYaK`lfaY^E_4f*v}sTZel(2l@N_OR99O8%p%m-Hi(tSxPZS z1%5x=w{f&mEH&9tQ3|+068TxrZ@DkD%Q9NqN4jzUGYq4cSJeQfr}BP#<(a`djl&7+ zuwJl1=Elbjg@upu0~P{r06ycNVqdUiTsQd!>A+_cgaUDty3us@F@&ntBXynp6v%jTnIktMLwB z{s6ciw=>kfUrelHAAt|Gr!I9)PeM%Wn3HM17~cu53mL1Wn%TzlZf2x(?N~<5suTg; z(xt}7`v~rRs?N1+B%%WM9nuH+YXad5DAPY5v7dFl+!vg?(Rwl<#|Ybl+Uvx#e%zf} z1*kpW<8SFRS~~mX1ElxHbe8Oxkt6sFBj}8v-cn6 z7#Ez?u66>{FKiP2VQ?ysPgwmgc(LQ$QQ*O1?*RCQOerKvIxvu#-{H*NWTu@G1b>Hb zJp9R5`~lq8?oKELkJ3czkDkZiA7ie*1QCkix50|}_;ZrKDy%?KY_Q=?PzLBYh$FpW zZVD3dMyHE|5)ugLU%-dl4@zEv8<`k3?N(ES^9?%&v+jR$FwH@L_pPFX-cv}gwFM%X zkZQ@Ff%)~sT+_!W`ypZ*&*G66X5e@sMzFX`JDOjFP@WsLVg*(Qax+C|&5sQNPyZEC zV;_1SDXMSdRcBK+>Ok`pxhmUrVg=T(q)yVOah%4}$?elC*s|J>-V+L}0fovya~oKD zeD!UodqEyFA=JwFlEO4h&vxy-%3#=FJ`oN4{ns29B39B$P?(%iXclAU13R*7=0N^p zCxO)%7(6zQKO)XeEI#ev(KpH>rR(gqI zk4bn5m2gMKKs&$r_;DH+!$!78N#!P2EY*sp zg_4V@4uf)l_HA)Ct*fA1JpbB1k+doBM~S<01wUMTT`tYyAd0WeneK6yM!Wn1-}&ggmZ{M5zKGI07u zxje!zS?+M{WrI1Xl}wdv@JTRpgow5R6Q#k*oK)k#px2;$UufiQuuOg>!O$8!3DhPE zYu~+i+Hyor*hW@HtenZn`(tNEkk3Qx0rEuoL5I@z$z^6)G|Oq5^Ao_c(mzwXIFYh> z4@CAFSzWr@~C6+%w|*wu*{C=(IT#Fv_R2lyA+7KKKnW$OU!1 z0e%Gr(jV%~Sqs9Bz*&~__Fyg6iWl2PAT2u+U5~V2WXjB_iY>~==VO_7lrL+UEBaLU z#u3yMeTeZbKsYgJkPDIJyV5nEDVU0OQ@}DoRt6kQ!P8=@KZvsy+BwE}lCPQ#D~C9s zuK!To3&1%nyG`KzSw*I}!%rELYog9i-Ly43j!j`0ZyCy(b=QX9S@oDvdPSXP7*Vc3 zWN3ihw;s^Uy#>+Nn9ECy*)qW}z`l~wNQ{q=%W=r2jr&6xGEWhxhpJP`O<$(<+PwE* z9bf~K8|zayE$u+cJ*8gt zdSkj@5w_PYV5$^v-*cMuY)We?pGC3j($3L37x$tncJBRW0f}B0(lvs4Z7Z+!jLKVP zqtZfgT$Zn-{=T{qJ%pvoIn-a^CLu>&;5A`Y!s0jGPHvyC!R#-UD@z4h{lsrQ%i0S- zb$LDu`_}}m9vsBvL17ugW+&P|0A=2_9=4mXQ2sr^{51RE3f;A`FW9fG?V?&N2OXRq@Oxil;Iy4Sube5} zObwOg!2ae2DPgb;o6Yi3p?(Jn)Gef)1NAxk7&vJ7rdkf>P+o!i#CH4BzoUyS z<@bF98Zt8AXEJ&y%F-dw>hwO=3f(7i)bR_FoqHtD%Nf*bn0+r8bHCuZtly@u4@(jLT!3kJ4LbT< zMl*UeO7{C{S9C8TT%l(kaW>0*zKvA}OGC9k3jzL=Q!bsA5k!|xPlQr)K%eP6H*4Ac zJr6J^?yXt5P@RR^tROdor@lfF@!1n@dYST_vpiYqR;p)sAH2Ty)n0W?b=@P)WY#}Q zecsx_)6qYE^PL>h#Y){!48n_0XP)!|UI}&agdkT3EqFjD195IvZeHqWg>)#cNOP9> z@#+Z3MDv0w>vYue4Z%?~+ z*1jouc#wVoza{*!zhZtZvPn~QwvQvw7)F!(S_BBPTPl8dP? zKc$&2s2Yrly;Uou?xwLmD2t?^+T2yMV8wD8$P5<$cZ5R;|6x5l75vvW}W-^GU(u zye;3%gdTK;Gd6nu@Tt4&sBwC|E0Wb~)4#@gDM0LX`~{wR=~}78L9{UwXjN6PFyAgE zQ3VjAC-Sfeuc`ifvX?lf1~lG%!W;4O%(2P$$O%iA?K3Ov$31jP-!5M;x?9fUK=yvo zMcdA1TSOZ4%6nlDw8AJFtCIKQT8K!zz#kC*?KHyE7_SEIF4Z}+=DKVb*;HGPH3P+n zLK7;rUGa0{} zBYzRh9kT~dm^W8C`4E+dAtt8~I)GH_sq;H>clP6XGM-VM0W|>|8QCwLAla`RLEb4O zL~J8Zrmn94*?@Y!=bl((qgm-}24g3~oDPZ`A3RWv(1MKC$hy9?ooZ0=rTE5bYTo)F zuIwvxu_bw^h}V6NXB^(5lcvb@4Hp zRQ(=M6>Pjf<=O-qs7AI&%EfPGUE|$V%|l)S-Ah3rm7G72rUy5pbq8@IzGV09UYTg~ z_ooG^z5aB;^>+f8^_y9midj%TT~6|knWD~LTgYUd{ji7o_PXUq3?CY(GkSvml*bON za%M$vm=|vQhFh#XVkWEOqr$`R`pa{ZqaKUkeSf1qeO&_3dvx#viMP7D|5@ zQ{=rgLAt0K^UnT9w#hFNOYdJQvu9{AULkPoC6b`Cc)*TUvw?tvqkQcKJJCDTQ{0;D zA??s$?3Uo7DdgdO%Gp;r&qK<8Ixz5*KQ44gw%9g&`apENcZkKN4>wh-DoexDU2`Hp ziMh(GWFS1pcu7UL!lA`7Z{x~1@~%=IE5lLlnDfDpQRK#!`t(-0JxosVbe!jgVXcvW z1nCL8RicqgKO3tSd{Gs}MGBpcSA8?jz5C;rL!6}?Pi9jj`OCT;>Bj&!+4&~LZ(Dvt zEU=BGOM(CqE=slBs@x2oG8k@NU_+d>0-i9mIQ_9zE>015lA9HtsjB(R)=}qQo^*pR zNyg^Iqr{_;Bx^ET+JT$3o9N;q>@mtEyuDp~{WrOc;-J7&nqvO|e~97Xw$Y{v#iQ|v z(@DF)32xR`Eg+D|ZH?*xlb=+y$bDqll4)i22QKx6r?#GOz%gIh0frC z{_!N%zkZBGK4B~3xjiF48)FH*_^*#lwg2g3s5fT`b@-p`%esNXj|48YNeS;I^(DzEl3n*WcMUlp&?z!#ar&+yDCYvn ze26QgM_H3w2;4R@9bA|q9{&cw+rZ7&-&UVvduk6PEdIas5C=iryr_ntQ)fV+peXjo zeIU>qB%4ctKxKTO(L3ZQkTt2=;NQ^j*4Bp}ZDi+-5?fRc?t!AXcY&Da|Em^c9t{Es zNV44X`jI;*^>u^DR{11S^_1l~HY?5ZQ?cP6>r%Z5lBFTJ zU@)5>%uO&&1m~E6l?P--z_hA*n;Lu{aPN1EuU_UeZe?5|nA?g>a7zprte2Uivk3;9 zV{^DI1B3DZBWXPRKP`3e0fQmj#$=N=RgZ5|8$+c45V8RTf-vP~ULD(y5@5=6RhjKU zAjXOiqU;C}A^_pGVg$l+g+Ky5Ob1HnYX;Uy#@xFz%}>Qzla;yDyp)5B;KU*RWoHj> z=PKWUE7f@aJ<_Rvk7VOQ!)tB0H+w|Kw}d49t43jI(&)+q$4odWIcrSR|Ek+IhWzU! zgzU$S=qMS17&AyMEoLOHqSp4MJ?@m;A+ZQ?PyYP}*ya+?#wh;G>|A2EAzy&*HLZNh06&Gq# z@rR?Ms-}U1GOpzl>(I}J{bIsKZ$x( zQwk9sl=y%4|2;e&KA-pN^M0N0_ul*L^Lf5sFQWM{F(P7%STG~uTM3LC)GBM@=;ALecWmuydOArP*^SsRTwLkr*(7=Ne1z~;~h^HM+y;AhN2TtbCya#HsZfW6vVzrt1@ zfxy`zfN~MG2$(M75^#c0@Bv=_WdqX=fd~z0Ee1WPEsx<;(jo^$vR!1~iyZ!Il1swzu7^R1kHb~^g3J4ezjGyfm z5@$StLoOhZA7k|!gblzQ72z!?Yd4l56Q)Fz{dF@15kmD-^M-vfY@SwIGCZ+v!~i*T{aDlO2-{Bq zgVV=9ST*<9F^168B9i2!t)6J>=z;=JR;Wky4ue%yO##*qA+oFNI3vMIM+$H=V>fru z#0YDc9ZBT)i{^VH6fh+6(+wJH2=e;Rm?Av*=s2AqGC8TM9Yy@4dci zKh8HYA2IHG*H7!?MQ*$|R{DMg?XgA3?=B8V*eoP`^^A>+j(Nc8x~C_VOG10#@$qFn z`8H}0268N@)LMMcQfJnHrh>kLGgS@f6FMmjMQNq57pUZlwp=i{aSs65C>(E8^oqS7m1CTP;^37mS0=|6f>oH_8e zj8=Ef6}@5nvobEu1tQ0uWkNt{v8dYD5o;@QE9yfKNUG5>Wx)q4jt{Osq_|wPPCFr` z|9*bt@euql9-j!(HZO@@c8x0Xwu3419-p^DPcO2gtaGRRLHR~Qc#p6MD-9p41`XpX zB|bB*>e2?@vie@MCF!9{nJL=EcX(;|T4!Pd1Fc0{J=wRC&nfyobS~XoSGuQ2Bn73# z$*uEjv2DM95H1oG78ZUs2Gr%ucdU(xjtMv(9p{5nIv+x*E=q*Hb#~_#rQ97*He|G& zYwwn$X6{LS9cyc78WeKtgIcJnA)VmW;7}xSj1S%iT{JBU(j@L4(kV*QEs*ksDg@Mp z+{{I{L!db$0oR;Dq8O)yk5<=1gM))X+DkHga0?ea%MF!*H*mt9b8kPe8)DaUJ8p58 z_ME)@rIDL@p4*X#6*0-&S~|r|v}SAz=lXEJf*9LqTr2KMHKcj9YzJ57`4L}W6LEs3 zLVZ2xrt)h(TW~^FoV!&x!WK}!6;2ldxdm;<3-1)hnbRaX3a=Du5)5eWrG*)Vnn;p+ zVqsBCVcEaaJHxj}N_&A^LbyC>FL8@lSy`R8-hN__?N+Yd^3HWGbh>gyU{*M>UE;R> zwL@pklnN_p?mok)!Zi+K8>MiLGYK3MtsiiDI4dLpsGW0#gW!G!UEqiZ3+z^$*_^YS zAu6AJf)n(6FR}m&cjr78nq|e=&M5@UQs>BU3j6RBIA`@7oB^VIKKJfi#+xG}Va*94 z$FJ4p3!a`M@kg|;>ef8(IfqAbWSY-iJVzjMWpd6Xobv%pi8$wXu7;*hbElm%nN{1@ ztJD56E+jZ=08xE93Qqw&R~^5e)*M_S_MGd>*z+%Dqrk?UKwK^m6mXGv^gouH$bsZKPggM zZ85hGlE|6K9n0;bNih3!TXRQr6FC=i3v&UVpsd`Jxtfw(nUGxHT<}XKnjE9Jk8$~n zOD@|YSAW5;rD%`~o2 zh~m8C{J6kgeqU`)&PcO<9XlZhPa)U_N9BML;VVHo?m76xLY#Td_8cVFcSSizG6$SP z1pHcM&#)DpRSD18#snk>9CM$oY0$0O#f}aQvjejD1;;kAh3YS|&#{H-lh{Yt{#+Rv zhwaP;!bsfBCb5|~O(KqMq$0TohbcP5IJ(_+Z?+0#eklg{6czr;{+hi45>Q`d4`%~y z&+hE{Y!$%$^6b29H87Mblbk(#gk6`AZKam87bS1l;WnW3X6(1Q?V(Y20@qVC(zs&# zdojEZY(oAVy&V06py{Furf3^7N2|4ndAim)`bbW2G|u)fYJdEs_Pgh(ylVD53evIb1CJfZG`m}BnG_!CFKJay?eW7j?ucM2Ud**pH{=KKD=t$P= zGdECc33BZ7DM1<36eXpRyMK*lT8PYf00pJ!K)Q0UyR&5+C*BU&9e$qRf#(-Jlu{U; zMtCl-OFQxM_bMX!?`X$u#aUHrY^&z_d0r0j~nqC-E z1HAF&;GytgYdsa%^7Bs-aTcd`8yLaw&+|DSxM^8t_rBwazkOFfJ4RQULq@CBv zCsNGvlfei6nG!2rs2^bZB?4bHMM(`Ex1bq@bhS?nx1SyYE2*S^RAW6b?^eDPW9&Pe zu_tx~=ck)z?5AQpD6_IFKXw;uNQ_J>Q(?5CGRUU#8_W4;WKNifRTzQkCddwmNp$-7 z8&$MSvP8Z!&5YSy@>7*>sm1&aGN8jmf?jG!;Vf_Lhbb-ubsMOD!LRZ?^!F0bUyL@k zwywLI$zUv1nv{9mEuG+t54%ag;BOQ&7gt^)}vj*iDXSyU86L$xzQqiTi*GCNWH=d5*u*Q-E} zDqK{8BaHj-ITx;gme+yI8O}fa%>?J%!tK}>9$EhRjDc#>b-y9Mo!zd7 zUWlt7TbxRlpF4M4`&3&1Lzq)T=oT#aMXsE`tBYrfj^PgJeOk)D zj8(PN9x%s`&3#}cP8X(r&s>hF7I8@ZYmewIlQEd7cP<|1&boX$MVk@|2a$GB! zLs9VSF;c86U2DxG#8zIH20HKKstm`l8sK4{XgUA}0$-m!CyYG~>7 z^Z(!_ZlTiw_#E~avmXuqix>Br%vkiou%3PFlnc5M#-6@B1$x=?K!=-4EUU|~U;G`e zQf-u#LK+Na+Dt4hzQSf#rG3ku2d9JWf_5o5|G5n|>Q(?!V&PWx<3SUvCxd3jKbj3ZdX75;@C&SBYW zeo2!2nh91avf$6UdUCUqw`XhEh^GM@CCz%4t;_5!I%&(9+m!@8 z5uRk6Od!S)Yhb%f?^zG0T1>@QD~L=RZpAk^^gfT)cuCC`-_3e|vhjg()y~?%e;e)cCreV=RrHaB(}V5{ekqZk<0EbCgVS}UZ1o0@ zD%y_NI!tx+ez3Kphg+SL*2=tAYC+}Y`4kLqT3VXpjJ*`4a z#(NsOeR(?NKdGV4reba_g)V2f^07fb;P-vQm^e?+s_rq*UHkA758&KWIfX^_WOR`Z zhC@T;78h!~wuYY{#Im!@tR3{-U{*9I z-M7zLqFP(8^wL{Opfa_x?Bwg%JgMssj>-o|z1+$wf0(h+x|OK0^H#h=0JNlM?(@?63cGvf@BH5JFG2*RDK)9op;4i?9r zol()ZexH*YZJk|WtzVi8+|gK8l%V=Ji0+fd83EV7#(eYaCB z=S!&?zm@iTb+gn`Ew{+Fe`KoE%IXpRZtA#imY@+TY1fUm|8dL{m#OGpYJ{_$N_FUZ z@O60@4!*h^D|7vWlz$d`cqTYTR{SAP5?myIS!zaIN%z=dU+g4REKcIfPCNF*I9+v* z_}%e2Srr`dZe*hR=bE8q=?&e1gn4L&zj(RJ>c>4r6Y7VW%oXeOY;5{LjyB23FaUb- zMY8WhPof@cQzd!tXZ9MsB`>buu*fF6sEF)~;N2;*VSOmFG%4iOTh*oJXG-)_zew#A zcT5)RR^l0f@@@?BIJqXQFDZJE5q>Src2|+i?Fc?g%x+h{|F*a6xzb%DfY0k%8s~Nu zwUt_}ig-v^*>Wx}_%VBRs(ZJyK1-HpycyKFSmtRuCCWQw5on-kd!qBSez2y_px^e8 z-42tg5s&(J&uU2Y)S_bREH2)#8`9@m+d1uVQfUt$Oj~f`S9|n!k=VAdBymAebu=sJ z2!|aMhf@5wQ_GeGwa=Zp3L7rH2GS17I)}lDsC%47t|Qa;WGv@q#-ZX+kxW;0uuWu8 zz^C`0*L@?W-+al#<(`j2iKPNyCqJiARD6WFzDMkKX}hHAbi+qX`7QZ4csrWW$Hk z5;X1|n?n!C$H5K4ZfbpoO&Of@^SLtZfMczExLkLpyt&~U>CT!*bMPZ8KS}#u zvQLU07AX-GX)P(+b*~$KX#;A;MBy`+PugSs5)>^wS2NI31dZ@o=(cl7sjN^`Q7Gy- z19S8CNsH$R#Okrtgnie|)zN%6Lz%9LyQOMR9uwrH2o2z7^#OD7^F>*a(wb3o^XGOQ zoS=%Xki`=RzBAmZ>b_z{a6xL{`ASy+;!Oqi1MHVR?uJ@25Y6<#=q&pAp-S^+ zZ;X`PM0j`7;n#sOBjIMym(??YG74rA+;2_?z9T~pwBvb|bn^ytF0kjJ(jw3TXh~#Q z%2=wd%-|UZt%eb!@f;tkz=zZ$%3Yl!ht4WJEqeI)dh}6yYk?W9-{6V0VTesBt8Qf$ zZli1~p`%Z%u>Fl7CuPy?JPz9(E+OWteuwU`hr{j9tf*+dI_l5`d*a^Ds&lv(;&@EJ z;LsggY5K^KSq)mb6Cj1O^%CmD87+E}0nKzSggT#KDhdq$OEW}#xtxiEs%lTash2pL z`qX%uKBRgnBTC!$le{M?QL|OxiSj~uqqs{+VuKC6KEUQ1iqAf-qZY@vBd5S`dVBQH zLvw!e`BPFOrvAI8&4fFE{MP~;!Vb4${(e7Crx*$ZEZMyVntua(r`n*q&m6evK@sk` zF%Pxy9mM-4T80$pA^CW#+B8kI;B+dg3h%2N+G|Z2(`3;{Y-Vj$@k23x-0UPbMw)|2 zaQhnKhBJaUF=k1 z(=nulvZ*EfOWTWe|d03!c|=vC2V(L-VY z5tk_zE7mM_A+mp@P%J}CO8XYQ+$C10R+pnkF8wsY++MF=r2qH|&)|w7*XWa1Ok}UI zYU2(Bk6c2r$vjb1a4}0VZ;%RSmUZG}Bt&+Q!or z4qPd>-LhM-2dRp6l>XSSXMY2rSl_=mAawx{K|dZCaG;}`TxxOO5JcdZ&2m{GZ3K!OCBks zs&WxfHVy}ggVZUAd_~ixH)YvVM>!Xox(SEH#eo05$xaDTA!qhwL9R@w&m`I4uq!Ti zgX4nbJQPwZT|rm{T1RNewo2(+n!c6$r?3uz!49ytwwFuV#Z6Xv4Z0i$oOZExJT}8I z5hV6WyixywO&Q239xaO!od0FtrI0$X7`-nwk6w>1#yaSGGa@m0=w_$8&RZBIu=F`? zS0~@;mv_!$B?L|lp%Lk25$Ed-MPIdQzJ1D#xX0vRj}Mx~9uZ%e zhOi_p!haX(NN~JNPkQ$rs-PWvUmcAfdGj&=-^ zh}cJ?-F!P#OefpbQXG>v3^i#Njka3t6e+x%GU`4moM$7EL|fA+0&cDaE7xiY-BIp6ai?t}dCCQymh0ipu)=FymVh z_HD+!7pS3T<5yvf5m->=IB=k6`z0i5QTU{i@;xLOy-*0rt+%_|6(7}We_kXlGI3xr zCJT3pRMna)(=yS>Z!ZloJ221M`Samj%To$6X1$Qr!1_dG1`Ps{X;qly*h-ikh*t?w zTWS69vllw}cT)YWpiMF!3SGh}n+Tw0ABaEC7KLO1oHu&m{C3-d*DzQv3I3yBDD^Ot| zk?}~@$oPR92(t;(`Wb#GW?8&~Y4M@BH-Pq$6`*MIhI z5cz1U2Q+;yN~C=U_vUh-m6VvuW-d%qN)$ZS-$ zft~b=!OhM0kE34lM6|!>n~RKp8vKKXdfL{#dls(Hb1tYN;8*LL&F&(@!F4fQX3#~u zBGbV&G4LS%DC#gLi);zA4}W`y?^2;{&b|x>AJf{b9qd3y$2%$<$pL;&6E=y*x^1Rq zSl{NdRXY)L&7czhK{+_!0o%sDxK~VmI zt<94!sv=O@t1}{;!7X^M-lX==*EX|iMwHEKvHSIY9CR+s-gioN@UNPAO>faPMOGr7 zo3^!+`h_XkmA<{YswHja%{ORT^){vA?LkaUWYg4}U%}=He#=_>-M*RA=(~Nb@5vg! z7toUR*(%Z^y>Az!j~doTct}Tc^Hpj zOX%L&>aAm4FN}UkWper@^P{$dS^rd%?Rp2#Z+ik>MQ>g?b4u{a{RpHBZZ!B08bPED zosnSO$Jic3_Tt;_{1Tb#;pk7RrzYx!c0PqGjAoKh70xxCUHaQL9pY^;P#bjjK(0!} zHZqg82HpAr8c59s-_K=FvaVzzS|3h89vu<4k+}AlQ75|F2N&~?fVLm3Ef(dlEYUe8 z*>KdU$IgQhh_x2iwl?ekI{Qf`=<$rvdKLdwFdA5hAlk8U@&^LKwm#nR>NU<%n7xya zwt6(ua623cIsK?E2w}L{Mx!dPu{On$MIt*=G2zv;Yf1~~Tmk0IjE_bm7_%Z6QGmt1MNTq9eyzv?20e>xc8kn^Wg6xHni zYQlm6QWsr0ci2hVMgAD*gL>c6Jtz+RB*WyU@}swwnZ7wwPQPE-A-KM6kB{0{b>F=7 z`l9_}Tr>hIe_WUKD`>(K<&H~%RsEh)6g6qV5!Q0G4*0{qeKUC@stb;ix^&*hV-czO z0Ret{P1oE%snit~Y4sik!y_4lSFreL4fHFD%}!NzTHjdfUD1gpPkT1!F>O`uhVhtXk@v(cL&Vz7$5|9qN-u*a(@<6_4tUh7qpK*Lh@5pY}G5S*t2_N zKT}56%RCZwNIR#~p& z!A|$xgy4h0NCdR$CU3nk&XxBeaELB;Ttf;^1-c-`}Cwcc#C` z)yLHW))&%?iSzd*zWjNB+>z8Z{{@+5yM}syUs5!2$gw8d>sfumeFM^iPDj)nR@b-q zkb*$k(mA1@>5s}t_#EP1*~zl23# z|IIv(-bVE?A{Uooz(taG{(xlbCN!}ird-}!1oC5r$f>(kBJ_OnVNdzr%Fr7d8#jNM zXJ&{-6}{{FB|d#nZ^H=8zc9X*n{&r*PBWu?d(IHEte=X&v;R~lY|A#fQ~9g6F~G?h zf70AAe^2ZkV>Z=udn%e@q1@3z+{pVPqbk#n(vM0esj1WX<#k~LO{DOu1zJ%7Hn-u zeZZKfS9y`j$vTKu9KCgT)R1HI7>iZCyCV!8L3{Zq+3Io!>+>eNH}#+WZSz<~ z-oM+kGf6mUmBdo!R}L)k-H9)wcr2(sFE#A$cJKYuB?=WiiPNy9J>jww9mkN*Z|V-~ zr*uq=)d$^kN0pj?cxppWu#dHyVVWQ<+lR8^4$Z|;S0}QzofNFroo?JaP#~j~efPou z7xf?J^zSnw(OMU*%s4995A=eQL|sP4?LY64MuBg?y4dll@R0QFKPqZs?%D~5^h~5Gam?@1wha^w_@*!~U=MSN%;8L?C|;~DMj{vaM>fm0?^Sxu}H-ikC{YXkl> zI=lOXZ(|1T@gD&P^|5D@!Yy@grUeU}hibr9w)+PcmSuz;f2?iTN+=3oU=SL(hvT5I z7#wi0#S=)BQ~X)5p5bdU(3CJWrvm>ecCMa@KsO&hIz+&E7#oBMjS!NfV&a5%fI#7O za{x+`od@IK0Wwf4y;4Z7uDd1_-3HhM@Fb!J4DSia{6}L#@-x7wf*FqO+(OE7i0!8Y zY6Vy(3%$YtkZmxu&~^+~VaLRy@8Aju9>R#?(>x(EdK}vV6~Hocp&Y6mO|U}0G;}a3POV{NDPc$f%D56>~7)U~|&b-FFGu z56AGynesWFyX%(!k=1hBu!?qjtEX6f&zZjf#F~1|`2p)AAMi4|X8F$sw%xcF( zU6X8madrpsQrV?OrJ=z!aF7EgUs}47U$u{3?N2u));DpO7lEC7r1Mk;<*Pn@1#r#UX&Vp0kIRxR7k^JNWTuk?(Mw1jA|y z{ESjx-$2(Kxq?@iE$x?fVSL~*!e;EHQ3=8xxUEt-%~RUb!>(>OE+#MgYQ&1 zQz@RBq!|~Sjte%FwX|BXXp;Lp|Mn!3aCE>B?xQn|;KxrY8g74sXPQskb=JS(i9OC& zdH-bX{aG8fILk8`b=ffk?QJxnXL-;5g^emSyRMmi;Q^*$m(@;*k6Fe=S!@|F(cWk0dTO5?7r=pClga3jVHm1(Jtd7F@bhjlQU zrI$}iC5q2mL#@s6JKya|c(rS}35z|l<1tDHjoTfb@1XGpV<-nh9e(xX%yT{cTysn5 ztne3&K8SA@4!dF+Yk`+jb8Qb)RYH@E4aK3j9pFj1bRW@G(u;ie=f8)cKl3{x(l3t} zSw~RnD3b?|kL5ayX`Hq16^Yb}cT7IwXofz9weFBj9clt?NL;79i<4!|r=bSq1k_d1 z$$6%Y-Qa-+$hEIdj-`7f1vby5(`wcTwv6^vb^Zlof~|3cDN3Ekv7KbPwqb5^XdeaX zI9Y>dJ=4dQ(fRw|rryPa(SZTA>YO~E-3oZO*~hsBL6WMr%5v@UokG>iGPi-G?s z$T(GfYf(Y5=WrI%`CGT{{35&?{417^Q%n6z6&pxeJUACo+8nHP&Jn!nZ2jSUrrB{Z zY4Q(T(Z0$4YHJenbewy(i_c(^x^;yOls3=o8M8=$w;EeNl0};Mluv}?aTgT0IJm6w z34fj8cH6b!?kCqOueA&>}ZiY#f}HKQMiP`|Nmq1@kE-MLx3q<0?UEx^jl|x_##5MXK%7Vz>8^ zH#>^jYB;kMpy3<;Fjr>LK^QQvR`x6GIjbg}l`3Af+fjm&{oT4YBlEb1r-+#r*Ic^z zdEc|m;EMF8`cCp5SP^BB_s`d>$YtARo=5(s<)km3A;OPx6ldB}q~DePi&MUX7%Yr& zyc_;rdTW>BwwYUtdL|}~p5W5pJ+jlLm8kF;D~*_+dgrriJ)-ql8~$jh{{?@vB0HOn zqL3mt9kh4EMBB}JgQx2~JFV<*AMeUiOr4R3=GTeFn)>sE6QW8qA1DM zoONVwIp`sz;h?B(E|sxh1llp4!%I>dsz;gLPdTqs%k$BRhh=@`@Ydf*zia$M!|0$L zB2qrKe#eRB=DexON6YopJeY7^{p&E3VQ+)~9wWWa#^dGsACCQ9%?_Q;Qi!eRrB59l zm{nER`LB=}X(%LPnHCK`DQ;iS(~*9h(81vpR&;da#!#KL(qsoLP$(|ToD1=T@PWGS z=nOE*HytOa1xJF>NWa~tMET4T{Ii@>a*?XW3?2#wehAiX6QQz{w2;wJ5oG5c(e)tZ zor|bseI>L=C?5Um-o?vmHQ+euh_P+V{b!%v$WcC(ns{^fDn9&W9y@VyL$qKrOYN1G zX`8{&ccrNS-&gnR^=F(?4r2IWvsBEhO-w0n!NINyjTZiRIEZ#CZ4*CebqOQhXl#r@ zPm0`1qwHIvv;1i>(Z6~tAf9z*SV|(P8ElvUXniSUpMpcX7;;@E&P!cY1|{n zxgDK2vNl~FP-O$^r$QR!!Hv=+DJ_p`3nz$pzp2dvBJH8WY!Mj@{d1Q%gBI}wr%HW0 zjPW6FE0!axVygtcun5 za>UcHn5r)eqGnyJ{!~#!*pVxfd@a*@ToT33Z4M4|`7+V{;;bM_;I+)`#QYw#gUu(1 z1$xMXl+^_T*~L#@wrHBCKj*Mn(}gzwML&uoA4=5%3WfwVRZ{g6I_~`nMNuFF zF-&s^FJT$X6WEO#S|xxD)eSgev|_NPEey%IL*>?l@@WGZ1joTD+P2WIldW5!Qn1p{ zpn4A_eLSC&g3k8CL(VK~oZMF7M0y^LCA87Fhd*CA7I!7aS|k?$dT6ZLbtNc)KgZ`^EinIVP^>nOG#7QG%d7_O?ZGN|z0)*=5!==LgNik}x{ zM&SZQO+^1-a)(I~ZTYW+UtMSz>oBsC~23aMgcDSoe~vP{2e!IJ&o2u!guhVxL} zS5?G7)xZS)a8}je{jQO!s_nALw;s!@JHv956{;&9B1`HXS9q%~Zpd>1VqGKC zM}l!qB|*MXQ9$s$=C8F;3pa_!Qkp*$jT?sfX_Y{EJUCzIId*(7^^C3V{+BvIr|AZ$*a`8a_L117xn5oh*FrsGeJbx>zW;fpTe^1q2g4SQZLZAYKtYg<*ca z)nMu7tvKixvm31%rTi9Y5om0!6&b%2qy@ojQA4=^d^(rJmh4E(`W86E+JqecqjX9A z8pI_9r!rk_I+E?cfl64KA%{6y>FLe~NDwm_Mi~aG&=tyA+UESH_Xq)`NG%``u1uJR z67u(WuHz408a+)TN#*;~%=F&mYoN19kP;D|E5PGSVBui#IeJh&hyetez(T8+8wwjh ze1(mxWMP9$CJP%qrosjgRbgY)T-X3&Dr`(qg$*F0BZlJYUn}fD#!Q@@-7#@LzMa^; zKbW>j)BOY1s%@(1KYv;RtIKH~K`)JL4z?f;`%bOfqL%d6pW!I#hY$L!uZRD)Cc_Y< zudUJ6)(YtS!koLmapu28C=8q5Ew_Hf+gLvSP2Dv7^=m>2$eIV*gTpx(GtoF)T=M(5 zo1soi?^h%HpTo|W{`ihr6Cd&Z7m%|Z{9|nze0Yof-wXfui=TMneYM0n4R=^_7Bk1p zV{T=7Vda=|+sY@~>vPFO0gLFXJ~{XG48R*{+W5~0JDrZJW7Lg({&M{V<;#ksdG(g= z{?IfT2Io=j{9=c6IdInZ^~-{Mw{}9ibvR|dEwhuhYJ>PN@6?8jv^75P;nO|4uctVt z)Mpt3179fj5s~`I{1dSmxVjIEuA^w(?=mZACNy}l4a=)0oz~@jFb&FHMk62RElTC7L={NijYe1#Ux9_}V3axkY+#1|SY(!8hS1u{_^;pQo&mhpt6wOojIknSrb#qK3FII- zt#hN|`}vqwxqyc`MC9*XF;l8w9Z3D18!z@+TSnf}QG-DHZ@e6teV7dmQzFp+EqysMx1{D<3p!8i_n-34H5SP&0_yB3Su)rmhY^ z3Y671z!;jP*y?HtAaUsB+Ar5-_$BndzJ3Z5hrhFs?27kg2n3&IK@8^S<#fQvk?H9V zfR*5nDhq&>&I{iFBPEu;d(8n>>dt)?0I>V{<@q0=GHT0@U)+aa!S5CPGBgyzTV4Sy zuki=rgqep;6 zGXFgR45EBf>h1yE{|)`9(zFx0KUsMm4hlk0Jz0{ZlR0Z(OesQ>VP56m# zY5l;und)@KLHTN`w>YGVKpKnGfMv<&%1*c|`{8#R%3;kAVoOG5zM!;5Mh)x(6HgLX za%#3NJTBK3tt{_xJ~~gjVGm2s^Gor+N&Ujf_gM#jctIc39E(ZiV~o;c^pS`df|gs4 zIO2qip5ve;{BV`8y_dE$6?KJ%yCUbPKsNQv1(t0m>OG^-`M4|in3sN3hrs6Vh%yws%CuMm*%YnQ6S#($z8P3R!h;0-VZn|VEMLLm@@a$h*U z6rO1#NZ+r3TV(eg<7E8O{;dldc^oESs2yu(0lQmEf*;P7 z_H`B$?+&Ue`sjnhAv}%<<*kB(6lzdc*8WI#O+gQhn@eA$gV#>hCaG)Nf8CU<%Dc4{ z@$z$SmZ8qHSdaYt*%kc__Tb+EIdH!Jopz-+KIMyhb>tyXzkasz{>p$m73%!^X5CYR@w4D*%~!EQc;31mngNmzD*XNyh9H4GscYh z6mw`lg=2SQME>f&37ThBdpJfDSSln5CnNDm6(3 zK?PN}lA+ZXmm!r}PHPz)(&1C!Ag@&4vPQ_gO!AiI3^YlU-A^JVGWd&myEP%0s%196$r$^Fsen}T8k|b7NH>4#Yiq&0-%mE*x=2ip zb_p!>pbQ*WG}tAno`i(&aFXxXgQK+nGf;TD{h$00Xue1HM8Pn@4RloeeXIQ6Yf|Er zjqt=ij9&w~cX*Hk9|$zBgErApuZg9NH(02_Lv}{m0+I@MR1&&1`lhXa8b3J=+`-x> zO^5yKlY+X1#YVn{K}6u1Lf{Lc4f)jj6}=qwOC(iP^aiifrCMy;652})K+4pMt4rM5 zkaTeAC71ri?32Qj2=O=4e3^MHa2%CE%bLiA13;Wl@_7n36ej?X&!o~X<+%YKxnvQC zp@^&asxASRiQf6NcsQ?Oy8t{}V^RX8J3eW$N zR25LKa`dT8bxDoyEI_%eSo>NUAi30CymGMq$_j(0*YI7cQCQUSR@0fQG-01+(QDmu z!amnex0tuiGMf4}W!oOM3;S?x1a@p&@k-=%8e?z%kO3%HZr$oS(_Q*7e*ItoPhO?x zNU+V~6)Z!kH_=r(-bi#(q4{pfggS>LMP@g*NiBJ5{0j%}^^CvGS6#7$X~1vy3f>~* ze^piPV(cxu_gAOgn=2hJ5?h>pvQmdPXN>F#D6<=!OKJUAB~}-tnZ%T}PGEVFcBvSM zi`~-nXy`}T>jZME)g;JQT|ac~@sO-u`rurD{h%5~jDu+IKpMwEZgP7Ahu%(oN)@-9uFIqD!vVmooj_LG>I8r6E>e+d z{;ad=3ssX^lEQKA(4*k^*sa8tG_jO;d<>6s7_>JghSMAZ;dBwac%m&MFAbHZ;C!Ep zFNZs=y?A70^3A=5D_{Dx%4fR@hvfLC@tVoq)RuykR`WlvRL<+P-X>=9KsC?xIoedT z@7s3RpdEYU>j~8!;C6-7o&PQG4y3fp$!`h>0?J^@Q40A*HVaCD@qK6!Myp| z`68jBys4t*yndUOP{>t|ZW*X-@*YpLo>ROgQh5v#D!THn8AQpTUqIJ-n}N-=+@x#Q ztIL>f>eObv=k*-jx}ZSOOVc$?XC(nvp1%VhAU4JYwgDb`_lR7lNjdo2nUJcbwB$L(TF8F`ScWWaAhr)j zb6`E9K5!Y(US_bM-I6JSIxMd^NANYHAwmSKP-oSj zP16EAk1KfdRF^_)nY=4-mf$|SHTIjwWnFsIbHlLln?5KU-qU33BT;Qi6}!;H%KeDv ziR$tfk2vz1i*S&SfsC7}zZ4*YlOb3$@VNCv0HnE{i6eO9H&#BBxS|LUPnl-W3Mx^u z8CB=ae;&hM#N1_QBHOMuccVvOeC&=^G;mu6IRU$Qr1H z%Mv*MC~pDGT+UqJ0%kJi0E)x`0sR={vR}S)`}72T#L*Y;g@>4E%HZw(Ny)Z^n!S0& z)8m*Bd#pcnCbzURZ49)7D zz5o=uQsDv+QNrJb;wdnn^|N8RoxX_YaUO=`0sNd>+15iPxSDippeK;JDwE)A430?x zMB@At?1Vz%fb{4bdW=Gp8xTHekQcbJxjljlDs)|xTCP7DD$XQFKC7R4UchbU1&tn! z(R3W4_xNf0GJO7B^(k>>;_6DkW``y`tJd67O(7AkYjuFBNj& zh&eSw3kY;`h&je}ge5TjbA>E4?~|d>lnK3lp(&)Rb=n*{0e6K%Uj%X5@xatLl@x-D z;IeXb6^{7`#{x^m2**MXEgTC4)Cw?(V6e@)N}V{+*KrV7-J6l|Vng#_0P5GY@xSYW zBcF^(20M7=6R=a}=PdB@3lK{KD-0d4*2SdSs8M@LTpbLY!~m3^vrDFeKF8Hf()|Ly zo9dC`3DEFrd%QSAj+l2BbKju8g8qRgeh20GaK=IZAOK8=rw3C3nBXCUP$7SK1i2D) zG3snOy~V`cDh8_0%{_HIC4n(w<Bl9al&v$S0lR)KeMB5=^Q-DKqs+8iW_rlOCO^ zE=Y^alFSyQ1-9iZ8>}~G3XR|Z2GjAi~KEA2>F5|4F)eWymk!&k#|0mSZ`A_I|S2v>> zsHd0FO0ni+1|4-(_^go%I z*||j!+Gze0Lt~8%__zQibt^6^eFYVk_k2@Y&TeWA#PdH_-2x@ii=^5mCMa^ zbT)$}9O|x~V_hMNW@=`a3#lkYA6*vAL`3V6^J`^7=iXU)r{cnxAFv*>gw1)!{6RuP zv2W`e<^!g>6O-?*+(J@TyY>y?%h8+5n(joS0DBQ=$ou8a8)kLW1&Y770m09{25n6C z1y?>6ZYf!NPRXP}$~;rD%|7~^j7R?gk!|5%7%Zmv?+_U_vC!mBOXrSP;#9u!LfbHy z^AZ#9cpBkMufh1sJ2Kz_W!#^>qKYwfH3#R^)H8V98o`ZQG8-Wj!yM^v!yFKH7D^Vh zImbR3a}g4{9R<1Q3@6B&THi32+eSuEx8M{}yZtZ4N4$+fQ3KbhCpR6sRSRIV>@GinZ9WDy zR)Por0m~Z{e;CMd>L-6g~WX5JfxcIch7P$A#2q-W^%1 zXL^*lf;CeU6PSCrD0Jh!prvg7%L1!@@sQ?hk$p=4bnxrP5BeHbe|}4T>5tAeVgE2; zRyAbC4!qM)x#RhnAbosSch_;%pkOp*qU$@9LfKP*GXa|Y++`xt!I%}SKaNP4;4islvD8f)TL5Y5JCU{xrXnX;AgI%zk=t9#*Pkz_1lM#9m|2X*PSy*oG} z@zup9r0TQS<$@37nKMVCJbQhhVB#ZS9q~&lNs=OipUO_{c5>qK(q^CWa1|cqf^xZW zkL^pWI&7UaU#sy;eLcBZ4^fvmHqqgoc-eLJXy}-gjk>39ns#wS-6ZY(p{~_X*DCcf zbL=a`9mRRapp(0Yf=~;q1s59#u_$G#78+=s&16%FmKIU{0P{W&`x7a0ML{+Yp&k-IHGDXe;!1FId&sCcySw;YqZ)cxy>flI zoyoy!l%*T&dxg^_Fy^R~nf8w0P4~HS=~UC`)V`j)JvCVou?zQWWE(?s3d`QaGI8F$ zmUOYx;lBgK95GPpx@o0({8-+|lCWe6WtQSky*<2t%0n*fPH(78XCg(v_wKS43c|8EWMrzZeQU7GjF|X37;B6HlOrKGs!(VM7zo2f-C_Ev zn4`uZ#+`Z^pl;Ooi9e3Zf(-AE(JQ=B1?*+RME4fZObv@*i6==^aI7jr+d%sad!;1X zrnLZC02$PO$L!po19vb^bKQ{gcaF3jQYezvBZ{2pL1HlBOMM3Y-U44)1^ z?cR?5LYx<4wYeMf^%&p9e2rh_%=))GCF&6&7SUA(MuuxuUd(}Z`wt6XQU(4`zY0Q& zAf6yA#qzZ(!&*nwleI$R;G6uiO~l51@T+hZ5C`ELzBTqi zD6GYRZ-l{4S@^oM!|W;**xvS#(dYYuzFuq`lGfAR#dv_wAZ>sHM~m)%!>H3nN8Uy= z?C--v_8CBj=VJuOcr+3hxIZyT!WiSG-p$1bL6~MeW;9{wnd#*Z??Z+6M9bnQ!)$%_ zy76R|pMIi6A#7@&k}zZ?SJ96_?wM@DcjpWKWA4)v5xN_FVb&Zmaj1yr%Ksdi;;=Sp z`qhdnx42y_{GH9*tdXX!c4iaErNI@sZH<`+MzQx zo%lK>h4p#&X?NZpO6(nt7WewoU-hU4>_A`f(|i&9+wt@?6%$IF=@mox^HjM&c8aAy zOAhCNG6L6&DQ2Hx!SAU|3WC(R;{%ji**<&qUNN&y$x;0ht(43En!=IF;*K_4#Qy)ZC8=%kq;xS%ND0tHwFX@Y#R)oVlEDAl5 z5I(AnjkEjw*eW#IKJn}I==g{lV!D=j`uE4zEG5E0N6P zJyFi!kGqL`4C2%CKA~{4CLw07JE;u1#3I_OA2u^T7Vug@c2-j>`3(?6a8@h}?aL_( zlqYp~n8D$P$+k2zJLQJycJ`#7!Z?Z1aTqR1aW@)`<^{97DJv$%gp-z6bjOhfCFB+5 z8S$qIPGY#TS|qfxyARk(em>}Td@o2H!l8Co(2o5S0p(}&wTf=ns{?XiWU9a4TME(x zF`Wv32mzUc!XMHl{sTflSumzkkAY%Vj3H#5R#(&fHv(-B&3_}%)^rkEVvImv*8{() zd5x^A9}F1={JjDhxpr3rl;AQk@6&kvqIUu^$IaYn=4;+v!?pWNGeI~&dd~e8+PxZb zT~-0s#3Kl)4rq5>ru|5d7#U{dWYZCQbPJi zYhY(BQ*@*iQ>cw;wlYZMkMw?rdis+A7v&$o?B?Gg&b4j8MFaK@3|ps8>|e@VLxEI3 z*^X~jucqOHs5B-dla1jgMX1NriPSe{;8=WxK?r-Z(IpGumVs!fxr>cSiUo*5G2;+a zxz3Z|W5qq#%Bv4TJ1{E@)Xv2=@ESE~fee{`s@g3cUMt-cSd;pA6J8)Qvsk zNMr9sjv{I+tp9PSLa>g?4HInoB**+}@>6^V9>5gv(M>tu?c-X8tvhi(T*TZU=&Ns> z`-Ly+>{Jx)BUGyb;~!%RXDbMxnwZ+U?-=L_QM^-A&7u{W6NMj#@H{HMYGP0;Q>o1& z?jB_V=y7k8d2etTpGGMj`}kL35<+CGJDTFDCR+Fv#DBd(3O&x+^|vplmkFFH3;NA&nf^&r7+1_ zLX=lnd&(h?tc}1t8!b%l+^`eK!#o3er_7;QJiN)w=qStpS#oyfZR_xTpY zR%R^u_YHPyictSVgy9QE9^kAmYwKTNMICbTJEv-i2=Tu-ijpPl5!+P_#Z3k7=m?77 zDHh_COh_!NxkHHvAi(AQ6$D^~zxyvYycc;{9&Ltv7dG5_>O-|9Hn3>!9tIwO)^1DY z`U^N`SS8+B1hK()qI)d5=`X2kdOX{5fe(d3)VYDXmpfIPn7MzUy1zpAI9H*Iy|$-e zOu3Z6N5&`BOe{@_IxaIGW#a)A*YD1n1aUJPYKO4QY-R#@*Rdg!v6MaUn{CMMSHP$` zuI5v0Dbt8gNxy7zZMM^k;zlpdyPI~{4WQVcaq0#*u%M94oVQk^{jP1F2%u6N5EMJk z=sSoa?!yb|I^1XyFO`^#tUT#1_o-<(b+nwde3r@tpjuE0Z-o5(b1F1Un|K+LOa1N4 z$mdq&;_T||YCWZE{ofj+7FDpEs1bZ7`Hw3x)n#se*}QZZIOj4)7^K9HYDF%0i^u_& zG-PI@3e4TNZ<46gtse&hU4fAoPYP5&PfC=#Y_%HmCda7>aHpL+5$l@xuv=3yei7^R z%NUHCRB%?4R<(;(&v*q%q*iNoG_tE}8rHd^wa*(v-Ln#s?pN;=8>T)v#PNbyJu^q!<3w!P$4e3rnyi51 z_JDgcARPj{6K2IMZY+$74jWnlhpl|myA;ajXRP{2jq?T5t5DWOaZX?&p5RmXassp1 zo_g`Z-v^#e{6fqyr)J=ik!;=(GyvPQ&up1?H#*$?q#;rpVno7@B%BC~T3ir-Ut@*5 z2e_D5>42R;X+rMBL%C33Fu^W~X6}V+h`I)QfiL79?{ifv{9}Ux4pHU^dl!(6@YwHM z=4-n0)=R|!-(@+$7i`mnR2wn-8YKEmW=wO4y++2p8s7{l->pqa)VloF?HX(}J5{a^toqxA6Jkpf6b3&q*a#--`3jy`=#w^tud z%|P>LqE zm1BITp8^Me*RZvBG_d3tj!4htU=N;rJ)x!1sX@3zZAbU?`96L#5-I>*`OG%Ehh*au z{9*USdn&i)MSsl8;m7q_W0;ou+?WQaSt-j(ZlOe%m~H6R(n-Jt9rh~6p6oN4L;G+e zVc)2H_GH*~M1Ti-og}wXlg$SHec+l?NGb}Ki+*%n6KLeE^((P1&qK~f>B)x__FTz# zpmzVx4Br!Ma|8J}dG~ne)MWw0%DYImv<;EN_^$$F7oE$b`=#qSnzX*{p0#4ClUl-* zfhKQm2LEbt%(!&NTNAYP1+t8NNdXaSUJLA&HJq&j=6%B^b#x64KQL73Vrg&lkXdFH zcrw_?8*9p%;>a6X$7b6jct&LqE-7CIZU2vZjr&+@gv5E4+3@p8H|L|G46U({RZ8#L zdVHA!D%{4(Y9msdy-^RTfVxcLP13p>H{ z&-&noAfm2H?awe9aHC7fo&_IPL_H_N#d-rQWYo$li#Ab~0)Ed`>oRiS_r=(IjVyGq zF8Y-PV^iYPS>%}hOO$N;8a4@cYu*A}p*Jt6XeNBYZBVDBSntk9gU|3=!FY;_fgb4D z&Y~lBPKM#$S@Bfy6zG$&%5ZMLSJ zXP`9YH+;eod!5FD{A4hRgI+*>ZtTV-?qZ3A0rSR=%=OmPLWNH&{Z&6S*Jr)@B;}7e zHz|_C02U9~(7ML+y>o`;dhaZr*DR0+2uO#oIH?7w-$gVh7M~iV>SiATR3YQEEFn0O zogadtZoNxC8R0+f|Nq|AamnGF`hrj~DtMep&&>LOjz@*4<*TdnSAx1V3a>PD(5KIL^MnfB@n#Ra4K@q`{9FUEu zn|%FI1w)%_c`|T7G&|p&9eBakUnd~n&6}VdTbe!o3*9uw24g8If#URAQzrjX3AR>N z>%KwL?BG)00xh%|PeNED(n~-h&yNZ+?%G?eWdz3hKgX;j286+$^+dT-4zB)N1|BV0RSCl|bs{w2{ zj2QRl_Me{+*mEd=3s35P%R6GGCrVaM_Fd4L>5j1)*crO=EbDI+cS4`r1U6&~LH*&zyO+z8uw5@q?vB!DBbg09N@Ih*%xnm^BiQVH3i z6hu#D-8L9pm&y~%+2%Q%Ja9z}iys=~3@5a6mVt7ZNi9@R4#;cgl!b9#oQJuyFI+*- z^PXEP`J1$KHU77y=&A^_FAH%QN%WSoMH`(lF}p)ZOG|spYEHDUWK`0utZi(Up|3Ei zfPSh+T;#I-1rEozHi_=e!Y-~^Zi)BO(%d~R-|^h=q#AnrTssd#tJD1bIKl!M*%1tH zks`YXF>y$8REX}9PH*(z7-_*+?RaHe@x4TaBvwi?qemC1lr)YELm1kVnw@LrE!LF( z>TV%xQL!1Ll-w&V`-kNf_aFSj%BqLe|L{@G<0t>{>9gAB|FG`G%ld!FFv&Lk!{(OO zwtv{((fRrxc6Imk{=>dE{R97yHaIl=58sZAj{U>&iOH#d_-<}?<{wUfc>i&bn_%{7 zUV7=X`y(1{VKG8dEC2|U|F#Uy*#zECD~(vSa%Fz1m#V!z!+rs}W@1E4Z8E^b!#rHl zGaE9n&%VKF&p!r=4w$kv?bT=)a>QEfV>f zCDll)J4N|+T0tUp0ctIaF=QJ>E>o$QDxf>{=cK@Q0-9)_bQmT|D0B z{JivfFYhA5Qp~3OK{4j&Gm2$#>n&C1%uh;c+s`_tk8;JK^*>KAp)%Ctlmz7QkdFm3 zXor%fL!e=%o^ea1_{9^{1YAv1MIrAN%T7zD#H*U>wz>dB+Lg>WOIgma<5T`y?Rj-6 znNJ-cafyZ+aT)9dFmFgdZI4)cqSdj+rcF<~`W7s6;kh#oK>A6RpUZ{9A0HOQH;J zbF8#jZdU^7i>tVU@b}S8Mwapex8vQGhT;~syBBylSD+G|Y-MG7@i~Sk>^fF6ahf6E z5qtamA-ko#ea_-DOfi3^7{r$bjJ*z|`adV!A?dlC{uKo|MsOok!12THMFb-PbN2!y zZp8?dLJ&3crXwgumZn|Vve3AP-ij7`l_w3qC4M?CBdZq)rIy{uxHCBir;4)fbcaSl zCN0t-XVc^3%&pYMe%Le8+S)8isEtg0XVi>YunW~0)d&7#OT$5DQ>|ztK$;cpdp%B^ zpcR?q9(D>Z1hA@5Lo^zFP&pE4*bBF5?p818f>&dH5*Ol^Fs(5I7hk!h*e)LHZL)sL zddibis=h3P&C6{aQt4Ul=DKH6mD+L3+yIVlQ;i!FPY%I z={6ZOpf-sxJdpR}^Q^nbta(x?j^c#a{N&8~s{pe}ru-`t-xi5e9^ap6;pa8UGLIn_ zg`v{EX~skgwdfGI8^7{{aY5;y(JH7v5(Y6wv7do)@kC-#?B~%DiV-wQk7m;CHfeiM zg33qx_a}D~{I_0XQ-yp8jV1aSA z^i28NITKqHV(v%$v$g1S(s!YT2o^!`NKVxf3H0{d?PY(lCpo)!O&E;IahZcOJPb`8 z=zqg7p=$N@_JBR9z-|W9ycU&VPxWW~XSBE3fqk;SP4>5fTY3tUH<{8?o0Ge>487CK zQ|}#IZ_Fk-Q(tj6)ITyW_I&xGcd$JhxObT>1Mo;wTU3o^pZNMAUoLN)=gq=oD$UzG zV`eBhE+^R_JC%N_g_>b!q?nzS@*Rm|XH6VQqR`*Fsubie$mFf(F}h*T)h#egTyUeh zU5mOV2bmO4{Y%@|=f7)nfatz{DTE|Wu)G%;EY3HGC*N|U;YmRxET0k3LNm^&^9IfT z&h;>0IO_L@?r+x?cC!6sv zMVat87lH>Po7FWfXLrL|PpYHa1z%s(eb;jk+t!i>OF4maptH;_Pdj(PH`c5l+ux8ExW>IY*>2LiWGlW>^yJq?oBPVtWwOf=wbj?}OLV6# z$-6=u*Y6(F&XW!1b;+k?Jd)eG4`YkZ+E{a_zq&eAeqYV?oqiKlT0=f^(s-?^P@8-{ zWJ5@r6u5TtNwQxR=wWRQB!EdUvbX5RdL9U)nk%NdL zV_Pj-{EH5Gxp_MNMP{YeROxgr5xj*t+>v<&h@@FFvi~JpfPRs-1YTcrynlKXN4zStE&V0eY`%oCZ5try~c@l zQ0dZB6(OnfUyTSfCJTE$@n4YA4AtksN!}8oq`~Bs(JYZ3chGZ+SFYanGCqq29YHI< zCnCj_LLtnsZ0v%{4|WLCOoXb)P1<;8+Sct$=xW3Kzxz&%X<)rKzk>pT)JBm~kJTE(Qxiwnfy$jnICU;%!Se3|e_2dl zR@uj<7$zl_N<{yLyi$Nf^O>hwrSV&^>&U&H7tkVL$^bH)TC*X#l+6AlQEuRaLuclv z8WT&eDnt0!Wq~*4Z-+KLMy(x`9q32vyk^T!I!@Eg+Z3W!=$Zj_ygliYz@w7?u*C)= zRsxGc0>IhKKaCYlDktWxIeX+il2jHu|_vfh!evlUg7q{cq>;nI4V(Un_XAEES3k!M0PCr1qUI;3igwB zBX)wbQXYl9)W!_o-VwILGP4a5ZSQLM>Hh#vhwk^?ZD|HECf6 zj=nT0CQ9|GSkZq<$-Z|dc}QhLH8k9`7oDMmrDTr*;ZmMY+R zqSg`yPj=K z!`Ajb7xXmO7qD)LUx8Xp>S?u{1(`}h$dpC9CooVZhdhczCkaW*v@%i*X|NKAz?gY8 zTSR5=Yj7$!;+?W@5dv12gE42VF3LF;3a1&4!CnAv0_owj1n4FJZj|8*y1#LcL399P zVlD$)i7FxrkcV|scHw=paD(S-VA8Hu*K;117viU+GH2N8eo$MP-Rg9ipIr;49xN z_pha1n1CS>p1vh45 z8r~q5mDB{EZmC8=bsxEc+DKY8X-RQ$&0}6ySL0HX-nOZGsc6Tb299U92S7x3vq3-9GC(zR$+?(q)1wt5KRbkis5P#&%vC+;8C%!&I?PL zFVVcj-RjvbnQ*kFLl#+Sc?RRTn4-J9y8;fUD1V-Wrp5{5l-=#=OE`d4e6k{R_?~Z^ z5J)qd_v1lWcKFr#gl{8%g-#W)HNP zf*_#m0^QgKR0l#gmR<+}p;3$*1r`Vhh?b)p+sc|S4PQ{=C4nC|HK*2N0LWy^khZj4 z^@M>cGV2C-{VF@#8faU>@-M4qFpn^qMHi;uvZ|a=4@C~G16iuf_%(UCny5OXRu}Cc zdn~T7nMM{3NV6}WO&X-zk7@`=5on)65;>=Cf)5;`he6&UDNmuIf>Mp!K_AZkNw|}e zV^a)`;%f%wR<0I5Wt)8IcngI@#ZB}gSgjT^ZmF6-wJxIT^ApcPAT@kB&?%iT_3K+%2AwBor|JXG-8m=vF3B8tqxt~(%oCo z80@IIL`(BnvugZ(|KIPrp54<_5x5s9x-6oi}YVdF7GLyG`k7&j6^7l zE9&s4x3e8@E}Q6(gUAsmXA}N(T}AR8WjU0}PU_gimZLjb=GHac7>m|O2c+@vRefS) zv=Hfhj;4()h6$%7N5=+)eYg|>Yz94}W1imto(74)hV1jkEIj4b^=DR*(&ql&2+#7$ z_tsndMknXIpDQQff4zUxuJk;p*X`n&!64wi%IM5_JsQ)^{m2;5e3{&nCHX(alhOr8 zNI^5%LxaJrn~vG$URh-!7Cjy{-JM^uVX?gWS48ArAGAph@E&_6t+&0wn?>11{ zgd0A@s=uPIx<2U)9po#`*s!TJgXL&?cZ;V!A)#jlb2KFyMA;JrBhBOvjsjm5%yn-- zlfPr78rOE-HEDkQMx8!51h*XOl8Em!CmbQhRc0jh_I%|HW%EDSBP+iQjS=uUu_HUe z@dyvVDs}gQfAYIk_qLIXc~sHPQ!rGdlj%J6Yf$)Sd$`^86Xnsip+25|_O~MM#B}Q| zA2OnqH4bD)!Z2~tElIu%-Ygf$vucokpM`5H9pehf7Izb~WzOc;BI?xW}Y>TdlvN9=84HK)WNy370$!fT4!9Zoroj4=hAh0D! z1>^%)PZGLx?*;Jh(r&ciSMYhA|n#D1kUpiX~QPozrR}!tX7@G3jSiEN$~Bd z?d)MjB;1vI6RE1=!YW!eVw%xV*l?%S^fETbPvniVTHlqh0$K=%7&W=Yi=v*|w#;9V zbYFDgxB7#z+78nr@ReNvo5~I4=huZl`*W?#+c}2=m_}|KZDE<{-#1T`UyJRXIhr4F zl;DW#C4(U9+LYeEnv{mHJ`6Qnv$z{C%gU>)%*S$ZQZZNiIJ5Q!P<3Dnf7S(w+#;%8 zypF*J=xrX0kfP;pHmmi15Mx^D5!QG&DcO?cPl~>>DxieBA*D6gl-n56vKwkRjlcC5 zy5}PEcvO6W*2&4Sp!UFB96vt?)%3jukql;UfPT}U+x?mvMCSmKXjlS(D~fE)i-~v+ zxW`@vctS`TgaePI2UFi0Yx{Y2OvPVGXu1LviD1%F(dCN=LpTpq5#N_iZ;&&{(@3-T zbvsc%OFUB!m`;kmyNHY5`q^!LA~~>`zt;R{M@N63<~|4dEC+n$dnh zGw_u=v*$S&w4xzj>NEQS#3}+dUO@^(h80Al0m!PfD}WrRQ1ZC??lX4iMKZHm=qxIt zf$S%ZiWBhPU>KCyQ#jSq6vf2ExHEXEml)Po{%nEVSoeWKv=AKPD^|Qrx-ux6dY?8_L>J6l;y>_T=47lQR`L#4+1*A6B0b~`z zB-C^nfu*F2gJlITa6Fs$x<^g_^HG!S!m#$y+IaG2XTiXQN6q8*dRXONZRr8~-%3}b zf1&u^{mufQ%)ku#c>obWoY#yrE+BqaOGJB##)%J#gCiR68m_IaG>gx_Q#Ld1>KSDQ z_C&mvG6GC3u&5`8O2GB-UkN!+rQ%gX|PW&Ci7lLLSFf*!sDfzFS zg`r;MZe;|U;T8RLynaE>P}~c=0mXprw}(UrUOLY#j#?n5g~v-5h)Mb88a*J)7#Qi~ z^I>aEt^{GkniLEDO?0ywnfq^_&gF0lC(Kv_3f2S+%%tUMW=y~I-_H}97d?zN^JT0#dRF3NU7ueK=)$=UE}JYhYSA$D zQY0g+w-c4ccR4|(#KXfps^s2tE2jXfipvAS!lB8X;?)__&j2`y03T0Jt=<5d=dTIN za3;-Mmkfs4X;Q;yQ36c!@wp~_PA#0>_?k4c-)US#e2wLpy`Q45ETJWWPbN~bkRHCQ z~&sp=JfWPXETw_!7Tx?QeIa-9YXz`p@#;Wm# zOMLK+AGk#8FFa?%$8m}IZb_^-MX8{qqn46LuG3d3oD|*f+o#^E2q!;P5%PrBB&U3| zV2O9ha8pT1L!-6K(_)CAG!!xyjuF(AMi4iviE=CR7 z-F-CvEn7p%{G*cA#;MBe+&n`fni-7_%FV}$iAjx`bL7*txHvDhDc-FG4+a$}-aW4n z5u_JR(v(-yy-#rZK_8sWk!RJ#2FU%?iAxjm#O7ZwHg;30-JP0K{5w{uR_co{(K)ED6C{Sma81JPUcAt)iHv@6LF%Qd6mg%q=H(wr zw|Y4T^Cc6>dY1f#$Q}hL8G(6At`fyVAe`B{TVl!Jn!TG(o_ z^N&h|>A{Pd8`hZD1ReS#gZmc}#T!9f(G$HRInZ)qg@;$ zA$|S21Y>q<6xztyAZfJ-o!eB}WF1cA@UPw8qLzkr=g%()zSt%%am#(l5ZsL<5SOkA z?#f>O!CbR0!1E@+m+gn~k*i_fPp61xon(}e^MAZ-#GiZE0;#DiQ#thB1DP&RywWV0 z<-z_weUs{%bfDmYg>==ZX_Tq3K0lBivGl;`F3BkPjIxwsO(hDMchAlNPAdOkxMb^5z{8t z_Wj(A#`Uzf70MJHSr#w?z!&0kXL>rO@{M;1<%wR2lvYzL5 zkkLu%V;3G@Km?OoC9Jg|_XAKs8HsbdqaYtnPO;ba0WuT6HsQ~Kp4STC z+^O7YX(d!{U&L8nESQ$d%PYf}I)~xEnD{-7U{rqo7x;&s^m_sVvKNqO0rMWD4TMGa zdqL?Eowc>_m%6f&c#Mv zczms4aAg!EAq#ZI!^q$QDce}w$RInuYFnX|?c(^~j*6NVyjg1%kBNzdv`&(F%`^WjaOy-~hoNOkDB&yrzcYGbjKw+%c> zj+5S4NSDkL-@sj;X9}E|H$4%Kicf(hM$XMFDkZGZMt>&>8_&k2k1;Of?LTR9QC#46C3^f#^ti~|0*oV>(-CH2?qiyh-5*dXwJ zJ*9^^tU2P);%^f)}!ceOM6Hgndc!N%bJ zc$?TOvig%(YiFoZZcAO;7Y{Yo5J!r~f0b>tFspsF{x^j=y`~lc!(3!ymW`Qo%RI2+ zjXy!xdus}47^0a2X!Da_e4?8AeW`f+_b2tw%zW~i8ZX+qy8kGRD5X-}iqhN>5y{Fc z%WWcqp^>NYPpNkI=nXKj5WbbC-}?(B4r>Xb`W(|Jz?) zNgOFx7Qg?dQ(62A$N=MlYPtl-#l{GrE>6DqB;44_6OYQra^c!Ym)JR&)*IptvS{m5 zUKxNJ@U`d(e($(ED|DZOKo;23NRUhd6jFKlmRFc@g6f=FASW&{;RxnGPAwWilStG^Z+66Gbe2;jq5BOX)H3=A;mA^s7hJW}ltw9n`5}KZw z31sX9o1LAbVT{2wa~~amMOGinhPS%2v(`Rse|_bX{gmXj~BEwtlA=h zV)_R|R!t!@g(=HqPrMA)o7#w8?_FE+if~IyV_WZJ@(LbNo}8O~lwe3}{I#3K_1ZP4j8OKq%Ro^^Ql5x+pgcdn zC0hx!-;MJXU+1MAh!{!lrFbEh}FBALpd zK@(}R&4PG+9YVYCWA(~NeE{G6K={>7pn~wwJWcx;U&UU!c$;@!W*!Dra zIpV}yO-@3|GpAD%KmZWP`fsadF}94YhgG{~LrVt13y$B6G-hNvOI<$DE=HA}3_lT$2`A$T~vT^8kof_@7Yl6JQl~;8nf|r*FTCJdc!MZh1#(410zx^f-Wu z&JX+bmAA#GGYH<|>vrgMZ9AQAbiMy)o5=Jcp5-S=y%<1nl>LI&-)BF^bgwtUL!a-e zhD*#};n*IPzk_Z+#-zrtv;WlkIk>*Sbv@p&_ftty-RS_eYI^X(E;D$(b#h*eYqvwm zDJp(Kl8zIP7e2$n`V8td?r`SgLEBBw9f9Wml;&mn6Gy(KBCSJ5@Sj##(E{;rfp5DK z5Y+3@X`nIApDK4$Uv!vGr^JQaMJEB z^$*`A^kwW~mRgdo-lAe}My1wZ@5i~Go;(*4K765<1VYn&7y3R4{7Bc;@?5CmUl2^B zLv1^4WhTC4ZG7qMXA=Hc4gEHs{6?gPA{8xkA@3_&EQe)tSwmlZSe45r^hyWCSLMscGv1{a;a&JDBGS^!QcJuln&!Nx+3dmO>FBrSL=61slR* zQUP^Y^|}jBVTB-SaY#<)`ZposdzJ-WpUzHNmRiBNj*j+hOO)QHPK8ed8%*5mCSK`J z?hOS}U%CI*9K3Q7p_!Pzf`DwXd}|V1jZTexB(zoskh`gg!S#p@nH6d#;jnzoN~I(t zMS4ri3V;E)E3K^$zT!w?Ld%#)<6ib^$e_{Ml?)6HdNYiplNFwuR&pRY|9T!IhQz2xTl zM$2j_n`Q&jE1x}ccpr@nsTK9kjXXuh>pUOMy0^^+QaRtju7f_iO{cAVfK1PRKX^o# z#u6UYysFX4{w6+~S6%Hu8U%8Ecm$4m=1Kifv-jhD2|e5JF*uJun4uqTzNfLVykoWP z{2|E5`f2f=h4FFHz2Dp2zc0m5XC6G5IYKesc11<-yEw+{zVG$!0oBk3bN*fBaE_Q1 ziSNw27bs&syJWC;VMHO5^pXS%5SS!Hj6)R_6^m)neKd+oj5Fxel6&{S4E3nAw9E-P zh%qiJFXwR2F4&o@Fn&W7ih!IyUHHT9_tPw)BCekn51Vy^CKZE=B|WJhz2@;HXnLb; zp;tevBt08(5Aqy0Kr@`1z-X zSL%jU-)$a7&M~qFL`J5V9Lh6?`UFQwlO`DK^3r^8nQ;G53%^}91Sk+-38MxE?r!e- z-bbmRQb>tN%sCQ?aoF`ClgZImgV7-&I0-N=BrNPak_HI7C1pbc;BMV28+@a{29|2d zh~$?Pu^k`24FXQsLUg|`u_4Sg29p`+QT;}9h?a{UlcSMtR7**^o1%M?n5fWN1^VZkwJ29lKw-ACvon$=A?5JK<&xA@ z&FFX*?4>t>EY{t%ZmTpGT}uH_Vy3| z`F$>2$OfYE7aXM+9XdL`@6BcO=zP&nQD+g^-*%(7dty=Ig+h(3itspVOhXl9YC^6P zV;nc`P825kG`rl~RhqEa$1;?D3rh`4qa>k0D=X`QE*!bd`nSHO`7~L}#AYJp`(8J= z#onyP&D@fYdR@gP;R(st_gzYN)&)7jEzFp)T-=HL`0s4L7X?jbPKqM5#IP&E16|{< zvjv*fo|)e!&f8y_mP=&qtYrD^_4l>(e2Wm3?NZL`v3Ub4+Eo^L2c;*}0&I)^lZno3 z87=MbFg3OIE9NeEU>we5)G?-X?ywF@S5+C__#bU=9uMXB{}0cYF$Tj7ChNqEZICTwDKYjT zS;tbzQj;j6Fzp~~bza+fUE6uJHE@<$PkvV$Xg@-{kj=?%d(yvmhmh0R)*UjdqefFn%2jQb)isxu}?+R&-eW50P;`nM0I*!YazYn1!+wZIFklHUKoJ`DqEoL}`#X47S9oRi_mz40Q zS;)&m^;Cq!Qy<*-_A|8_^xF@QW8*fS4_7PQ!fLYXP!JGXjY>e?+pyVeGk8%9vFeg9 ztM#fY;N=a@_?f|%oe{q)i7I-$fvNgOa=A9*zhruK1Lt6J4`+KAxgBN{4J(bN*#xm? z_n(OgH`9%_jM%T{-mAnoiaBm7Iu7?u8`tkVQGUw98dH6z_<}%(`qPhTAB-7hHbk{! zdDF;aGolXG;y=e9-*lrcp}DnNKzcdfrC_0e@DI`kM2A-2U2+_`vm1kK?F@+bHg&jK z+k}Hg0_Yx0m0W%dPuv@hmTrlw}5a^)aN9F?lP>8Bm?*^ZYydd9&o&0l=qh=|K^ zwr)f1$uOOm7yCY9PBq0f%Lv_keri)(jB~QbmoK(Om{ImlZMHOX(h|RT z`(R~v>I%^VP6_dHKP;vVdCv00=oI^R?+qAo=Uvb9H0D=>ZQpC8eVLgx1dsBjXC7zh z$EGRjcd~c&+^BflZfmzZg9yrsyzVtkJD9V>pBV9dP5VZT=ucPA%w!Dr>o+-08pbhW z<+E9OAIisdZn$=kUL+~HzNN2h6ruMkdc%;+Us;#SpAb8UNAo&Vc@tKveQCGvbN0Ka zZn=SQHT`aV_S=KsmRs6#tz2k^u#3Sre6o25MbFLu`D{Qmtdr+ehJ_P;vxL${76c#e z`{dit+W###_y(PlH{RpQ5xzsGe(yzB zc5)R?wd7eQ#}Y1aU-i#+QPbtW@0dE<6U8jHi&{Up?!Qwn!`fPwvSx$V5+FHDibUvQ z5=cgp1`J#xmU4&|aoFfvVb0+%r_GP)uzupiUSW)H*nD5&5lM|mBmLf>jRVRtpYk3c zPV4Qw{y8a`o0}&~S=LfplF3YxKa1N-6*o*vB*kQe>Iolr7eB<^lIw`VBv@2=>yL9d z-}6sq2snIs5%SDPw?=xq0qOU_$ry6W<3SkLEpggo1n-pO=tNO{6Z}m7$Mb-6>6jQT zwVserYzpdJICi47{b<_o+S_A!oTI*Ba3up}(_o?Jn|55S4ofT(M@ZTC-8q$5vgyJ5jjW8HQB9H8LDy>;!Av;jT4< z8yE<)5yH>3D-S2ep3sf6+w-gL?^yaQ<(Z@1_~RkV_1Df4@M zF9fKkr?(h`RB@rN@?3faTI4-{YUonLewHH|S`;!Lt(ht?6(-psKVQ^p-+edtS69^) z@e`5nNT9&Mi^ygi=f$xDB2MAs3qL~_24Iq%z+`$>Cu$03XS27hNWnND*ANCr)Q1ub zfwVkOCZb3dr|hqtvU)Vl*cJA!_Qi^>y@YSTimGdma_uu?S8gDSSbupr2#yFbu|kBr z+hNj78yWU)G738Yzi}01kfi*nz~^?S@*zB{)gVgywfw==rZdvxyI(~j?IIru;WE&1 zZTsvfHvPGEMH-v)ND~3ae2cO>lu>#d)@6+h&IsvQ#TxvTJgq#9?W4Ln$1EZZ6S@(l2e?v# zMp+KvZTn41zQ~6{GFqFPxk5G!*W}3*p99&a~85`&Q z01aP;=b+P6pSR-&H3ENPwakAz!m>-y1PlwgXHTL_s<)HAYpd?3uH#O>MlgTU6-|%T zA?>$`N<>cb7)3kJ>nWe9JdaHy`tI+_h0W+-HIQu&_Fy$(NAp-A`;&cl!lRvcY)KJL zQt`UHyZtYr?;Xu5I&Q%(LE#g}3yc^CuGHOH%hbJW+wL`8(AW8bS_rRLPh^5ML z8-@7b7iUI7#LK|nqG%`{nyRY4k#)IHmD4Dp%0%qA;795xQ-W%FT9*>NcWF2WQMHgi z`Zem(Nu^C>jr-gT0sV1jxSb7L39D^(+M)<1taDakQZMl1P-2UDy{|?7F`p4!fzkao zyEd600||XDS#?{4Zxd_x!h=(m1fu5!h^JLabUH$u(2o6A&Wb^6 zI!P{O_B2nNq=G1$t%S>QavX=pYMSY2xnZ+TP7YkIr?WGOt(?*i6V|*(dvKF(2Q$&7d+nZdUdYYQO_e_98i6^xpn(wC{S>;S3m*O=V z&60~Vw-uKE#e+K%xVw7mS=@f^BO_#E8=I_B>e=(>M{RsOxx$&`l{uql?&v}yGv2OK zu5(`M{s{<)0juuO+XK*1B4%=@y^DT>BVJK0#pOv(PJxDbJO zuU;&jo|`D)1H#t?q|TR%R-qP~c5h5tskt~^#144VfK|#c->#QiU|kS>HyuYg=DdDe z=c{=-QlQ(i@g?>yYo%k455_iAB}gnoZ2QXxnxAfVtL?p$Rb6N$-Y`2QB{5XG19je* zSXi7dYAtS6-SZSTtr*`smH6`0#ZN7f7?!J!;b{IsKHd?t)0y_ph%M$(qd#(bj}mFh zz@!P=Sd?I*ao%@ACFH*HJF|f?+?|)!uQ41go8Ze`9a8yFBC?|5vT_Mzo=t^A?Nv(F zwwAE`~zpd>mZ?Id;=&9Q3=xPPjuzP2?t~_{6#+r>t>f(%)1(<_?;( zp+H}Ob#<*~V!?1?U&`ynmSvT?qvt3q0jhd&{h{zf@WXJE)IeSsJX~$frleFvq=#qY z$~8}+wGXNr*$$7<<4%b;PfV4oy3M{Sj~D07s;pv-%VVhXUtE`HYAavWL3XuAX#F4S zbuj9IC=N(iTcL}NqRvNQWVLbld9cUaBug09svU@;5>>S|`Yif%hqRIU%SM4Zt)LrI z^EL{Zu)0pLZF=WTbzUWS{B&M&qj9gTn(=)7Y(EByH=7sGJ43>55N^ere~MgYl1Y2# zCt_XWmrGe*XHPz2lT(*7S3G_aM*BGVM(>LV9+iaR_hsdkVCO?c)raz11dp1!MRHRV zciyZGq@SCQ;(lRn@#PNEjBPCDeTQAg$P?x%ekD`+v%I>(h2OP*&D30%##U1Nrb%Db zK{C2&j-n;r#FsB9X~Y0udXUi=8V-<2z~^s~CCr=gR_lnWV<3$jS3~=&KH$cJ5#HF; zykLk_XhgBq)~1rct}{#5Z3yhpZ1sHo(7Iq(Kaf5cVxv`R6UNybSqgTTG=tc9f}vlD zjTVc|OHH9!q-0hZaq=y|-imfnag&a@WeTmV+*!}9A_eSLq3v92>f!)@2u*GJfP;+A z9?lmZE=1bk#E;>zpJ1=(*Tj_Xdel0>W0oiT*N4ANypq;_y>y8WvSQerqQUusf_{i6 zM{RUblE=w_bPgKBL*W)U3k!I+Z$7dF)}z`-_%))ds!{o>Su~%lZK|Sg_I=LG$l1rV z&m73;XOXfS#db;(NW6+lcIL^rLBgjM%li63!l%gv(lPRYIntp;LF9aFlgOlAy{K(y}WNdaqX^I}j&3?c~q1?K;2Mkv&$S8CVs?I?rYH78}blE(z^L;IYO0gxm z@rBG9!o-E%Z6ecF!PEFmZC^iq9iUR>f%LHuXv|@;x{*vU(0PJhY3H-)I3ZPD2@lkmiNw;3R$6ZW}&wm z7$9%;tFND5(ZA#C35i-7i3&6AizG7}30Cu|#8}IC^3t0qDvOOf&L=Mb`DQXX`H)mu zu|>taGDxcB)VK;DfuX9Zn!4eQKwc$oV1SyP=9GEawH_KD2*Nl8J+TW7-YoPpX75I$ z_4f!?5cZVv_V76a!8{vHbgCa3Si_9E(cT~HOP>^0kNy>wEcYiv{6k~>0)U=ATEM4z z$r7NRDc(fY9~yD2A(D2D4_{ckIZRwQ#8+5&T&y{axJy{->57IRjJ7hi;(zQ&Dw;V_h^V?n)6~|9OWo6~& zuPV;&EwQOuuPLqb0){o+)HVZnINI0QW2EH9HRIhT3=Vp$503$tGe0{q#eN)BMX;J} zwL2o5ly6z|NHC42>H z>PJ*9?$>}^gSPD>eWQ3_{7a_h`2#28#VaYc_`rYF#+k6+jRvU=$JY-@=K-G@NRJJH z{9oA8zbYDdAU2){hFr@kWrqZ(TBO83$|Q60Qv)GWC@RJTm4TL1$~hHPaX=CA`)cZn zrhgC^O>OLHKA0u;lY3Y@eYg;5gQ;%AW9x80+Qd|(J3sEO8Baun=T6;Z!n-Rc;_D%z z4g^v-_+#D8ld~)q#}}0xBcma?VSGX69LOfV?vy3Ox{!bfiK^=wkRQ-yx#}As`@pW7 zsd+isjnBJlRxTjw1xYq- zkFlUKwr_MQRF)YQ!^w|_%0h~YIidgRX!)TEsI02#a82DHR2J6MHXGh)K&@B*D=Nwb zAH0i-ih`{H01U&dU(~5eRMY^R2ggt;_(7!rz?KUg0wDgog-ZWt>wpgyRCnt9M=xSx zVh|+`ulK-2<&C;>pd#?W@PRi{E8%ek2BM!UuU9!ta5PXm-t1L>L}46qZX8Oa0! zxuZpnjW7F`i>jMaA=}8T;N<74?*{r`R4hvdZI1FmtN&M*QQDwO@;_7TySF~vLHq~E z=7z_JixW_XQ`$?jy!duQ@U|1*^$vN-_EUi#mCP4YcU%7Po;^fb4_x7kM^V=VB_ltB zX%_N|tW_NT>jKn@ECKnRXtjGWN>z0uU;OrhFGrjVULm$Z#qq_($-upo+M?G%2oVSe zmQ&*6Mk5ONLgwi=8(2!GiN~EPL->S*AxD9wMluD-vB1X>;(09gW8$Ti3KVEVNOwp= zBRij41njGiT%7r*tQ?vn-2PTn;rYNEXf<^cO`sj|wqlr1XAdyB_=-G`)9O6%sg=WH z?E`X+tRa}i@FM8;SQ;LC;^Ai_GUlNDho%rx2EEaNiMI~5lU@26F#YX01 z&wxFwX#o~YCyP?&$lwh~Fk-I05vR};8nL-=5g!|Oc0UJ;DQ5czqruaSrL6u)k zU?08Z2shh`kCn0}M?$k3vm!RWg=A?#vjOL9qvL?{PtC02EJsm&%<{K^DF~XSkmhCO zHIOH*sPfxh16gDp+M=m#=n<)~uCpiIn+w^_pekn=lKL1Agn&6zAoW=uJ(qfI^%9>} zQ@WJ5!oZX=zyzeXe$q<5GM|r=WEKPh4+w;3e$JZ|r%`^3nc)o@dS#voCLm;%255|= zJ*W@)QltE{rsjUxNf^d$@4q-44$@ZukiG(d^c4UYy*8OSti;Cwfm`9oY(VjX2F5ov z6DtN?&53IN#3 z0RUS%fd4;rDhO5_iJ8G?Kw*FL$z#Ld0s3dNDduy&ghZHqNto>TuDcR#<6ypPmXHXX zkO1?YxCHuzB;d}nWDOwPcM{?h4sSjp3w-ecfk#x$gnZqohPKgDeMllkQ>H))rRMB0 zpTCllkOU+pB_Rm_09yk9kck73gro%E|GZ9N9@LJX;eWIsB?a{&B_##*0s!g-fE46o zrKHGxcfJwKG5k_nOAzsDp9j`WtMmr3uelqo=9agw_H6X;i3yCO_ zNvw|rXT;;#jVv})_O3ZK)42^Qc@+zmAyHrp%X;diXD;5W#rxgV+K9VhaFhPynDo0r;P-1N7V_Xv=@~ zvH_xG!-fqIB>*5w06>%gfG7d*KU4==ALgG<7-st${;L;hh!SaOX^0X45G4S7IhUVH z^QFnCxZ4Xx&U|TU5LH-_ZS~PUR4DRs9>%yqK7tl62Bs!)=%NUUv!Tc*jD?M40&i@g zjf;(+0CH<)vDp%-kW4f6CBYOA_PFSxVx}-8)3S1+NJU>{oOsn>jb0t}w^-4pHdUp9 z{Y{-~J+&axe9MuRUa6OU3-+YT8l-oD-QB7_~BY`u>={_U81V~y?@=@?7wb~Q)g;UsZYd=?&izL00R14 zosE>C0BuzhL@@Cx;Cc-NXhhWzXhs58NlfVaB1A1V9-|J$-z;`bDq;0aR3?oK{(nb- z@xo70MoNhcMNDPo<^RSnRANot65yLINN7aqNH&pVLd?VkuuRcd%_3NQ{tXvO&1 zZBiB~Jl_rckR~!S5w@^o!IuI3CaMqrSQm?fbsO_#!Cbp0=`0Hz2U-rAcyaiAaam~k zCb(gVs?gkl$7yI!Kt4s^s93_35-J0(ntjbQ^!5`-oNfelUiP84oO;_2d4W=!^}t@fJeX3fB$0i9cIfJ>0*9|@2bbLCvIJTO5enVG zwT(6u5EXao8&SIIpF~kj&3S);F;V5g4>EcHkf{NHObq~JY5*Xk2k`$~=NCcLK%U$- zHU$RxoDXV2oB#lE0syMHm@Xf=O~Qs z?h4>W%NG-wd7 z8F1MP9H=Zm_GwWuRK^=CD|dSil~q)=jn_bBbs8_4+T?iYKk_HN|0+N$RiOYS|C>Ht zGDIJvO#z}Foc^bjK!8fY@@^3I03hlC5TH5$pgI8lXX*fMg1(Mz|BqfaZiFb=xN##y z34o0dB>*5w06>%g_#djnW8_+GjA{RmUKAA}N)*8lq6C1=Z7YDELKwpZu``I1LjF{qlJ9;g$&h?um;V^&E~@)VeB7}8;)d}{)~lgKEyAv z*wD>~vR|p0wBL~H10MS`xNG;5P^`aNR!%!Rx5}%~tNL;v3f$08RCNAo1EO0+sc+;? z;6O`zeC@!=M+-%xRM)XcM~>4xXJX26cK(FJJkN=L+|qT)VV>jUwDNTabkWFDRQ$R_ z=^w8U>kKSw9rBPMfU}c@<`{yXJrU4aqB^UgO?Q9-e0`&LrqshH#m&R0e5G|@8A@d5 z{4G9!wpBNpsj)BQp#7!->5wk6OhUp`O(6#z$>hdD?lC^hjKzlBBW`PIX5GKRY1`(1 zgVR8RvU2Dq1=6shs-gyRNp;RfO;Bjvw$j-%eCi)}!5ze~haq<{HaIZ_U3z3D&+@2e zZkn6s@Z&oVE~WVSbL{y_;FeZ-jz!9Pd@3I}wO2Bd=4oJTKmHwC{ONzkX3F|^Z0j1@ zoe7X|fWJ#Lty8v0F{dW+iIAfJsbC>T0RVCo|8BX^5#&t3@Bh3GSnV8Y2mF8jwAFvL zK!SQ9kw{Q403de+fCTjdU<)V(05qW~Ll z&Axw*9RSfXVGxqh#8l^OX4{)69{n*t;Q?s?%%bQgB=ss@-vY=4>^8(#F12Ylk^Bl6 zSu_kdsfELr_5I69TkgM{e5awE+5aym^&gqi7R^)4$NnlqOj1@>hK2|L8X^E_hyawK zAp-bs>v)-^6ARm3fjYPOpzeP*1l@8_X50Kn6X0`8s2c!KHvm+iZU6w|Oj046FM*a) z)%gE!wIE_ZWvCwjRwy$w6_|< DBu0IgD?Q5U>T*C8g*LPi?Kmg5 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
v9F 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 z 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

Va}I?3zsjZqSGtmfxu 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 literal 0 HcmV?d00001 diff --git a/mingwm10.dll b/mingwm10.dll new file mode 100644 index 0000000000000000000000000000000000000000..83923d7f0f4f0af3d587f149ef1fd81d599e41c0 GIT binary patch literal 13599 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 literal 0 HcmV?d00001 diff --git a/pixelshaders/HDRTV/fragment b/pixelshaders/HDRTV/fragment new file mode 100644 index 00000000..16098b90 --- /dev/null +++ b/pixelshaders/HDRTV/fragment @@ -0,0 +1,14 @@ +//HDRTV GLSL shader +//license: GPL +//original version by SimoneT +//ruby port by byuu + +uniform sampler2D rubyTexture; + +void main(void) { + vec4 rgb = texture2D(rubyTexture, gl_TexCoord[0].xy); + vec4 intens = smoothstep(0.2,0.8,rgb) + normalize(vec4(rgb.xyz, 1.0)); + + if(fract(gl_FragCoord.y * 0.5) > 0.5) intens = rgb * 0.8; + gl_FragColor = intens; +} diff --git a/pixelshaders/HDRTV/vertex b/pixelshaders/HDRTV/vertex new file mode 100644 index 00000000..70591d55 --- /dev/null +++ b/pixelshaders/HDRTV/vertex @@ -0,0 +1,9 @@ +//HDRTV GLSL shader +//license: GPL +//original version by SimoneT +//ruby port by byuu + +void main(void) { + gl_Position = ftransform(); + gl_TexCoord[0] = gl_MultiTexCoord0; +} diff --git a/pixelshaders/HQ2x/fragment b/pixelshaders/HQ2x/fragment new file mode 100644 index 00000000..0bf24db3 --- /dev/null +++ b/pixelshaders/HQ2x/fragment @@ -0,0 +1,49 @@ +//HQ2x GLSL shader +//license: GPL +//original version by guest(r) +//ruby port by byuu + +uniform sampler2D rubyTexture; + +const float mx = 0.325; // start smoothing wt. +const float k = -0.250; // wt. decrease factor +const float max_w = 0.25; // max filter weigth +const float min_w =-0.05; // min filter weigth +const float lum_add = 0.25; // effects smoothing + +void main() { + vec3 c00 = texture2D(rubyTexture, gl_TexCoord[1].xy).xyz; + vec3 c10 = texture2D(rubyTexture, gl_TexCoord[1].zw).xyz; + vec3 c20 = texture2D(rubyTexture, gl_TexCoord[2].xy).xyz; + vec3 c01 = texture2D(rubyTexture, gl_TexCoord[4].zw).xyz; + vec3 c11 = texture2D(rubyTexture, gl_TexCoord[0].xy).xyz; + vec3 c21 = texture2D(rubyTexture, gl_TexCoord[2].zw).xyz; + vec3 c02 = texture2D(rubyTexture, gl_TexCoord[4].xy).xyz; + vec3 c12 = texture2D(rubyTexture, gl_TexCoord[3].zw).xyz; + vec3 c22 = texture2D(rubyTexture, gl_TexCoord[3].xy).xyz; + vec3 dt = vec3(1.0, 1.0, 1.0); + + float md1 = dot(abs(c00 - c22), dt); + float md2 = dot(abs(c02 - c20), dt); + + float w1 = dot(abs(c22 - c11), dt) * md2; + float w2 = dot(abs(c02 - c11), dt) * md1; + float w3 = dot(abs(c00 - c11), dt) * md2; + float w4 = dot(abs(c20 - c11), dt) * md1; + + float t1 = w1 + w3; + float t2 = w2 + w4; + float ww = max(t1, t2) + 0.0001; + + c11 = (w1 * c00 + w2 * c20 + w3 * c22 + w4 * c02 + ww * c11) / (t1 + t2 + ww); + + float lc1 = k / (0.12 * dot(c10 + c12 + c11, dt) + lum_add); + float lc2 = k / (0.12 * dot(c01 + c21 + c11, dt) + lum_add); + + w1 = clamp(lc1 * dot(abs(c11 - c10), dt) + mx, min_w, max_w); + w2 = clamp(lc2 * dot(abs(c11 - c21), dt) + mx, min_w, max_w); + w3 = clamp(lc1 * dot(abs(c11 - c12), dt) + mx, min_w, max_w); + w4 = clamp(lc2 * dot(abs(c11 - c01), dt) + mx, min_w, max_w); + + gl_FragColor.xyz = w1 * c10 + w2 * c21 + w3 * c12 + w4 * c01 + (1.0 - w1 - w2 - w3 - w4) * c11; +} diff --git a/pixelshaders/HQ2x/vertex b/pixelshaders/HQ2x/vertex new file mode 100644 index 00000000..488a870e --- /dev/null +++ b/pixelshaders/HQ2x/vertex @@ -0,0 +1,26 @@ +//HQ2x GLSL shader +//license: GPL +//original version by guest(r) +//ruby port by byuu + +uniform vec2 rubyTextureSize; + +void main() { + float x = 0.5 * (1.0 / rubyTextureSize.x); + float y = 0.5 * (1.0 / rubyTextureSize.y); + vec2 dg1 = vec2( x, y); + vec2 dg2 = vec2(-x, y); + vec2 dx = vec2(x, 0.0); + vec2 dy = vec2(0.0, y); + + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + gl_TexCoord[0] = gl_MultiTexCoord0; + gl_TexCoord[1].xy = gl_TexCoord[0].xy - dg1; + gl_TexCoord[1].zw = gl_TexCoord[0].xy - dy; + gl_TexCoord[2].xy = gl_TexCoord[0].xy - dg2; + gl_TexCoord[2].zw = gl_TexCoord[0].xy + dx; + gl_TexCoord[3].xy = gl_TexCoord[0].xy + dg1; + gl_TexCoord[3].zw = gl_TexCoord[0].xy + dy; + gl_TexCoord[4].xy = gl_TexCoord[0].xy + dg2; + gl_TexCoord[4].zw = gl_TexCoord[0].xy - dx; +} diff --git a/pixelshaders/Pixellate/fragment b/pixelshaders/Pixellate/fragment new file mode 100644 index 00000000..ff94deea --- /dev/null +++ b/pixelshaders/Pixellate/fragment @@ -0,0 +1,36 @@ +//Pixellate shader +//license: GPL +//author: Fes + +uniform sampler2D rubyTexture; +uniform vec2 rubyTextureSize; + +void main() { + vec2 texelSize = 1.0 / rubyTextureSize; + + vec2 range; + range.x = dFdx(gl_TexCoord[0].x) / 2.0 * 0.99; + range.y = dFdy(gl_TexCoord[0].y) / 2.0 * 0.99; + + float left = gl_TexCoord[0].x - range.x; + float top = gl_TexCoord[0].y + range.y; + float right = gl_TexCoord[0].x + range.x; + float bottom = gl_TexCoord[0].y - range.y; + + vec4 topLeftColor = texture2D(rubyTexture, (floor(vec2(left, top) / texelSize) + 0.5) * texelSize); + vec4 bottomRightColor = texture2D(rubyTexture, (floor(vec2(right, bottom) / texelSize) + 0.5) * texelSize); + vec4 bottomLeftColor = texture2D(rubyTexture, (floor(vec2(left, bottom) / texelSize) + 0.5) * texelSize); + vec4 topRightColor = texture2D(rubyTexture, (floor(vec2(right, top) / texelSize) + 0.5) * texelSize); + + vec2 border = clamp(round(gl_TexCoord[0] / texelSize) * texelSize, vec2(left, bottom), vec2(right, top)); + + float totalArea = 4.0 * range.x * range.y; + + vec4 averageColor; + averageColor = ((border.x - left) * (top - border.y) / totalArea) * topLeftColor; + averageColor += ((right - border.x) * (border.y - bottom) / totalArea) * bottomRightColor; + averageColor += ((border.x - left) * (border.y - bottom) / totalArea) * bottomLeftColor; + averageColor += ((right - border.x) * (top - border.y) / totalArea) * topRightColor; + + gl_FragColor = averageColor; +} diff --git a/pixelshaders/Pixellate/vertex b/pixelshaders/Pixellate/vertex new file mode 100644 index 00000000..898112ee --- /dev/null +++ b/pixelshaders/Pixellate/vertex @@ -0,0 +1,8 @@ +//Pixellate shader +//license: GPL +//author: Fes + +void main() { + gl_Position = ftransform(); + gl_TexCoord[0] = gl_MultiTexCoord0; +} diff --git a/pixelshaders/Scale2x/fragment b/pixelshaders/Scale2x/fragment new file mode 100644 index 00000000..c72625ae --- /dev/null +++ b/pixelshaders/Scale2x/fragment @@ -0,0 +1,28 @@ +//Scale2x GLSL shader +//license: GPL +//original version by Pete Bernert +//ruby port by byuu + uniform sampler2D rubyTexture; +uniform vec2 rubyTextureSize; + +void main() { + vec4 colD, colF, colB, colH, col, tmp; + vec2 sel; + + col = texture2DProj(rubyTexture, gl_TexCoord[0]); //central (can be E0-E3) + colD = texture2DProj(rubyTexture, gl_TexCoord[1]); //D (left) + colF = texture2DProj(rubyTexture, gl_TexCoord[2]); //F (right) + colB = texture2DProj(rubyTexture, gl_TexCoord[3]); //B (top) + colH = texture2DProj(rubyTexture, gl_TexCoord[4]); //H (bottom) + + sel = fract(gl_TexCoord[0].xy * rubyTextureSize.xy); //where are we (E0-E3)? + //E0 is default + if(sel.y >= 0.5) { tmp = colB; colB = colH; colH = tmp; } //E1 (or E3): swap B and H + if(sel.x >= 0.5) { tmp = colF; colF = colD; colD = tmp; } //E2 (or E3): swap D and F + + if(colB == colD && colB != colF && colD != colH) { //do the Scale2x rule + col = colD; + } + + gl_FragColor = col; +} diff --git a/pixelshaders/Scale2x/vertex b/pixelshaders/Scale2x/vertex new file mode 100644 index 00000000..6e172cd1 --- /dev/null +++ b/pixelshaders/Scale2x/vertex @@ -0,0 +1,28 @@ +//Scale2x GLSL shader +//license: GPL +//original version by Pete Bernert +//ruby port by byuu + +uniform vec2 rubyTextureSize; + +void main() { + vec4 offsetx; + vec4 offsety; + + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + + offsetx.x = 1.0 / rubyTextureSize.x; + offsetx.y = 0.0; + offsetx.w = 0.0; + offsetx.z = 0.0; + offsety.y = 1.0 / rubyTextureSize.y; + offsety.x = 0.0; + offsety.w = 0.0; + offsety.z = 0.0; + + gl_TexCoord[0] = gl_MultiTexCoord0; //center + gl_TexCoord[1] = gl_TexCoord[0] - offsetx; //left + gl_TexCoord[2] = gl_TexCoord[0] + offsetx; //right + gl_TexCoord[3] = gl_TexCoord[0] - offsety; //top + gl_TexCoord[4] = gl_TexCoord[0] + offsety; //bottom +} diff --git a/snesfilter.dll b/snesfilter.dll new file mode 100644 index 0000000000000000000000000000000000000000..6cc0169741ef68442316bc97debc084d35ef318d GIT binary patch literal 92951 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 literal 0 HcmV?d00001 diff --git a/snesfilter/2xsai/2xsai.cpp b/snesfilter/2xsai/2xsai.cpp new file mode 100644 index 00000000..75923a0e --- /dev/null +++ b/snesfilter/2xsai/2xsai.cpp @@ -0,0 +1,132 @@ +//2xSaI / Super 2xSaI / Super Eagle filter +//authors: kode54 and Kreed +//license: GPL + +#include "2xsai.hpp" +#include "implementation.cpp" + +//===== +//2xSaI +//===== + +void _2xSaIFilter::size(unsigned &outwidth, unsigned &outheight, unsigned width, unsigned height) { + outwidth = width; + outheight = height; + + if(width <= 256 && height <= 240) { + outwidth *= 2; + outheight *= 2; + } +} + +void _2xSaIFilter::render( + uint32_t *output, unsigned outpitch, const uint16_t *input, unsigned pitch, + const unsigned *line, unsigned width, unsigned height +) { + if(width > 256 || height > 240) { + filter_direct.render(output, outpitch, input, pitch, line, width, height); + return; + } + + for(unsigned y = 0; y < height; y++) { + const uint16_t *line_in = (const uint16_t *) (((const uint8_t*)input) + pitch * y); + uint32_t *line_out = temp + y * 256; + for(unsigned x = 0; x < width; x++) { + line_out[x] = colortable[line_in[x]]; + } + } + + _2xSaI32( (unsigned char *) temp, 1024, 0, (unsigned char *) output, outpitch, width, height ); +} + +_2xSaIFilter::_2xSaIFilter() { + temp = new uint32_t[256*240]; +} + +_2xSaIFilter::~_2xSaIFilter() { + delete[] temp; +} + +//=========== +//Super 2xSaI +//=========== + +void Super2xSaIFilter::size(unsigned &outwidth, unsigned &outheight, unsigned width, unsigned height) { + outwidth = width; + outheight = height; + + if(width <= 256 && height <= 240) { + outwidth *= 2; + outheight *= 2; + } +} + +void Super2xSaIFilter::render( + uint32_t *output, unsigned outpitch, const uint16_t *input, unsigned pitch, + const unsigned *line, unsigned width, unsigned height +) { + if(width > 256 || height > 240) { + filter_direct.render(output, outpitch, input, pitch, line, width, height); + return; + } + + for(unsigned y = 0; y < height; y++) { + const uint16_t *line_in = (const uint16_t *) (((const uint8_t*)input) + pitch * y); + uint32_t *line_out = temp + y * 256; + for(unsigned x = 0; x < width; x++) { + line_out[x] = colortable[line_in[x]]; + } + } + + Super2xSaI32( (unsigned char *) temp, 1024, 0, (unsigned char *) output, outpitch, width, height ); +} + +Super2xSaIFilter::Super2xSaIFilter() { + temp = new uint32_t[256*240]; +} + +Super2xSaIFilter::~Super2xSaIFilter() { + delete[] temp; +} + +//=========== +//Super Eagle +//=========== + +void SuperEagleFilter::size(unsigned &outwidth, unsigned &outheight, unsigned width, unsigned height) { + outwidth = width; + outheight = height; + + if(width <= 256 && height <= 240) { + outwidth *= 2; + outheight *= 2; + } +} + +void SuperEagleFilter::render( + uint32_t *output, unsigned outpitch, const uint16_t *input, unsigned pitch, + const unsigned *line, unsigned width, unsigned height +) { + if(width > 256 || height > 240) { + filter_direct.render(output, outpitch, input, pitch, line, width, height); + return; + } + + for(unsigned y = 0; y < height; y++) { + const uint16_t *line_in = (const uint16_t *) (((const uint8_t*)input) + pitch * y); + uint32_t *line_out = temp + y * 256; + for(unsigned x = 0; x < width; x++) { + line_out[x] = colortable[line_in[x]]; + } + } + + SuperEagle32( (unsigned char *) temp, 1024, 0, (unsigned char *) output, outpitch, width, height ); +} + +SuperEagleFilter::SuperEagleFilter() { + temp = new uint32_t[256*240]; +} + +SuperEagleFilter::~SuperEagleFilter() { + delete[] temp; +} diff --git a/snesfilter/2xsai/2xsai.hpp b/snesfilter/2xsai/2xsai.hpp new file mode 100644 index 00000000..361f47e9 --- /dev/null +++ b/snesfilter/2xsai/2xsai.hpp @@ -0,0 +1,35 @@ +class _2xSaIFilter { +public: + void size(unsigned&, unsigned&, unsigned, unsigned); + void render(uint32_t*, unsigned, const uint16_t*, unsigned, const unsigned*, unsigned, unsigned); + + _2xSaIFilter(); + ~_2xSaIFilter(); + +private: + uint32_t *temp; +} filter_2xsai; + +class Super2xSaIFilter { +public: + void size(unsigned&, unsigned&, unsigned, unsigned); + void render(uint32_t*, unsigned, const uint16_t*, unsigned, const unsigned*, unsigned, unsigned); + + Super2xSaIFilter(); + ~Super2xSaIFilter(); + +private: + uint32_t *temp; +} filter_super2xsai; + +class SuperEagleFilter { +public: + void size(unsigned&, unsigned&, unsigned, unsigned); + void render(uint32_t*, unsigned, const uint16_t*, unsigned, const unsigned*, unsigned, unsigned); + + SuperEagleFilter(); + ~SuperEagleFilter(); + +private: + uint32_t *temp; +} filter_supereagle; diff --git a/snesfilter/2xsai/implementation.cpp b/snesfilter/2xsai/implementation.cpp new file mode 100644 index 00000000..cebca7ef --- /dev/null +++ b/snesfilter/2xsai/implementation.cpp @@ -0,0 +1,1171 @@ +static uint32_t colorMask = 0xFEFEFE; +static uint32_t lowPixelMask = 0x010101; +static uint32_t qcolorMask = 0xFCFCFC; +static uint32_t qlowpixelMask = 0x030303; +static uint32_t redblueMask = 0xFF00FF; +static uint32_t greenMask = 0xFF00; + +uint32_t qRGB_COLOR_MASK[2] = { 0xFEFEFE, 0xFEFEFE }; + +static inline int GetResult1 (uint32_t A, uint32_t B, uint32_t C, uint32_t D, + uint32_t /* E */) +{ + int x = 0; + int y = 0; + int r = 0; + + if (A == C) + x += 1; + else if (B == C) + y += 1; + if (A == D) + x += 1; + else if (B == D) + y += 1; + if (x <= 1) + r += 1; + if (y <= 1) + r -= 1; + return r; +} + +static inline int GetResult2 (uint32_t A, uint32_t B, uint32_t C, uint32_t D, + uint32_t /* E */) +{ + int x = 0; + int y = 0; + int r = 0; + + if (A == C) + x += 1; + else if (B == C) + y += 1; + if (A == D) + x += 1; + else if (B == D) + y += 1; + if (x <= 1) + r -= 1; + if (y <= 1) + r += 1; + return r; +} + +static inline int GetResult (uint32_t A, uint32_t B, uint32_t C, uint32_t D) +{ + int x = 0; + int y = 0; + int r = 0; + + if (A == C) + x += 1; + else if (B == C) + y += 1; + if (A == D) + x += 1; + else if (B == D) + y += 1; + if (x <= 1) + r += 1; + if (y <= 1) + r -= 1; + return r; +} + +static inline uint32_t INTERPOLATE (uint32_t A, uint32_t B) +{ + if (A != B) { + return (((A & colorMask) >> 1) + ((B & colorMask) >> 1) + + (A & B & lowPixelMask)); + } else + return A; +} + +static inline uint32_t Q_INTERPOLATE (uint32_t A, uint32_t B, uint32_t C, uint32_t D) +{ + register uint32_t x = ((A & qcolorMask) >> 2) + + ((B & qcolorMask) >> 2) + + ((C & qcolorMask) >> 2) + ((D & qcolorMask) >> 2); + register uint32_t y = (A & qlowpixelMask) + + (B & qlowpixelMask) + (C & qlowpixelMask) + (D & qlowpixelMask); + + y = (y >> 2) & qlowpixelMask; + return x + y; +} + +static inline int GetResult1_32 (uint32_t A, uint32_t B, uint32_t C, uint32_t D, + uint32_t /* E */) +{ + int x = 0; + int y = 0; + int r = 0; + + if (A == C) + x += 1; + else if (B == C) + y += 1; + if (A == D) + x += 1; + else if (B == D) + y += 1; + if (x <= 1) + r += 1; + if (y <= 1) + r -= 1; + return r; +} + +static inline int GetResult2_32 (uint32_t A, uint32_t B, uint32_t C, uint32_t D, + uint32_t /* E */) +{ + int x = 0; + int y = 0; + int r = 0; + + if (A == C) + x += 1; + else if (B == C) + y += 1; + if (A == D) + x += 1; + else if (B == D) + y += 1; + if (x <= 1) + r -= 1; + if (y <= 1) + r += 1; + return r; +} + +#define BLUE_MASK565 0x001F001F +#define RED_MASK565 0xF800F800 +#define GREEN_MASK565 0x07E007E0 + +#define BLUE_MASK555 0x001F001F +#define RED_MASK555 0x7C007C00 +#define GREEN_MASK555 0x03E003E0 + +void Super2xSaI (uint8_t *srcPtr, uint32_t srcPitch, + uint8_t *deltaPtr, uint8_t *dstPtr, uint32_t dstPitch, + int width, int height) +{ + uint16_t *bP; + uint8_t *dP; + uint32_t inc_bP; + uint32_t Nextline = srcPitch >> 1; + { + inc_bP = 1; + + for (; height; height--) { + bP = (uint16_t *) srcPtr; + dP = (uint8_t *) dstPtr; + + for (uint32_t finish = width; finish; finish -= inc_bP) { + uint32_t color4, color5, color6; + uint32_t color1, color2, color3; + uint32_t colorA0, colorA1, colorA2, colorA3, + colorB0, colorB1, colorB2, colorB3, colorS1, colorS2; + uint32_t product1a, product1b, product2a, product2b; + + //--------------------------------------- B1 B2 + // 4 5 6 S2 + // 1 2 3 S1 + // A1 A2 + + colorB0 = *(bP - Nextline - 1); + colorB1 = *(bP - Nextline); + colorB2 = *(bP - Nextline + 1); + colorB3 = *(bP - Nextline + 2); + + color4 = *(bP - 1); + color5 = *(bP); + color6 = *(bP + 1); + colorS2 = *(bP + 2); + + color1 = *(bP + Nextline - 1); + color2 = *(bP + Nextline); + color3 = *(bP + Nextline + 1); + colorS1 = *(bP + Nextline + 2); + + colorA0 = *(bP + Nextline + Nextline - 1); + colorA1 = *(bP + Nextline + Nextline); + colorA2 = *(bP + Nextline + Nextline + 1); + colorA3 = *(bP + Nextline + Nextline + 2); + + //-------------------------------------- + if (color2 == color6 && color5 != color3) { + product2b = product1b = color2; + } else if (color5 == color3 && color2 != color6) { + product2b = product1b = color5; + } else if (color5 == color3 && color2 == color6) { + register int r = 0; + + r += GetResult (color6, color5, color1, colorA1); + r += GetResult (color6, color5, color4, colorB1); + r += GetResult (color6, color5, colorA2, colorS1); + r += GetResult (color6, color5, colorB2, colorS2); + + if (r > 0) + product2b = product1b = color6; + else if (r < 0) + product2b = product1b = color5; + else { + product2b = product1b = INTERPOLATE (color5, color6); + } + } else { + if (color6 == color3 && color3 == colorA1 + && color2 != colorA2 && color3 != colorA0) + product2b = + Q_INTERPOLATE (color3, color3, color3, color2); + else if (color5 == color2 && color2 == colorA2 + && colorA1 != color3 && color2 != colorA3) + product2b = + Q_INTERPOLATE (color2, color2, color2, color3); + else + product2b = INTERPOLATE (color2, color3); + + if (color6 == color3 && color6 == colorB1 + && color5 != colorB2 && color6 != colorB0) + product1b = + Q_INTERPOLATE (color6, color6, color6, color5); + else if (color5 == color2 && color5 == colorB2 + && colorB1 != color6 && color5 != colorB3) + product1b = + Q_INTERPOLATE (color6, color5, color5, color5); + else + product1b = INTERPOLATE (color5, color6); + } + + if (color5 == color3 && color2 != color6 && color4 == color5 + && color5 != colorA2) + product2a = INTERPOLATE (color2, color5); + else + if (color5 == color1 && color6 == color5 + && color4 != color2 && color5 != colorA0) + product2a = INTERPOLATE (color2, color5); + else + product2a = color2; + + if (color2 == color6 && color5 != color3 && color1 == color2 + && color2 != colorB2) + product1a = INTERPOLATE (color2, color5); + else + if (color4 == color2 && color3 == color2 + && color1 != color5 && color2 != colorB0) + product1a = INTERPOLATE (color2, color5); + else + product1a = color5; + +#ifdef WORDS_BIGENDIAN + product1a = (product1a << 16) | product1b; + product2a = (product2a << 16) | product2b; +#else + product1a = product1a | (product1b << 16); + product2a = product2a | (product2b << 16); +#endif + + *((uint32_t *) dP) = product1a; + *((uint32_t *) (dP + dstPitch)) = product2a; + + bP += inc_bP; + dP += sizeof (uint32_t); + } // end of for ( finish= width etc..) + + srcPtr += srcPitch; + dstPtr += dstPitch << 1; + deltaPtr += srcPitch; + } // endof: for (; height; height--) + } +} + +void Super2xSaI32 (uint8_t *srcPtr, uint32_t srcPitch, + uint8_t * /* deltaPtr */, uint8_t *dstPtr, uint32_t dstPitch, + int width, int height) +{ + uint32_t *bP; + uint32_t *dP; + uint32_t inc_bP; + uint32_t Nextline = srcPitch >> 2; + inc_bP = 1; + + for (; height; height--) { + bP = (uint32_t *) srcPtr; + dP = (uint32_t *) dstPtr; + + for (uint32_t finish = width; finish; finish -= inc_bP) { + uint32_t color4, color5, color6; + uint32_t color1, color2, color3; + uint32_t colorA0, colorA1, colorA2, colorA3, + colorB0, colorB1, colorB2, colorB3, colorS1, colorS2; + uint32_t product1a, product1b, product2a, product2b; + + //--------------------------------------- B1 B2 + // 4 5 6 S2 + // 1 2 3 S1 + // A1 A2 + + colorB0 = *(bP - Nextline - 1); + colorB1 = *(bP - Nextline); + colorB2 = *(bP - Nextline + 1); + colorB3 = *(bP - Nextline + 2); + + color4 = *(bP - 1); + color5 = *(bP); + color6 = *(bP + 1); + colorS2 = *(bP + 2); + + color1 = *(bP + Nextline - 1); + color2 = *(bP + Nextline); + color3 = *(bP + Nextline + 1); + colorS1 = *(bP + Nextline + 2); + + colorA0 = *(bP + Nextline + Nextline - 1); + colorA1 = *(bP + Nextline + Nextline); + colorA2 = *(bP + Nextline + Nextline + 1); + colorA3 = *(bP + Nextline + Nextline + 2); + + //-------------------------------------- + if (color2 == color6 && color5 != color3) { + product2b = product1b = color2; + } else if (color5 == color3 && color2 != color6) { + product2b = product1b = color5; + } else if (color5 == color3 && color2 == color6) { + register int r = 0; + + r += GetResult (color6, color5, color1, colorA1); + r += GetResult (color6, color5, color4, colorB1); + r += GetResult (color6, color5, colorA2, colorS1); + r += GetResult (color6, color5, colorB2, colorS2); + + if (r > 0) + product2b = product1b = color6; + else if (r < 0) + product2b = product1b = color5; + else { + product2b = product1b = INTERPOLATE (color5, color6); + } + } else { + if (color6 == color3 && color3 == colorA1 + && color2 != colorA2 && color3 != colorA0) + product2b = + Q_INTERPOLATE (color3, color3, color3, color2); + else if (color5 == color2 && color2 == colorA2 + && colorA1 != color3 && color2 != colorA3) + product2b = + Q_INTERPOLATE (color2, color2, color2, color3); + else + product2b = INTERPOLATE (color2, color3); + + if (color6 == color3 && color6 == colorB1 + && color5 != colorB2 && color6 != colorB0) + product1b = + Q_INTERPOLATE (color6, color6, color6, color5); + else if (color5 == color2 && color5 == colorB2 + && colorB1 != color6 && color5 != colorB3) + product1b = + Q_INTERPOLATE (color6, color5, color5, color5); + else + product1b = INTERPOLATE (color5, color6); + } + + if (color5 == color3 && color2 != color6 && color4 == color5 + && color5 != colorA2) + product2a = INTERPOLATE (color2, color5); + else + if (color5 == color1 && color6 == color5 + && color4 != color2 && color5 != colorA0) + product2a = INTERPOLATE (color2, color5); + else + product2a = color2; + + if (color2 == color6 && color5 != color3 && color1 == color2 + && color2 != colorB2) + product1a = INTERPOLATE (color2, color5); + else + if (color4 == color2 && color3 == color2 + && color1 != color5 && color2 != colorB0) + product1a = INTERPOLATE (color2, color5); + else + product1a = color5; + *(dP) = product1a; + *(dP+1) = product1b; + *(dP + (dstPitch >> 2)) = product2a; + *(dP + (dstPitch >> 2) + 1) = product2b; + + bP += inc_bP; + dP += 2; + } // end of for ( finish= width etc..) + + srcPtr += srcPitch; + dstPtr += dstPitch << 1; + // deltaPtr += srcPitch; + } // endof: for (; height; height--) +} + +void SuperEagle (uint8_t *srcPtr, uint32_t srcPitch, uint8_t *deltaPtr, + uint8_t *dstPtr, uint32_t dstPitch, int width, int height) +{ + uint8_t *dP; + uint16_t *bP; + uint16_t *xP; + uint32_t inc_bP; + + { + inc_bP = 1; + + uint32_t Nextline = srcPitch >> 1; + + for (; height; height--) { + bP = (uint16_t *) srcPtr; + xP = (uint16_t *) deltaPtr; + dP = dstPtr; + for (uint32_t finish = width; finish; finish -= inc_bP) { + uint32_t color4, color5, color6; + uint32_t color1, color2, color3; + uint32_t colorA1, colorA2, colorB1, colorB2, colorS1, colorS2; + uint32_t product1a, product1b, product2a, product2b; + + colorB1 = *(bP - Nextline); + colorB2 = *(bP - Nextline + 1); + + color4 = *(bP - 1); + color5 = *(bP); + color6 = *(bP + 1); + colorS2 = *(bP + 2); + + color1 = *(bP + Nextline - 1); + color2 = *(bP + Nextline); + color3 = *(bP + Nextline + 1); + colorS1 = *(bP + Nextline + 2); + + colorA1 = *(bP + Nextline + Nextline); + colorA2 = *(bP + Nextline + Nextline + 1); + + // -------------------------------------- + if (color2 == color6 && color5 != color3) { + product1b = product2a = color2; + if ((color1 == color2) || (color6 == colorB2)) { + product1a = INTERPOLATE (color2, color5); + product1a = INTERPOLATE (color2, product1a); + // product1a = color2; + } else { + product1a = INTERPOLATE (color5, color6); + } + + if ((color6 == colorS2) || (color2 == colorA1)) { + product2b = INTERPOLATE (color2, color3); + product2b = INTERPOLATE (color2, product2b); + // product2b = color2; + } else { + product2b = INTERPOLATE (color2, color3); + } + } else if (color5 == color3 && color2 != color6) { + product2b = product1a = color5; + + if ((colorB1 == color5) || (color3 == colorS1)) { + product1b = INTERPOLATE (color5, color6); + product1b = INTERPOLATE (color5, product1b); + // product1b = color5; + } else { + product1b = INTERPOLATE (color5, color6); + } + + if ((color3 == colorA2) || (color4 == color5)) { + product2a = INTERPOLATE (color5, color2); + product2a = INTERPOLATE (color5, product2a); + // product2a = color5; + } else { + product2a = INTERPOLATE (color2, color3); + } + + } else if (color5 == color3 && color2 == color6) { + register int r = 0; + + r += GetResult (color6, color5, color1, colorA1); + r += GetResult (color6, color5, color4, colorB1); + r += GetResult (color6, color5, colorA2, colorS1); + r += GetResult (color6, color5, colorB2, colorS2); + + if (r > 0) { + product1b = product2a = color2; + product1a = product2b = INTERPOLATE (color5, color6); + } else if (r < 0) { + product2b = product1a = color5; + product1b = product2a = INTERPOLATE (color5, color6); + } else { + product2b = product1a = color5; + product1b = product2a = color2; + } + } else { + product2b = product1a = INTERPOLATE (color2, color6); + product2b = + Q_INTERPOLATE (color3, color3, color3, product2b); + product1a = + Q_INTERPOLATE (color5, color5, color5, product1a); + + product2a = product1b = INTERPOLATE (color5, color3); + product2a = + Q_INTERPOLATE (color2, color2, color2, product2a); + product1b = + Q_INTERPOLATE (color6, color6, color6, product1b); + + // product1a = color5; + // product1b = color6; + // product2a = color2; + // product2b = color3; + } +#ifdef WORDS_BIGENDIAN + product1a = (product1a << 16) | product1b; + product2a = (product2a << 16) | product2b; +#else + product1a = product1a | (product1b << 16); + product2a = product2a | (product2b << 16); +#endif + + *((uint32_t *) dP) = product1a; + *((uint32_t *) (dP + dstPitch)) = product2a; + *xP = color5; + + bP += inc_bP; + xP += inc_bP; + dP += sizeof (uint32_t); + } // end of for ( finish= width etc..) + + srcPtr += srcPitch; + dstPtr += dstPitch << 1; + deltaPtr += srcPitch; + } // endof: for (height; height; height--) + } +} + +void SuperEagle32 (uint8_t *srcPtr, uint32_t srcPitch, uint8_t */*deltaPtr*/, + uint8_t *dstPtr, uint32_t dstPitch, int width, int height) +{ + uint32_t *dP; + uint32_t *bP; + //uint32_t *xP; + uint32_t inc_bP; + + inc_bP = 1; + + uint32_t Nextline = srcPitch >> 2; + + for (; height; height--) { + bP = (uint32_t *) srcPtr; + //xP = (uint32_t *) deltaPtr; + dP = (uint32_t *)dstPtr; + for (uint32_t finish = width; finish; finish -= inc_bP) { + uint32_t color4, color5, color6; + uint32_t color1, color2, color3; + uint32_t colorA1, colorA2, colorB1, colorB2, colorS1, colorS2; + uint32_t product1a, product1b, product2a, product2b; + + colorB1 = *(bP - Nextline); + colorB2 = *(bP - Nextline + 1); + + color4 = *(bP - 1); + color5 = *(bP); + color6 = *(bP + 1); + colorS2 = *(bP + 2); + + color1 = *(bP + Nextline - 1); + color2 = *(bP + Nextline); + color3 = *(bP + Nextline + 1); + colorS1 = *(bP + Nextline + 2); + + colorA1 = *(bP + Nextline + Nextline); + colorA2 = *(bP + Nextline + Nextline + 1); + + // -------------------------------------- + if (color2 == color6 && color5 != color3) { + product1b = product2a = color2; + if ((color1 == color2) || (color6 == colorB2)) { + product1a = INTERPOLATE (color2, color5); + product1a = INTERPOLATE (color2, product1a); + // product1a = color2; + } else { + product1a = INTERPOLATE (color5, color6); + } + + if ((color6 == colorS2) || (color2 == colorA1)) { + product2b = INTERPOLATE (color2, color3); + product2b = INTERPOLATE (color2, product2b); + // product2b = color2; + } else { + product2b = INTERPOLATE (color2, color3); + } + } else if (color5 == color3 && color2 != color6) { + product2b = product1a = color5; + + if ((colorB1 == color5) || (color3 == colorS1)) { + product1b = INTERPOLATE (color5, color6); + product1b = INTERPOLATE (color5, product1b); + // product1b = color5; + } else { + product1b = INTERPOLATE (color5, color6); + } + + if ((color3 == colorA2) || (color4 == color5)) { + product2a = INTERPOLATE (color5, color2); + product2a = INTERPOLATE (color5, product2a); + // product2a = color5; + } else { + product2a = INTERPOLATE (color2, color3); + } + + } else if (color5 == color3 && color2 == color6) { + register int r = 0; + + r += GetResult (color6, color5, color1, colorA1); + r += GetResult (color6, color5, color4, colorB1); + r += GetResult (color6, color5, colorA2, colorS1); + r += GetResult (color6, color5, colorB2, colorS2); + + if (r > 0) { + product1b = product2a = color2; + product1a = product2b = INTERPOLATE (color5, color6); + } else if (r < 0) { + product2b = product1a = color5; + product1b = product2a = INTERPOLATE (color5, color6); + } else { + product2b = product1a = color5; + product1b = product2a = color2; + } + } else { + product2b = product1a = INTERPOLATE (color2, color6); + product2b = + Q_INTERPOLATE (color3, color3, color3, product2b); + product1a = + Q_INTERPOLATE (color5, color5, color5, product1a); + + product2a = product1b = INTERPOLATE (color5, color3); + product2a = + Q_INTERPOLATE (color2, color2, color2, product2a); + product1b = + Q_INTERPOLATE (color6, color6, color6, product1b); + + // product1a = color5; + // product1b = color6; + // product2a = color2; + // product2b = color3; + } + *(dP) = product1a; + *(dP+1) = product1b; + *(dP + (dstPitch >> 2)) = product2a; + *(dP + (dstPitch >> 2) +1) = product2b; + //*xP = color5; + + bP += inc_bP; + //xP += inc_bP; + dP += 2; + } // end of for ( finish= width etc..) + + srcPtr += srcPitch; + dstPtr += dstPitch << 1; + //deltaPtr += srcPitch; + } // endof: for (height; height; height--) +} + +void _2xSaI (uint8_t *srcPtr, uint32_t srcPitch, uint8_t *deltaPtr, + uint8_t *dstPtr, uint32_t dstPitch, int width, int height) +{ + uint8_t *dP; + uint16_t *bP; + uint32_t inc_bP; + + { + inc_bP = 1; + + uint32_t Nextline = srcPitch >> 1; + + for (; height; height--) { + bP = (uint16_t *) srcPtr; + dP = dstPtr; + + for (uint32_t finish = width; finish; finish -= inc_bP) { + + register uint32_t colorA, colorB; + uint32_t colorC, colorD, + colorE, colorF, colorG, colorH, + colorI, colorJ, colorK, colorL, + + colorM, colorN, colorO, colorP; + uint32_t product, product1, product2; + + //--------------------------------------- + // Map of the pixels: I|E F|J + // G|A B|K + // H|C D|L + // M|N O|P + colorI = *(bP - Nextline - 1); + colorE = *(bP - Nextline); + colorF = *(bP - Nextline + 1); + colorJ = *(bP - Nextline + 2); + + colorG = *(bP - 1); + colorA = *(bP); + colorB = *(bP + 1); + colorK = *(bP + 2); + + colorH = *(bP + Nextline - 1); + colorC = *(bP + Nextline); + colorD = *(bP + Nextline + 1); + colorL = *(bP + Nextline + 2); + + colorM = *(bP + Nextline + Nextline - 1); + colorN = *(bP + Nextline + Nextline); + colorO = *(bP + Nextline + Nextline + 1); + colorP = *(bP + Nextline + Nextline + 2); + + if ((colorA == colorD) && (colorB != colorC)) { + if (((colorA == colorE) && (colorB == colorL)) || + ((colorA == colorC) && (colorA == colorF) + && (colorB != colorE) && (colorB == colorJ))) { + product = colorA; + } else { + product = INTERPOLATE (colorA, colorB); + } + + if (((colorA == colorG) && (colorC == colorO)) || + ((colorA == colorB) && (colorA == colorH) + && (colorG != colorC) && (colorC == colorM))) { + product1 = colorA; + } else { + product1 = INTERPOLATE (colorA, colorC); + } + product2 = colorA; + } else if ((colorB == colorC) && (colorA != colorD)) { + if (((colorB == colorF) && (colorA == colorH)) || + ((colorB == colorE) && (colorB == colorD) + && (colorA != colorF) && (colorA == colorI))) { + product = colorB; + } else { + product = INTERPOLATE (colorA, colorB); + } + + if (((colorC == colorH) && (colorA == colorF)) || + ((colorC == colorG) && (colorC == colorD) + && (colorA != colorH) && (colorA == colorI))) { + product1 = colorC; + } else { + product1 = INTERPOLATE (colorA, colorC); + } + product2 = colorB; + } else if ((colorA == colorD) && (colorB == colorC)) { + if (colorA == colorB) { + product = colorA; + product1 = colorA; + product2 = colorA; + } else { + register int r = 0; + + product1 = INTERPOLATE (colorA, colorC); + product = INTERPOLATE (colorA, colorB); + + r += + GetResult1 (colorA, colorB, colorG, colorE, + colorI); + r += + GetResult2 (colorB, colorA, colorK, colorF, + colorJ); + r += + GetResult2 (colorB, colorA, colorH, colorN, + colorM); + r += + GetResult1 (colorA, colorB, colorL, colorO, + colorP); + + if (r > 0) + product2 = colorA; + else if (r < 0) + product2 = colorB; + else { + product2 = + Q_INTERPOLATE (colorA, colorB, colorC, + colorD); + } + } + } else { + product2 = Q_INTERPOLATE (colorA, colorB, colorC, colorD); + + if ((colorA == colorC) && (colorA == colorF) + && (colorB != colorE) && (colorB == colorJ)) { + product = colorA; + } else if ((colorB == colorE) && (colorB == colorD) + && (colorA != colorF) && (colorA == colorI)) { + product = colorB; + } else { + product = INTERPOLATE (colorA, colorB); + } + + if ((colorA == colorB) && (colorA == colorH) + && (colorG != colorC) && (colorC == colorM)) { + product1 = colorA; + } else if ((colorC == colorG) && (colorC == colorD) + && (colorA != colorH) && (colorA == colorI)) { + product1 = colorC; + } else { + product1 = INTERPOLATE (colorA, colorC); + } + } + +#ifdef WORDS_BIGENDIAN + product = (colorA << 16) | product ; + product1 = (product1 << 16) | product2 ; +#else + product = colorA | (product << 16); + product1 = product1 | (product2 << 16); +#endif + *((int32_t *) dP) = product; + *((uint32_t *) (dP + dstPitch)) = product1; + + bP += inc_bP; + dP += sizeof (uint32_t); + } // end of for ( finish= width etc..) + + srcPtr += srcPitch; + dstPtr += dstPitch << 1; + deltaPtr += srcPitch; + } // endof: for (height; height; height--) + } +} + +void _2xSaI32 (uint8_t *srcPtr, uint32_t srcPitch, uint8_t * /* deltaPtr */, + uint8_t *dstPtr, uint32_t dstPitch, int width, int height) +{ + uint32_t *dP; + uint32_t *bP; + uint32_t inc_bP = 1; + + uint32_t Nextline = srcPitch >> 2; + + for (; height; height--) { + bP = (uint32_t *) srcPtr; + dP = (uint32_t *) dstPtr; + + for (uint32_t finish = width; finish; finish -= inc_bP) { + register uint32_t colorA, colorB; + uint32_t colorC, colorD, + colorE, colorF, colorG, colorH, + colorI, colorJ, colorK, colorL, + + colorM, colorN, colorO, colorP; + uint32_t product, product1, product2; + + //--------------------------------------- + // Map of the pixels: I|E F|J + // G|A B|K + // H|C D|L + // M|N O|P + colorI = *(bP - Nextline - 1); + colorE = *(bP - Nextline); + colorF = *(bP - Nextline + 1); + colorJ = *(bP - Nextline + 2); + + colorG = *(bP - 1); + colorA = *(bP); + colorB = *(bP + 1); + colorK = *(bP + 2); + + colorH = *(bP + Nextline - 1); + colorC = *(bP + Nextline); + colorD = *(bP + Nextline + 1); + colorL = *(bP + Nextline + 2); + + colorM = *(bP + Nextline + Nextline - 1); + colorN = *(bP + Nextline + Nextline); + colorO = *(bP + Nextline + Nextline + 1); + colorP = *(bP + Nextline + Nextline + 2); + + if ((colorA == colorD) && (colorB != colorC)) { + if (((colorA == colorE) && (colorB == colorL)) || + ((colorA == colorC) && (colorA == colorF) + && (colorB != colorE) && (colorB == colorJ))) { + product = colorA; + } else { + product = INTERPOLATE (colorA, colorB); + } + + if (((colorA == colorG) && (colorC == colorO)) || + ((colorA == colorB) && (colorA == colorH) + && (colorG != colorC) && (colorC == colorM))) { + product1 = colorA; + } else { + product1 = INTERPOLATE (colorA, colorC); + } + product2 = colorA; + } else if ((colorB == colorC) && (colorA != colorD)) { + if (((colorB == colorF) && (colorA == colorH)) || + ((colorB == colorE) && (colorB == colorD) + && (colorA != colorF) && (colorA == colorI))) { + product = colorB; + } else { + product = INTERPOLATE (colorA, colorB); + } + + if (((colorC == colorH) && (colorA == colorF)) || + ((colorC == colorG) && (colorC == colorD) + && (colorA != colorH) && (colorA == colorI))) { + product1 = colorC; + } else { + product1 = INTERPOLATE (colorA, colorC); + } + product2 = colorB; + } else if ((colorA == colorD) && (colorB == colorC)) { + if (colorA == colorB) { + product = colorA; + product1 = colorA; + product2 = colorA; + } else { + register int r = 0; + + product1 = INTERPOLATE (colorA, colorC); + product = INTERPOLATE (colorA, colorB); + + r += + GetResult1 (colorA, colorB, colorG, colorE, + colorI); + r += + GetResult2 (colorB, colorA, colorK, colorF, + colorJ); + r += + GetResult2 (colorB, colorA, colorH, colorN, + colorM); + r += + GetResult1 (colorA, colorB, colorL, colorO, + colorP); + + if (r > 0) + product2 = colorA; + else if (r < 0) + product2 = colorB; + else { + product2 = + Q_INTERPOLATE (colorA, colorB, colorC, + colorD); + } + } + } else { + product2 = Q_INTERPOLATE (colorA, colorB, colorC, colorD); + + if ((colorA == colorC) && (colorA == colorF) + && (colorB != colorE) && (colorB == colorJ)) { + product = colorA; + } else if ((colorB == colorE) && (colorB == colorD) + && (colorA != colorF) && (colorA == colorI)) { + product = colorB; + } else { + product = INTERPOLATE (colorA, colorB); + } + + if ((colorA == colorB) && (colorA == colorH) + && (colorG != colorC) && (colorC == colorM)) { + product1 = colorA; + } else if ((colorC == colorG) && (colorC == colorD) + && (colorA != colorH) && (colorA == colorI)) { + product1 = colorC; + } else { + product1 = INTERPOLATE (colorA, colorC); + } + } + *(dP) = colorA; + *(dP + 1) = product; + *(dP + (dstPitch >> 2)) = product1; + *(dP + (dstPitch >> 2) + 1) = product2; + + bP += inc_bP; + dP += 2; + } // end of for ( finish= width etc..) + + srcPtr += srcPitch; + dstPtr += dstPitch << 1; + // deltaPtr += srcPitch; + } // endof: for (height; height; height--) +} + +static uint32_t Bilinear (uint32_t A, uint32_t B, uint32_t x) +{ + unsigned long areaA, areaB; + unsigned long result; + + if (A == B) + return A; + + areaB = (x >> 11) & 0x1f; // reduce 16 bit fraction to 5 bits + areaA = 0x20 - areaB; + + A = (A & redblueMask) | ((A & greenMask) << 16); + B = (B & redblueMask) | ((B & greenMask) << 16); + + result = ((areaA * A) + (areaB * B)) >> 5; + + return (result & redblueMask) | ((result >> 16) & greenMask); +} + +static uint32_t Bilinear4 (uint32_t A, uint32_t B, uint32_t C, uint32_t D, uint32_t x, + uint32_t y) +{ + unsigned long areaA, areaB, areaC, areaD; + unsigned long result, xy; + + x = (x >> 11) & 0x1f; + y = (y >> 11) & 0x1f; + xy = (x * y) >> 5; + + A = (A & redblueMask) | ((A & greenMask) << 16); + B = (B & redblueMask) | ((B & greenMask) << 16); + C = (C & redblueMask) | ((C & greenMask) << 16); + D = (D & redblueMask) | ((D & greenMask) << 16); + + areaA = 0x20 + xy - x - y; + areaB = x - xy; + areaC = y - xy; + areaD = xy; + + result = ((areaA * A) + (areaB * B) + (areaC * C) + (areaD * D)) >> 5; + + return (result & redblueMask) | ((result >> 16) & greenMask); +} + +void Scale_2xSaI (uint8_t *srcPtr, uint32_t srcPitch, uint8_t * /* deltaPtr */, + uint8_t *dstPtr, uint32_t dstPitch, + uint32_t dstWidth, uint32_t dstHeight, int width, int height) +{ + uint8_t *dP; + uint16_t *bP; + + uint32_t w; + uint32_t h; + uint32_t dw; + uint32_t dh; + uint32_t hfinish; + uint32_t wfinish; + + uint32_t Nextline = srcPitch >> 1; + + wfinish = (width - 1) << 16; // convert to fixed point + dw = wfinish / (dstWidth - 1); + hfinish = (height - 1) << 16; // convert to fixed point + dh = hfinish / (dstHeight - 1); + + for (h = 0; h < hfinish; h += dh) { + uint32_t y1, y2; + + y1 = h & 0xffff; // fraction part of fixed point + bP = (uint16_t *) (srcPtr + ((h >> 16) * srcPitch)); + dP = dstPtr; + y2 = 0x10000 - y1; + + w = 0; + + for (; w < wfinish;) { + uint32_t A, B, C, D; + uint32_t E, F, G, H; + uint32_t I, J, K, L; + uint32_t x1, x2, a1, f1, f2; + uint32_t position, product1; + + position = w >> 16; + A = bP[position]; // current pixel + B = bP[position + 1]; // next pixel + C = bP[position + Nextline]; + D = bP[position + Nextline + 1]; + E = bP[position - Nextline]; + F = bP[position - Nextline + 1]; + G = bP[position - 1]; + H = bP[position + Nextline - 1]; + I = bP[position + 2]; + J = bP[position + Nextline + 2]; + K = bP[position + Nextline + Nextline]; + L = bP[position + Nextline + Nextline + 1]; + + x1 = w & 0xffff; // fraction part of fixed point + x2 = 0x10000 - x1; + + /*0*/ + if (A == B && C == D && A == C) + product1 = A; + else /*1*/ if (A == D && B != C) { + f1 = (x1 >> 1) + (0x10000 >> 2); + f2 = (y1 >> 1) + (0x10000 >> 2); + if (y1 <= f1 && A == J && A != E) // close to B + { + a1 = f1 - y1; + product1 = Bilinear (A, B, a1); + } else if (y1 >= f1 && A == G && A != L) // close to C + { + a1 = y1 - f1; + product1 = Bilinear (A, C, a1); + } + else if (x1 >= f2 && A == E && A != J) // close to B + { + a1 = x1 - f2; + product1 = Bilinear (A, B, a1); + } + else if (x1 <= f2 && A == L && A != G) // close to C + { + a1 = f2 - x1; + product1 = Bilinear (A, C, a1); + } + else if (y1 >= x1) // close to C + { + a1 = y1 - x1; + product1 = Bilinear (A, C, a1); + } + else if (y1 <= x1) // close to B + { + a1 = x1 - y1; + product1 = Bilinear (A, B, a1); + } + } + else + /*2*/ + if (B == C && A != D) + { + f1 = (x1 >> 1) + (0x10000 >> 2); + f2 = (y1 >> 1) + (0x10000 >> 2); + if (y2 >= f1 && B == H && B != F) // close to A + { + a1 = y2 - f1; + product1 = Bilinear (B, A, a1); + } + else if (y2 <= f1 && B == I && B != K) // close to D + { + a1 = f1 - y2; + product1 = Bilinear (B, D, a1); + } + else if (x2 >= f2 && B == F && B != H) // close to A + { + a1 = x2 - f2; + product1 = Bilinear (B, A, a1); + } + else if (x2 <= f2 && B == K && B != I) // close to D + { + a1 = f2 - x2; + product1 = Bilinear (B, D, a1); + } + else if (y2 >= x1) // close to A + { + a1 = y2 - x1; + product1 = Bilinear (B, A, a1); + } + else if (y2 <= x1) // close to D + { + a1 = x1 - y2; + product1 = Bilinear (B, D, a1); + } + } + /*3*/ + else + { + product1 = Bilinear4 (A, B, C, D, x1, y1); + } + + //end First Pixel + *(uint32_t *) dP = product1; + dP += 2; + w += dw; + } + dstPtr += dstPitch; + } +} diff --git a/snesfilter/Makefile b/snesfilter/Makefile new file mode 100644 index 00000000..f2505bfc --- /dev/null +++ b/snesfilter/Makefile @@ -0,0 +1,83 @@ +include nall/Makefile +include nall/Makefile-qt + +c := $(compiler) +cpp := $(subst cc,++,$(compiler)) +flags := -O3 -I. -Iobj -fomit-frame-pointer $(qtinc) +link := + +ifeq ($(platform),x) + flags := -fPIC $(flags) + link += -s +else ifeq ($(platform),osx) + flags := -fPIC $(flags) +endif + +objects := snesfilter + +compile = \ + $(strip \ + $(if $(filter %.c,$<), \ + $(c) $(flags) $1 -c $< -o $@, \ + $(if $(filter %.cpp,$<), \ + $(cpp) $(flags) $1 -c $< -o $@ \ + ) \ + ) \ + ) + +%.o: $<; $(call compile) + +all: build; + +objects := $(patsubst %,obj/%.o,$(objects)) +moc_headers := $(call rwildcard,./,%.moc.hpp) +moc_objects := $(foreach f,$(moc_headers),obj/$(notdir $(patsubst %.moc.hpp,%.moc,$f))) + +# automatically run moc on all .moc.hpp (MOC header) files +%.moc: $<; $(moc) -i $< -o $@ + +# automatically generate %.moc build rules +__list = $(moc_headers) +$(foreach f,$(moc_objects), \ + $(eval __file = $(word 1,$(__list))) \ + $(eval __list = $(wordlist 2,$(words $(__list)),$(__list))) \ + $(eval $f: $(__file)) \ +) + +################## +### snesfilter ### +################## + +obj/snesfilter.o: snesfilter.cpp * + +############### +### targets ### +############### + +build: $(moc_objects) $(objects) +ifeq ($(platform),x) + ar rcs libsnesfilter.a $(objects) + $(cpp) $(link) -o libsnesfilter.so -shared -Wl,-soname,libsnesfilter.so.1 $(objects) $(qtlib) +else ifeq ($(platform),osx) + ar rcs libsnesfilter.a $(objects) + $(cpp) $(link) -o libsnesfilter.dylib -shared -dynamiclib $(objects) $(qtlib) +else ifeq ($(platform),win) + $(cpp) $(link) -o snesfilter.dll -shared -Wl,--out-implib,libsnesfilter.a $(objects) $(qtlib) +endif + +install: +ifeq ($(platform),x) + install -D -m 755 libsnesfilter.a $(DESTDIR)$(prefix)/lib + install -D -m 755 libsnesfilter.so $(DESTDIR)$(prefix)/lib + ldconfig -n $(DESTDIR)$(prefix)/lib +else ifeq ($(platform),osx) + cp libsnesfilter.dylib /usr/local/lib/libsnesfilter.dylib +endif + +clean: + -@$(call delete,obj/*.o) + -@$(call delete,obj/*.moc) + -@$(call delete,libsnesfilter.a) + -@$(call delete,libsnesfilter.so) + -@$(call delete,libsnesfilter.dylib) + -@$(call delete,snesfilter.dll) diff --git a/snesfilter/cc.bat b/snesfilter/cc.bat new file mode 100644 index 00000000..8359a530 --- /dev/null +++ b/snesfilter/cc.bat @@ -0,0 +1,2 @@ +@mingw32-make +@pause \ No newline at end of file diff --git a/snesfilter/clean.bat b/snesfilter/clean.bat new file mode 100644 index 00000000..d8bb7e0b --- /dev/null +++ b/snesfilter/clean.bat @@ -0,0 +1 @@ +@mingw32-make clean diff --git a/snesfilter/direct/direct.cpp b/snesfilter/direct/direct.cpp new file mode 100644 index 00000000..d5214367 --- /dev/null +++ b/snesfilter/direct/direct.cpp @@ -0,0 +1,32 @@ +#include "direct.hpp" + +void DirectFilter::size(unsigned &outwidth, unsigned &outheight, unsigned width, unsigned height) { + outwidth = width; + outheight = height; +} + +void DirectFilter::render( + uint32_t *output, unsigned outpitch, const uint16_t *input, unsigned pitch, + const unsigned *line, unsigned width, unsigned height +) { + pitch >>= 1; + outpitch >>= 2; + + for(unsigned y = 0; y < height; y++) { + if(width == 512 && line[y] == 256) { + for(unsigned x = 0; x < 256; x++) { + uint16_t p = *input++; + *output++ = colortable[p]; + *output++ = colortable[p]; + } + input += 256; + } else { + for(unsigned x = 0; x < width; x++) { + uint16_t p = *input++; + *output++ = colortable[p]; + } + } + input += pitch - width; + output += outpitch - width; + } +} diff --git a/snesfilter/direct/direct.hpp b/snesfilter/direct/direct.hpp new file mode 100644 index 00000000..d990b4fa --- /dev/null +++ b/snesfilter/direct/direct.hpp @@ -0,0 +1,5 @@ +class DirectFilter { +public: + void size(unsigned&, unsigned&, unsigned, unsigned); + void render(uint32_t*, unsigned, const uint16_t*, unsigned, const unsigned*, unsigned, unsigned); +} filter_direct; diff --git a/snesfilter/hq2x/hq2x.cpp b/snesfilter/hq2x/hq2x.cpp new file mode 100644 index 00000000..a3a8b588 --- /dev/null +++ b/snesfilter/hq2x/hq2x.cpp @@ -0,0 +1,205 @@ +//HQ2x filter +//authors: byuu and blargg +//license: public domain +// +//note: this is a clean reimplementation of the original HQ2x filter, which was +//written by Maxim Stepin (MaxSt). it is not 100% identical, but very similar. + +#include "hq2x.hpp" + +void HQ2xFilter::size(unsigned &outwidth, unsigned &outheight, unsigned width, unsigned height) { + if(height > 240) return filter_direct.size(outwidth, outheight, width, height); + outwidth = (width <= 256) ? width * 2 : width; + outheight = (height <= 240) ? height * 2 : height; +} + +void HQ2xFilter::render( + uint32_t *output, unsigned outpitch, const uint16_t *input, unsigned pitch, + const unsigned *line, unsigned width, unsigned height +) { + if(height > 240) { + filter_direct.render(output, outpitch, input, pitch, line, width, height); + return; + } + + pitch >>= 1; + outpitch >>= 2; + + uint32_t *out0 = output; + uint32_t *out1 = output + outpitch; + + for(unsigned y = 0; y < height; y++) { + unsigned linewidth = line[y]; + + if(linewidth == 256) { + int prevline = (y == 0) || (linewidth != line[y - 1]) ? 0 : pitch; + int nextline = (y == height - 1) || (linewidth != line[y + 1]) ? 0 : pitch; + + input++; + *out0++ = 0; *out0++ = 0; + *out1++ = 0; *out1++ = 0; + + for(unsigned x = 1; x < 256 - 1; x++) { + uint16_t A = *(input - prevline - 1); + uint16_t B = *(input - prevline + 0); + uint16_t C = *(input - prevline + 1); + uint16_t D = *(input - 1); + uint16_t E = *(input + 0); + uint16_t F = *(input + 1); + uint16_t G = *(input + nextline - 1); + uint16_t H = *(input + nextline + 0); + uint16_t I = *(input + nextline + 1); + uint32_t e = yuvTable[E] + diff_offset; + + uint8_t pattern; + pattern = diff(e, A) << 0; + pattern |= diff(e, B) << 1; + pattern |= diff(e, C) << 2; + pattern |= diff(e, D) << 3; + pattern |= diff(e, F) << 4; + pattern |= diff(e, G) << 5; + pattern |= diff(e, H) << 6; + pattern |= diff(e, I) << 7; + + *(out0 + 0) = colortable[blend(hqTable[pattern], E, A, B, D, F, H)]; pattern = rotate[pattern]; + *(out0 + 1) = colortable[blend(hqTable[pattern], E, C, F, B, H, D)]; pattern = rotate[pattern]; + *(out1 + 1) = colortable[blend(hqTable[pattern], E, I, H, F, D, B)]; pattern = rotate[pattern]; + *(out1 + 0) = colortable[blend(hqTable[pattern], E, G, D, H, B, F)]; + + input++; + out0 += 2; + out1 += 2; + } + + input++; + *out0++ = 0; *out0++ = 0; + *out1++ = 0; *out1++ = 0; + } else { + for(unsigned x = 0; x < 512; x++) { + *out0++ = *out1++ = colortable[*input++]; + } + } + + input += pitch - linewidth; + out0 += outpitch + outpitch - 512; + out1 += outpitch + outpitch - 512; + } +} + +HQ2xFilter::HQ2xFilter() { + yuvTable = new uint32_t[32768]; + + for(unsigned i = 0; i < 32768; i++) { + uint8_t R = (i >> 0) & 31; + uint8_t G = (i >> 5) & 31; + uint8_t B = (i >> 10) & 31; + + //bgr555->bgr888 + double r = (R << 3) | (R >> 2); + double g = (G << 3) | (G >> 2); + double b = (B << 3) | (B >> 2); + + //bgr888->yuv888 + double y = (r + g + b) * (0.25f * (63.5f / 48.0f)); + double u = ((r - b) * 0.25f + 128.0f) * (7.5f / 7.0f); + double v = ((g * 2.0f - r - b) * 0.125f + 128.0f) * (7.5f / 6.0f); + + yuvTable[i] = ((unsigned)y << 21) + ((unsigned)u << 11) + ((unsigned)v); + } + + for(unsigned n = 0; n < 256; n++) { + rotate[n] = ((n >> 2) & 0x11) | ((n << 2) & 0x88) + | ((n & 0x01) << 5) | ((n & 0x08) << 3) + | ((n & 0x10) >> 3) | ((n & 0x80) >> 5); + } +} + +HQ2xFilter::~HQ2xFilter() { + delete[] yuvTable; +} + +bool HQ2xFilter::same(uint16_t x, uint16_t y) { + return !((yuvTable[x] - yuvTable[y] + diff_offset) & diff_mask); +} + +bool HQ2xFilter::diff(uint32_t x, uint16_t y) { + return ((x - yuvTable[y]) & diff_mask); +} + +void HQ2xFilter::grow(uint32_t &n) { n |= n << 16; n &= 0x03e07c1f; } +uint16_t HQ2xFilter::pack(uint32_t n) { n &= 0x03e07c1f; return n | (n >> 16); } + +uint16_t HQ2xFilter::blend1(uint32_t A, uint32_t B) { + grow(A); grow(B); + A = (A * 3 + B) >> 2; + return pack(A); +} + +uint16_t HQ2xFilter::blend2(uint32_t A, uint32_t B, uint32_t C) { + grow(A); grow(B); grow(C); + return pack((A * 2 + B + C) >> 2); +} + +uint16_t HQ2xFilter::blend3(uint32_t A, uint32_t B, uint32_t C) { + grow(A); grow(B); grow(C); + return pack((A * 5 + B * 2 + C) >> 3); +} + +uint16_t HQ2xFilter::blend4(uint32_t A, uint32_t B, uint32_t C) { + grow(A); grow(B); grow(C); + return pack((A * 6 + B + C) >> 3); +} + +uint16_t HQ2xFilter::blend5(uint32_t A, uint32_t B, uint32_t C) { + grow(A); grow(B); grow(C); + return pack((A * 2 + (B + C) * 3) >> 3); +} + +uint16_t HQ2xFilter::blend6(uint32_t A, uint32_t B, uint32_t C) { + grow(A); grow(B); grow(C); + return pack((A * 14 + B + C) >> 4); +} + +uint16_t HQ2xFilter::blend(unsigned rule, uint16_t E, uint16_t A, uint16_t B, uint16_t D, uint16_t F, uint16_t H) { + switch(rule) { default: + case 0: return E; + case 1: return blend1(E, A); + case 2: return blend1(E, D); + case 3: return blend1(E, B); + case 4: return blend2(E, D, B); + case 5: return blend2(E, A, B); + case 6: return blend2(E, A, D); + case 7: return blend3(E, B, D); + case 8: return blend3(E, D, B); + case 9: return blend4(E, D, B); + case 10: return blend5(E, D, B); + case 11: return blend6(E, D, B); + case 12: return same(B, D) ? blend2(E, D, B) : E; + case 13: return same(B, D) ? blend5(E, D, B) : E; + case 14: return same(B, D) ? blend6(E, D, B) : E; + case 15: return same(B, D) ? blend2(E, D, B) : blend1(E, A); + case 16: return same(B, D) ? blend4(E, D, B) : blend1(E, A); + case 17: return same(B, D) ? blend5(E, D, B) : blend1(E, A); + case 18: return same(B, F) ? blend3(E, B, D) : blend1(E, D); + case 19: return same(D, H) ? blend3(E, D, B) : blend1(E, B); + } +} + +const uint8_t HQ2xFilter::hqTable[256] = { + 4, 4, 6, 2, 4, 4, 6, 2, 5, 3, 15, 12, 5, 3, 17, 13, + 4, 4, 6, 18, 4, 4, 6, 18, 5, 3, 12, 12, 5, 3, 1, 12, + 4, 4, 6, 2, 4, 4, 6, 2, 5, 3, 17, 13, 5, 3, 16, 14, + 4, 4, 6, 18, 4, 4, 6, 18, 5, 3, 16, 12, 5, 3, 1, 14, + 4, 4, 6, 2, 4, 4, 6, 2, 5, 19, 12, 12, 5, 19, 16, 12, + 4, 4, 6, 2, 4, 4, 6, 2, 5, 3, 16, 12, 5, 3, 16, 12, + 4, 4, 6, 2, 4, 4, 6, 2, 5, 19, 1, 12, 5, 19, 1, 14, + 4, 4, 6, 2, 4, 4, 6, 18, 5, 3, 16, 12, 5, 19, 1, 14, + 4, 4, 6, 2, 4, 4, 6, 2, 5, 3, 15, 12, 5, 3, 17, 13, + 4, 4, 6, 2, 4, 4, 6, 2, 5, 3, 16, 12, 5, 3, 16, 12, + 4, 4, 6, 2, 4, 4, 6, 2, 5, 3, 17, 13, 5, 3, 16, 14, + 4, 4, 6, 2, 4, 4, 6, 2, 5, 3, 16, 13, 5, 3, 1, 14, + 4, 4, 6, 2, 4, 4, 6, 2, 5, 3, 16, 12, 5, 3, 16, 13, + 4, 4, 6, 2, 4, 4, 6, 2, 5, 3, 16, 12, 5, 3, 1, 12, + 4, 4, 6, 2, 4, 4, 6, 2, 5, 3, 16, 12, 5, 3, 1, 14, + 4, 4, 6, 2, 4, 4, 6, 2, 5, 3, 1, 12, 5, 3, 1, 14, +}; diff --git a/snesfilter/hq2x/hq2x.hpp b/snesfilter/hq2x/hq2x.hpp new file mode 100644 index 00000000..5aaab806 --- /dev/null +++ b/snesfilter/hq2x/hq2x.hpp @@ -0,0 +1,30 @@ +class HQ2xFilter { +public: + void size(unsigned&, unsigned&, unsigned, unsigned); + void render(uint32_t*, unsigned, const uint16_t*, unsigned, const unsigned*, unsigned, unsigned); + + HQ2xFilter(); + ~HQ2xFilter(); + +private: + enum { + diff_offset = (0x440 << 21) + (0x207 << 11) + 0x407, + diff_mask = (0x380 << 21) + (0x1f0 << 11) + 0x3f0, + }; + + static const uint8_t hqTable[256]; + uint32_t *yuvTable; + uint8_t rotate[256]; + + alwaysinline bool same(uint16_t x, uint16_t y); + alwaysinline bool diff(uint32_t x, uint16_t y); + alwaysinline void grow(uint32_t &n); + alwaysinline uint16_t pack(uint32_t n); + alwaysinline uint16_t blend1(uint32_t A, uint32_t B); + alwaysinline uint16_t blend2(uint32_t A, uint32_t B, uint32_t C); + alwaysinline uint16_t blend3(uint32_t A, uint32_t B, uint32_t C); + alwaysinline uint16_t blend4(uint32_t A, uint32_t B, uint32_t C); + alwaysinline uint16_t blend5(uint32_t A, uint32_t B, uint32_t C); + alwaysinline uint16_t blend6(uint32_t A, uint32_t B, uint32_t C); + alwaysinline uint16_t blend(unsigned rule, uint16_t E, uint16_t A, uint16_t B, uint16_t D, uint16_t F, uint16_t H); +} filter_hq2x; diff --git a/snesfilter/lq2x/lq2x.cpp b/snesfilter/lq2x/lq2x.cpp new file mode 100644 index 00000000..ead1cf58 --- /dev/null +++ b/snesfilter/lq2x/lq2x.cpp @@ -0,0 +1,61 @@ +#include "lq2x.hpp" + +void LQ2xFilter::size(unsigned &outwidth, unsigned &outheight, unsigned width, unsigned height) { + if(height > 240) return filter_direct.size(outwidth, outheight, width, height); + outwidth = (width <= 256) ? width * 2 : width; + outheight = (height <= 240) ? height * 2 : height; +} + +void LQ2xFilter::render( + uint32_t *output, unsigned outpitch, const uint16_t *input, unsigned pitch, + const unsigned *line, unsigned width, unsigned height +) { + if(height > 240) { + filter_direct.render(output, outpitch, input, pitch, line, width, height); + return; + } + + pitch >>= 1; + outpitch >>= 2; + + uint32_t *out0 = output; + uint32_t *out1 = output + outpitch; + + for(unsigned y = 0; y < height; y++) { + unsigned linewidth = line[y]; + + if(linewidth == 256) { + int prevline = (y == 0) || (linewidth != line[y - 1]) ? 0 : pitch; + int nextline = (y == height - 1) || (linewidth != line[y + 1]) ? 0 : pitch; + + for(unsigned x = 0; x < 256; x++) { + uint16_t A = *(input - prevline); + uint16_t B = (x > 0) ? *(input - 1) : *input; + uint16_t C = *input; + uint16_t D = (x < 255) ? *(input + 1) : *input; + uint16_t E = *(input++ + nextline); + uint32_t c = colortable[C]; + + if(A != E && B != D) { + *out0++ = (A == B ? colortable[C + A - ((C ^ A) & 0x0421) >> 1] : c); + *out0++ = (A == D ? colortable[C + A - ((C ^ A) & 0x0421) >> 1] : c); + *out1++ = (E == B ? colortable[C + E - ((C ^ E) & 0x0421) >> 1] : c); + *out1++ = (E == D ? colortable[C + E - ((C ^ E) & 0x0421) >> 1] : c); + } else { + *out0++ = c; + *out0++ = c; + *out1++ = c; + *out1++ = c; + } + } + } else { + for(unsigned x = 0; x < 512; x++) { + *out0++ = *out1++ = colortable[*input++]; + } + } + + input += pitch - linewidth; + out0 += outpitch + outpitch - 512; + out1 += outpitch + outpitch - 512; + } +} diff --git a/snesfilter/lq2x/lq2x.hpp b/snesfilter/lq2x/lq2x.hpp new file mode 100644 index 00000000..07d95639 --- /dev/null +++ b/snesfilter/lq2x/lq2x.hpp @@ -0,0 +1,5 @@ +class LQ2xFilter { +public: + void size(unsigned&, unsigned&, unsigned, unsigned); + void render(uint32_t*, unsigned, const uint16_t*, unsigned, const unsigned*, unsigned, unsigned); +} filter_lq2x; diff --git a/snesfilter/nall/Makefile b/snesfilter/nall/Makefile new file mode 100644 index 00000000..82dc00a5 --- /dev/null +++ b/snesfilter/nall/Makefile @@ -0,0 +1,109 @@ +# Makefile +# author: byuu +# license: public domain + +[A-Z] = A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +[a-z] = a b c d e f g h i j k l m n o p q r s t u v w x y z +[0-9] = 0 1 2 3 4 5 6 7 8 9 +[markup] = ` ~ ! @ \# $$ % ^ & * ( ) - _ = + [ { ] } \ | ; : ' " , < . > / ? +[all] = $([A-Z]) $([a-z]) $([0-9]) $([markup]) +[space] := +[space] += + +##### +# platform detection +##### + +ifeq ($(platform),) + uname := $(shell uname -a) + ifeq ($(uname),) + platform := win + delete = del $(subst /,\,$1) + else ifneq ($(findstring Darwin,$(uname)),) + platform := osx + delete = rm -f $1 + else + platform := x + delete = rm -f $1 + endif +endif + +ifeq ($(compiler),) + compiler := gcc +endif + +ifeq ($(prefix),) + prefix := /usr/local +endif + +##### +# function rwildcard(directory, pattern) +##### +rwildcard = \ + $(strip \ + $(filter $(if $2,$2,%), \ + $(foreach f, \ + $(wildcard $1*), \ + $(eval t = $(call rwildcard,$f/)) \ + $(if $t,$t,$f) \ + ) \ + ) \ + ) + +##### +# function strtr(source, from, to) +##### +strtr = \ + $(eval __temp := $1) \ + $(strip \ + $(foreach c, \ + $(join $(addsuffix :,$2),$3), \ + $(eval __temp := \ + $(subst $(word 1,$(subst :, ,$c)),$(word 2,$(subst :, ,$c)),$(__temp)) \ + ) \ + ) \ + $(__temp) \ + ) + +##### +# function strupper(source) +##### +strupper = $(call strtr,$1,$([a-z]),$([A-Z])) + +##### +# function strlower(source) +##### +strlower = $(call strtr,$1,$([A-Z]),$([a-z])) + +##### +# function strlen(source) +##### +strlen = \ + $(eval __temp := $(subst $([space]),_,$1)) \ + $(words \ + $(strip \ + $(foreach c, \ + $([all]), \ + $(eval __temp := \ + $(subst $c,$c ,$(__temp)) \ + ) \ + ) \ + $(__temp) \ + ) \ + ) + +##### +# function streq(source) +##### +streq = $(if $(filter-out xx,x$(subst $1,,$2)$(subst $2,,$1)x),,1) + +##### +# function strne(source) +##### +strne = $(if $(filter-out xx,x$(subst $1,,$2)$(subst $2,,$1)x),1,) + +##### +# function ifhas(needle, haystack, true, false) +##### +ifhas = $(if $(findstring $1,$2),$3,$4) + diff --git a/snesfilter/nall/Makefile-qt b/snesfilter/nall/Makefile-qt new file mode 100644 index 00000000..7cf21c9e --- /dev/null +++ b/snesfilter/nall/Makefile-qt @@ -0,0 +1,55 @@ +# requires nall/Makefile + +# exports the following symbols: +# $(moc) -- meta-object compiler +# $(rcc) -- resource compiler +# $(qtinc) -- includes for compiling +# $(qtlib) -- libraries for linking + +ifeq ($(moc),) +moc := moc +endif + +ifeq ($(rcc),) +rcc := rcc +endif + +ifeq ($(platform),x) + qtinc := `pkg-config --cflags QtCore QtGui` + qtlib := `pkg-config --libs QtCore QtGui` +else ifeq ($(platform),osx) + qtinc := -I/Library/Frameworks/QtCore.framework/Versions/4/Headers + qtinc += -I/Library/Frameworks/QtGui.framework/Versions/4/Headers + qtinc += -I/Library/Frameworks/QtOpenGL.framework/Versions/4/Headers + + qtlib := -L/Library/Frameworks + qtlib += -framework QtCore + qtlib += -framework QtGui + qtlib += -framework QtOpenGL + qtlib += -framework Carbon + qtlib += -framework Cocoa + qtlib += -framework OpenGL + qtlib += -framework AppKit + qtlib += -framework ApplicationServices +else ifeq ($(platform),win) + ifeq ($(qtpath),) + # find Qt install directory from PATH environment variable + qtpath := $(foreach path,$(subst ;, ,$(PATH)),$(if $(wildcard $(path)/$(moc).exe),$(path))) + qtpath := $(strip $(qtpath)) + qtpath := $(subst \,/,$(qtpath)) + qtpath := $(patsubst %/bin,%,$(qtpath)) + endif + + qtinc := -I$(qtpath)/include + qtinc += -I$(qtpath)/include/QtCore + qtinc += -I$(qtpath)/include/QtGui + + qtlib := -L$(qtpath)/lib + qtlib += -L$(qtpath)/plugins/imageformats + + qtlib += -lmingw32 -lqtmain -lQtGui4 -lcomdlg32 -loleaut32 -limm32 -lwinmm + qtlib += -lwinspool -lmsimg32 -lQtCore4 -lole32 -ladvapi32 -lws2_32 -luuid -lgdi32 + + # optional image-file support: + # qtlib += -lqjpeg -lqmng +endif diff --git a/snesfilter/nall/algorithm.hpp b/snesfilter/nall/algorithm.hpp new file mode 100644 index 00000000..98b39528 --- /dev/null +++ b/snesfilter/nall/algorithm.hpp @@ -0,0 +1,23 @@ +#ifndef NALL_ALGORITHM_HPP +#define NALL_ALGORITHM_HPP + +#undef min +#undef max + +namespace nall { + template T min(const T& t, const U& u) { + return t < u ? t : u; + } + + template T max(const T& t, const U& u) { + return t > u ? t : u; + } + + //pseudo-random number generator + inline unsigned prng() { + static unsigned n = 0; + return n = (n >> 1) ^ (((n & 1) - 1) & 0xedb88320); + } +} + +#endif diff --git a/snesfilter/nall/any.hpp b/snesfilter/nall/any.hpp new file mode 100644 index 00000000..9689af13 --- /dev/null +++ b/snesfilter/nall/any.hpp @@ -0,0 +1,74 @@ +#ifndef NALL_ANY_HPP +#define NALL_ANY_HPP + +#include +#include +#include + +namespace nall { + class any { + public: + bool empty() const { return container; } + const std::type_info& type() const { return container ? container->type() : typeid(void); } + + template any& operator=(const T& value_) { + typedef typename static_if< + is_array::value, + typename remove_extent::type>::type*, + T + >::type auto_t; + + if(type() == typeid(auto_t)) { + static_cast*>(container)->value = (auto_t)value_; + } else { + if(container) delete container; + container = new holder((auto_t)value_); + } + + return *this; + } + + any() : container(0) {} + template any(const T& value_) : container(0) { operator=(value_); } + + private: + struct placeholder { + virtual const std::type_info& type() const = 0; + } *container; + + template struct holder : placeholder { + T value; + const std::type_info& type() const { return typeid(T); } + holder(const T& value_) : value(value_) {} + }; + + template friend T any_cast(any&); + template friend T any_cast(const any&); + template friend T* any_cast(any*); + template friend const T* any_cast(const any*); + }; + + template T any_cast(any &value) { + typedef typename remove_reference::type nonref; + if(value.type() != typeid(nonref)) throw; + return static_cast*>(value.container)->value; + } + + template T any_cast(const any &value) { + typedef const typename remove_reference::type nonref; + if(value.type() != typeid(nonref)) throw; + return static_cast*>(value.container)->value; + } + + template T* any_cast(any *value) { + if(!value || value->type() != typeid(T)) return 0; + return &static_cast*>(value->container)->value; + } + + template const T* any_cast(const any *value) { + if(!value || value->type() != typeid(T)) return 0; + return &static_cast*>(value->container)->value; + } +} + +#endif diff --git a/snesfilter/nall/array.hpp b/snesfilter/nall/array.hpp new file mode 100644 index 00000000..50a03f66 --- /dev/null +++ b/snesfilter/nall/array.hpp @@ -0,0 +1,94 @@ +#ifndef NALL_ARRAY_HPP +#define NALL_ARRAY_HPP + +#include +#include +#include + +namespace nall { + //dynamic vector array + //neither constructor nor destructor is ever invoked; + //thus, this should only be used for POD objects. + template class array { + protected: + T *pool; + unsigned poolsize, buffersize; + + public: + unsigned size() const { return buffersize; } + unsigned capacity() const { return poolsize; } + + void reset() { + if(pool) free(pool); + pool = 0; + poolsize = 0; + buffersize = 0; + } + + void reserve(unsigned newsize) { + if(newsize == poolsize) return; + + pool = (T*)realloc(pool, newsize * sizeof(T)); + poolsize = newsize; + buffersize = min(buffersize, newsize); + } + + void resize(unsigned newsize) { + if(newsize > poolsize) reserve(bit::round(newsize)); //round reserve size up to power of 2 + buffersize = newsize; + } + + T* get(unsigned minsize = 0) { + if(minsize > buffersize) resize(minsize); + if(minsize > buffersize) throw "array[] out of bounds"; + return pool; + } + + void add(const T data) { + operator[](buffersize) = data; + } + + signed find(const T data) { + for(unsigned i = 0; i < size(); i++) if(pool[i] == data) return i; + return -1; //not found + } + + void clear() { + memset(pool, 0, buffersize * sizeof(T)); + } + + array() { + pool = 0; + poolsize = 0; + buffersize = 0; + } + + ~array() { reset(); } + + array(const array &source) : pool(0) { + operator=(source); + } + + array& operator=(const array &source) { + if(pool) free(pool); + buffersize = source.buffersize; + poolsize = source.poolsize; + pool = (T*)malloc(sizeof(T) * poolsize); //allocate entire pool size, + memcpy(pool, source.pool, sizeof(T) * buffersize); //... but only copy used pool objects + return *this; + } + + inline T& operator[](unsigned index) { + if(index >= buffersize) resize(index + 1); + if(index >= buffersize) throw "array[] out of bounds"; + return pool[index]; + } + + inline const T& operator[](unsigned index) const { + if(index >= buffersize) throw "array[] out of bounds"; + return pool[index]; + } + }; +} + +#endif diff --git a/snesfilter/nall/base64.hpp b/snesfilter/nall/base64.hpp new file mode 100644 index 00000000..e41c87b7 --- /dev/null +++ b/snesfilter/nall/base64.hpp @@ -0,0 +1,90 @@ +#ifndef NALL_BASE64_HPP +#define NALL_BASE64_HPP + +#include +#include + +namespace nall { + class base64 { + public: + static bool encode(char *&output, const uint8_t* input, unsigned inlength) { + output = new char[inlength * 8 / 6 + 6](); + + unsigned i = 0, o = 0; + while(i < inlength) { + switch(i % 3) { + case 0: { + output[o++] = enc(input[i] >> 2); + output[o] = enc((input[i] & 3) << 4); + } break; + + case 1: { + uint8_t prev = dec(output[o]); + output[o++] = enc(prev + (input[i] >> 4)); + output[o] = enc((input[i] & 15) << 2); + } break; + + case 2: { + uint8_t prev = dec(output[o]); + output[o++] = enc(prev + (input[i] >> 6)); + output[o++] = enc(input[i] & 63); + } break; + } + + i++; + } + + return true; + } + + static bool decode(uint8_t *&output, unsigned &outlength, const char *input) { + unsigned inlength = strlen(input), infix = 0; + output = new uint8_t[inlength](); + + unsigned i = 0, o = 0; + while(i < inlength) { + uint8_t x = dec(input[i]); + + switch(i++ & 3) { + case 0: { + output[o] = x << 2; + } break; + + case 1: { + output[o++] |= x >> 4; + output[o] = (x & 15) << 4; + } break; + + case 2: { + output[o++] |= x >> 2; + output[o] = (x & 3) << 6; + } break; + + case 3: { + output[o++] |= x; + } break; + } + } + + outlength = o; + return true; + } + + private: + static char enc(uint8_t n) { + static char lookup_table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; + return lookup_table[n & 63]; + } + + static uint8_t dec(char n) { + if(n >= 'A' && n <= 'Z') return n - 'A'; + if(n >= 'a' && n <= 'z') return n - 'a' + 26; + if(n >= '0' && n <= '9') return n - '0' + 52; + if(n == '-') return 62; + if(n == '_') return 63; + return 0; + } + }; +} + +#endif diff --git a/snesfilter/nall/bit.hpp b/snesfilter/nall/bit.hpp new file mode 100644 index 00000000..169fc144 --- /dev/null +++ b/snesfilter/nall/bit.hpp @@ -0,0 +1,51 @@ +#ifndef NALL_BIT_HPP +#define NALL_BIT_HPP + +namespace nall { + template inline unsigned uclamp(const unsigned x) { + enum { y = (1U << bits) - 1 }; + return y + ((x - y) & -(x < y)); //min(x, y); + } + + template inline unsigned uclip(const unsigned x) { + enum { m = (1U << bits) - 1 }; + return (x & m); + } + + template inline signed sclamp(const signed x) { + enum { b = 1U << (bits - 1), m = (1U << (bits - 1)) - 1 }; + return (x > m) ? m : (x < -b) ? -b : x; + } + + template inline signed sclip(const signed x) { + enum { b = 1U << (bits - 1), m = (1U << bits) - 1 }; + return ((x & m) ^ b) - b; + } + + namespace bit { + //lowest(0b1110) == 0b0010 + template inline T lowest(const T x) { + return x & -x; + } + + //clear_lowest(0b1110) == 0b1100 + template inline T clear_lowest(const T x) { + return x & (x - 1); + } + + //set_lowest(0b0101) == 0b0111 + template inline T set_lowest(const T x) { + return x | (x + 1); + } + + //round up to next highest single bit: + //round(15) == 16, round(16) == 16, round(17) == 32 + inline unsigned round(unsigned x) { + if((x & (x - 1)) == 0) return x; + while(x & (x - 1)) x &= x - 1; + return x << 1; + } + } +} + +#endif diff --git a/snesfilter/nall/config.hpp b/snesfilter/nall/config.hpp new file mode 100644 index 00000000..10494e65 --- /dev/null +++ b/snesfilter/nall/config.hpp @@ -0,0 +1,124 @@ +#ifndef NALL_CONFIG_HPP +#define NALL_CONFIG_HPP + +#include +#include +#include + +namespace nall { + namespace configuration_traits { + template struct is_boolean { enum { value = false }; }; + template<> struct is_boolean { enum { value = true }; }; + + template struct is_signed { enum { value = false }; }; + template<> struct is_signed { enum { value = true }; }; + + template struct is_unsigned { enum { value = false }; }; + template<> struct is_unsigned { enum { value = true }; }; + + template struct is_double { enum { value = false }; }; + template<> struct is_double { enum { value = true }; }; + + template struct is_string { enum { value = false }; }; + template<> struct is_string { enum { value = true }; }; + } + + class configuration { + public: + enum type_t { boolean_t, signed_t, unsigned_t, double_t, string_t, unknown_t }; + struct item_t { + uintptr_t data; + string name; + string desc; + type_t type; + + string get() const { + switch(type) { + case boolean_t: return string() << *(bool*)data; + case signed_t: return string() << *(signed*)data; + case unsigned_t: return string() << *(unsigned*)data; + case double_t: return string() << *(double*)data; + case string_t: return string() << "\"" << *(string*)data << "\""; + } + return "???"; + } + + void set(string s) { + switch(type) { + case boolean_t: *(bool*)data = (s == "true"); break; + case signed_t: *(signed*)data = strsigned(s); break; + case unsigned_t: *(unsigned*)data = strunsigned(s); break; + case double_t: *(double*)data = strdouble(s); break; + case string_t: trim(s, "\""); *(string*)data = s; break; + } + } + }; + vector list; + + template + void attach(T &data, const char *name, const char *desc = "") { + unsigned n = list.size(); + list[n].data = (uintptr_t)&data; + list[n].name = name; + list[n].desc = desc; + + if(configuration_traits::is_boolean::value) list[n].type = boolean_t; + else if(configuration_traits::is_signed::value) list[n].type = signed_t; + else if(configuration_traits::is_unsigned::value) list[n].type = unsigned_t; + else if(configuration_traits::is_double::value) list[n].type = double_t; + else if(configuration_traits::is_string::value) list[n].type = string_t; + else list[n].type = unknown_t; + } + + virtual bool load(const char *filename) { + string data; + if(data.readfile(filename) == true) { + data.replace("\r", ""); + lstring line; + line.split("\n", data); + + for(unsigned i = 0; i < line.size(); i++) { + int position = qstrpos(line[i], "#"); + if(position >= 0) line[i][position] = 0; + if(qstrpos(line[i], " = ") < 0) continue; + + lstring part; + part.qsplit(" = ", line[i]); + trim(part[0]); + trim(part[1]); + + for(unsigned n = 0; n < list.size(); n++) { + if(part[0] == list[n].name) { + list[n].set(part[1]); + break; + } + } + } + + return true; + } else { + return false; + } + } + + virtual bool save(const char *filename) const { + file fp; + if(fp.open(filename, file::mode_write)) { + for(unsigned i = 0; i < list.size(); i++) { + string output; + output << list[i].name << " = " << list[i].get(); + if(list[i].desc != "") output << " # " << list[i].desc; + output << "\r\n"; + fp.print(output); + } + + fp.close(); + return true; + } else { + return false; + } + } + }; +} + +#endif diff --git a/snesfilter/nall/crc32.hpp b/snesfilter/nall/crc32.hpp new file mode 100644 index 00000000..ad36fbf6 --- /dev/null +++ b/snesfilter/nall/crc32.hpp @@ -0,0 +1,66 @@ +#ifndef NALL_CRC32_HPP +#define NALL_CRC32_HPP + +#include + +namespace nall { + const uint32_t crc32_table[256] = { + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, + 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, + 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, + 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, + 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, + 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, + 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, + 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, + 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, + 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, + 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, + 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, + 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, + 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, + 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, + 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, + 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, + 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, + 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, + 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, + 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, + 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, + 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, + 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, + 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, + 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, + 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, + 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, + 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, + 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, + 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, + 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, + 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, + 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, + 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d + }; + + inline uint32_t crc32_adjust(uint32_t crc32, uint8_t input) { + return ((crc32 >> 8) & 0x00ffffff) ^ crc32_table[(crc32 ^ input) & 0xff]; + } + + inline uint32_t crc32_calculate(const uint8_t *data, unsigned length) { + uint32_t crc32 = ~0; + for(unsigned i = 0; i < length; i++) { + crc32 = crc32_adjust(crc32, data[i]); + } + return ~crc32; + } +} + +#endif diff --git a/snesfilter/nall/detect.hpp b/snesfilter/nall/detect.hpp new file mode 100644 index 00000000..b4991aaf --- /dev/null +++ b/snesfilter/nall/detect.hpp @@ -0,0 +1,30 @@ +#ifndef NALL_DETECT_HPP +#define NALL_DETECT_HPP + +/* Compiler detection */ + +#if defined(__GNUC__) + #define COMPILER_GCC +#elif defined(_MSC_VER) + #define COMPILER_VISUALC +#endif + +/* Platform detection */ + +#if defined(_WIN32) + #define PLATFORM_WIN +#elif defined(__APPLE__) + #define PLATFORM_OSX +#elif defined(linux) || defined(__sun__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) + #define PLATFORM_X +#endif + +/* Endian detection */ + +#if defined(__i386__) || defined(__amd64__) || defined(_M_IX86) || defined(_M_AMD64) + #define ARCH_LSB +#elif defined(__powerpc__) || defined(_M_PPC) || defined(__BIG_ENDIAN__) + #define ARCH_MSB +#endif + +#endif diff --git a/snesfilter/nall/dictionary.hpp b/snesfilter/nall/dictionary.hpp new file mode 100644 index 00000000..35128c2f --- /dev/null +++ b/snesfilter/nall/dictionary.hpp @@ -0,0 +1,73 @@ +#ifndef NALL_DICTIONARY_HPP +#define NALL_DICTIONARY_HPP + +#include +#include +#include + +namespace nall { + class dictionary : noncopyable { + public: + string operator[](const char *input) { + for(unsigned i = 0; i < index_input.size(); i++) { + if(index_input[i] == input) return index_output[i]; + } + + //no match, use input; remove input identifier, if one exists + if(strbegin(input, "{{")) { + int pos = strpos(input, "}}"); + if(pos >= 0) { + string temp = substr(input, pos + 2); + return temp; + } + } + + return input; + } + + bool import(const char *filename) { + string data; + if(data.readfile(filename) == false) return false; + ltrim_once(data, "\xef\xbb\xbf"); //remove UTF-8 marker, if it exists + data.replace("\r", ""); + + lstring line; + line.split("\n", data); + for(unsigned i = 0; i < line.size(); i++) { + lstring part; + //format: "Input" = "Output" + part.qsplit("=", line[i]); + if(part.size() != 2) continue; + + //remove whitespace + trim(part[0]); + trim(part[1]); + + //remove quotes + trim_once(part[0], "\""); + trim_once(part[1], "\""); + + unsigned n = index_input.size(); + index_input[n] = part[0]; + index_output[n] = part[1]; + } + + return true; + } + + void reset() { + index_input.reset(); + index_output.reset(); + } + + ~dictionary() { + reset(); + } + + protected: + lstring index_input; + lstring index_output; + }; +} + +#endif diff --git a/snesfilter/nall/dl.hpp b/snesfilter/nall/dl.hpp new file mode 100644 index 00000000..4048a50a --- /dev/null +++ b/snesfilter/nall/dl.hpp @@ -0,0 +1,88 @@ +#ifndef NALL_DL_HPP +#define NALL_DL_HPP + +//dynamic linking support + +#include +#include +#include +#include + +#if defined(PLATFORM_X) + #include +#elif defined(PLATFORM_WIN) + #include + #include +#endif + +namespace nall { + struct library : noncopyable { + bool opened() const { return handle; } + bool open(const char*); + void* sym(const char*); + void close(); + + library() : handle(0) {} + ~library() { close(); } + + private: + uintptr_t handle; + }; + + #if defined(PLATFORM_X) + inline bool library::open(const char *name) { + if(handle) close(); + char *t = new char[strlen(name) + 256]; + strcpy(t, "lib"); + strcat(t, name); + strcat(t, ".so"); + handle = (uintptr_t)dlopen(t, RTLD_LAZY); + if(!handle) { + strcpy(t, "/usr/local/lib/lib"); + strcat(t, name); + strcat(t, ".so"); + handle = (uintptr_t)dlopen(t, RTLD_LAZY); + } + delete[] t; + return handle; + } + + inline void* library::sym(const char *name) { + if(!handle) return 0; + return dlsym((void*)handle, name); + } + + inline void library::close() { + if(!handle) return; + dlclose((void*)handle); + handle = 0; + } + #elif defined(PLATFORM_WIN) + inline bool library::open(const char *name) { + if(handle) close(); + char *t = new char[strlen(name) + 8]; + strcpy(t, name); + strcat(t, ".dll"); + handle = (uintptr_t)LoadLibraryW(utf16_t(t)); + delete[] t; + return handle; + } + + inline void* library::sym(const char *name) { + if(!handle) return 0; + return (void*)GetProcAddress((HMODULE)handle, name); + } + + inline void library::close() { + if(!handle) return; + FreeLibrary((HMODULE)handle); + handle = 0; + } + #else + inline bool library::open(const char*) { return false; } + inline void* library::sym(const char*) { return 0; } + inline void library::close() {} + #endif +}; + +#endif diff --git a/snesfilter/nall/endian.hpp b/snesfilter/nall/endian.hpp new file mode 100644 index 00000000..40d15633 --- /dev/null +++ b/snesfilter/nall/endian.hpp @@ -0,0 +1,38 @@ +#ifndef NALL_ENDIAN_HPP +#define NALL_ENDIAN_HPP + +#if !defined(ARCH_MSB) + //little-endian: uint8_t[] { 0x01, 0x02, 0x03, 0x04 } == 0x04030201 + #define order_lsb2(a,b) a,b + #define order_lsb3(a,b,c) a,b,c + #define order_lsb4(a,b,c,d) a,b,c,d + #define order_lsb5(a,b,c,d,e) a,b,c,d,e + #define order_lsb6(a,b,c,d,e,f) a,b,c,d,e,f + #define order_lsb7(a,b,c,d,e,f,g) a,b,c,d,e,f,g + #define order_lsb8(a,b,c,d,e,f,g,h) a,b,c,d,e,f,g,h + #define order_msb2(a,b) b,a + #define order_msb3(a,b,c) c,b,a + #define order_msb4(a,b,c,d) d,c,b,a + #define order_msb5(a,b,c,d,e) e,d,c,b,a + #define order_msb6(a,b,c,d,e,f) f,e,d,c,b,a + #define order_msb7(a,b,c,d,e,f,g) g,f,e,d,c,b,a + #define order_msb8(a,b,c,d,e,f,g,h) h,g,f,e,d,c,b,a +#else + //big-endian: uint8_t[] { 0x01, 0x02, 0x03, 0x04 } == 0x01020304 + #define order_lsb2(a,b) b,a + #define order_lsb3(a,b,c) c,b,a + #define order_lsb4(a,b,c,d) d,c,b,a + #define order_lsb5(a,b,c,d,e) e,d,c,b,a + #define order_lsb6(a,b,c,d,e,f) f,e,d,c,b,a + #define order_lsb7(a,b,c,d,e,f,g) g,f,e,d,c,b,a + #define order_lsb8(a,b,c,d,e,f,g,h) h,g,f,e,d,c,b,a + #define order_msb2(a,b) a,b + #define order_msb3(a,b,c) a,b,c + #define order_msb4(a,b,c,d) a,b,c,d + #define order_msb5(a,b,c,d,e) a,b,c,d,e + #define order_msb6(a,b,c,d,e,f) a,b,c,d,e,f + #define order_msb7(a,b,c,d,e,f,g) a,b,c,d,e,f,g + #define order_msb8(a,b,c,d,e,f,g,h) a,b,c,d,e,f,g,h +#endif + +#endif diff --git a/snesfilter/nall/file.hpp b/snesfilter/nall/file.hpp new file mode 100644 index 00000000..29be589c --- /dev/null +++ b/snesfilter/nall/file.hpp @@ -0,0 +1,256 @@ +#ifndef NALL_FILE_HPP +#define NALL_FILE_HPP + +#include +#include + +#if !defined(_WIN32) + #include +#else + #include +#endif + +#include +#include +#include + +namespace nall { + inline FILE* fopen_utf8(const char *utf8_filename, const char *mode) { + #if !defined(_WIN32) + return fopen(utf8_filename, mode); + #else + return _wfopen(utf16_t(utf8_filename), utf16_t(mode)); + #endif + } + + class file : noncopyable { + public: + enum FileMode { mode_read, mode_write, mode_readwrite, mode_writeread }; + enum SeekMode { seek_absolute, seek_relative }; + + uint8_t read() { + if(!fp) return 0xff; //file not open + if(file_mode == mode_write) return 0xff; //reads not permitted + if(file_offset >= file_size) return 0xff; //cannot read past end of file + buffer_sync(); + return buffer[(file_offset++) & buffer_mask]; + } + + uintmax_t readl(unsigned length = 1) { + uintmax_t data = 0; + for(int i = 0; i < length; i++) { + data |= (uintmax_t)read() << (i << 3); + } + return data; + } + + uintmax_t readm(unsigned length = 1) { + uintmax_t data = 0; + while(length--) { + data <<= 8; + data |= read(); + } + return data; + } + + void read(uint8_t *buffer, unsigned length) { + while(length--) *buffer++ = read(); + } + + void write(uint8_t data) { + if(!fp) return; //file not open + if(file_mode == mode_read) return; //writes not permitted + buffer_sync(); + buffer[(file_offset++) & buffer_mask] = data; + buffer_dirty = true; + if(file_offset > file_size) file_size = file_offset; + } + + void writel(uintmax_t data, unsigned length = 1) { + while(length--) { + write(data); + data >>= 8; + } + } + + void writem(uintmax_t data, unsigned length = 1) { + for(int i = length - 1; i >= 0; i--) { + write(data >> (i << 3)); + } + } + + void write(const uint8_t *buffer, unsigned length) { + while(length--) write(*buffer++); + } + + void print(const char *string) { + if(!string) return; + while(*string) write(*string++); + } + + void flush() { + buffer_flush(); + fflush(fp); + } + + void seek(int offset, SeekMode mode = seek_absolute) { + if(!fp) return; //file not open + buffer_flush(); + + uintmax_t req_offset = file_offset; + switch(mode) { + case seek_absolute: req_offset = offset; break; + case seek_relative: req_offset += offset; break; + } + + if(req_offset < 0) req_offset = 0; //cannot seek before start of file + if(req_offset > file_size) { + if(file_mode == mode_read) { //cannot seek past end of file + req_offset = file_size; + } else { //pad file to requested location + file_offset = file_size; + while(file_size < req_offset) write(0x00); + } + } + + file_offset = req_offset; + } + + int offset() { + if(!fp) return -1; //file not open + return file_offset; + } + + int size() { + if(!fp) return -1; //file not open + return file_size; + } + + bool truncate(unsigned size) { + if(!fp) return false; //file not open + #if !defined(_WIN32) + return ftruncate(fileno(fp), size) == 0; + #else + return _chsize(fileno(fp), size) == 0; + #endif + } + + bool end() { + if(!fp) return true; //file not open + return file_offset >= file_size; + } + + static bool exists(const char *fn) { + #if !defined(_WIN32) + FILE *fp = fopen(fn, "rb"); + #else + FILE *fp = _wfopen(utf16_t(fn), L"rb"); + #endif + if(fp) { + fclose(fp); + return true; + } + return false; + } + + static unsigned size(const char *fn) { + #if !defined(_WIN32) + FILE *fp = fopen(fn, "rb"); + #else + FILE *fp = _wfopen(utf16_t(fn), L"rb"); + #endif + unsigned filesize = 0; + if(fp) { + fseek(fp, 0, SEEK_END); + filesize = ftell(fp); + fclose(fp); + } + return filesize; + } + + bool open() { + return fp; + } + + bool open(const char *fn, FileMode mode) { + if(fp) return false; + + switch(file_mode = mode) { + #if !defined(_WIN32) + case mode_read: fp = fopen(fn, "rb"); break; + case mode_write: fp = fopen(fn, "wb+"); break; //need read permission for buffering + case mode_readwrite: fp = fopen(fn, "rb+"); break; + case mode_writeread: fp = fopen(fn, "wb+"); break; + #else + case mode_read: fp = _wfopen(utf16_t(fn), L"rb"); break; + case mode_write: fp = _wfopen(utf16_t(fn), L"wb+"); break; + case mode_readwrite: fp = _wfopen(utf16_t(fn), L"rb+"); break; + case mode_writeread: fp = _wfopen(utf16_t(fn), L"wb+"); break; + #endif + } + if(!fp) return false; + buffer_offset = -1; //invalidate buffer + file_offset = 0; + fseek(fp, 0, SEEK_END); + file_size = ftell(fp); + fseek(fp, 0, SEEK_SET); + return true; + } + + void close() { + if(!fp) return; + buffer_flush(); + fclose(fp); + fp = 0; + } + + file() { + memset(buffer, 0, sizeof buffer); + buffer_offset = -1; + buffer_dirty = false; + fp = 0; + file_offset = 0; + file_size = 0; + file_mode = mode_read; + } + + ~file() { + close(); + } + + private: + enum { buffer_size = 1 << 12, buffer_mask = buffer_size - 1 }; + char buffer[buffer_size]; + int buffer_offset; + bool buffer_dirty; + FILE *fp; + unsigned file_offset; + unsigned file_size; + FileMode file_mode; + + void buffer_sync() { + if(!fp) return; //file not open + if(buffer_offset != (file_offset & ~buffer_mask)) { + buffer_flush(); + buffer_offset = file_offset & ~buffer_mask; + fseek(fp, buffer_offset, SEEK_SET); + unsigned length = (buffer_offset + buffer_size) <= file_size ? buffer_size : (file_size & buffer_mask); + if(length) unsigned unused = fread(buffer, 1, length, fp); + } + } + + void buffer_flush() { + if(!fp) return; //file not open + if(file_mode == mode_read) return; //buffer cannot be written to + if(buffer_offset < 0) return; //buffer unused + if(buffer_dirty == false) return; //buffer unmodified since read + fseek(fp, buffer_offset, SEEK_SET); + unsigned length = (buffer_offset + buffer_size) <= file_size ? buffer_size : (file_size & buffer_mask); + if(length) unsigned unused = fwrite(buffer, 1, length, fp); + buffer_offset = -1; //invalidate buffer + buffer_dirty = false; + } + }; +} + +#endif diff --git a/snesfilter/nall/filemap.hpp b/snesfilter/nall/filemap.hpp new file mode 100644 index 00000000..a05f0eb7 --- /dev/null +++ b/snesfilter/nall/filemap.hpp @@ -0,0 +1,190 @@ +#ifndef NALL_FILEMAP_HPP +#define NALL_FILEMAP_HPP + +#include +#include + +#include +#include +#if defined(_WIN32) + #include +#else + #include + #include + #include + #include + #include +#endif + +namespace nall { + class filemap { + public: + enum filemode { mode_read, mode_write, mode_readwrite, mode_writeread }; + + bool open(const char *filename, filemode mode) { return p_open(filename, mode); } + void close() { return p_close(); } + unsigned size() const { return p_size; } + uint8_t* handle() { return p_handle; } + const uint8_t* handle() const { return p_handle; } + filemap() : p_size(0), p_handle(0) { p_ctor(); } + ~filemap() { p_dtor(); } + + private: + unsigned p_size; + uint8_t *p_handle; + + #if defined(_WIN32) + //============= + //MapViewOfFile + //============= + + HANDLE p_filehandle, p_maphandle; + + bool p_open(const char *filename, filemode mode) { + int desired_access, creation_disposition, flprotect, map_access; + + switch(mode) { + default: return false; + case mode_read: + desired_access = GENERIC_READ; + creation_disposition = OPEN_EXISTING; + flprotect = PAGE_READONLY; + map_access = FILE_MAP_READ; + break; + case mode_write: + //write access requires read access + desired_access = GENERIC_WRITE; + creation_disposition = CREATE_ALWAYS; + flprotect = PAGE_READWRITE; + map_access = FILE_MAP_ALL_ACCESS; + break; + case mode_readwrite: + desired_access = GENERIC_READ | GENERIC_WRITE; + creation_disposition = OPEN_EXISTING; + flprotect = PAGE_READWRITE; + map_access = FILE_MAP_ALL_ACCESS; + break; + case mode_writeread: + desired_access = GENERIC_READ | GENERIC_WRITE; + creation_disposition = CREATE_NEW; + flprotect = PAGE_READWRITE; + map_access = FILE_MAP_ALL_ACCESS; + break; + } + + p_filehandle = CreateFileW(utf16_t(filename), desired_access, FILE_SHARE_READ, NULL, + creation_disposition, FILE_ATTRIBUTE_NORMAL, NULL); + if(p_filehandle == INVALID_HANDLE_VALUE) return false; + + p_size = GetFileSize(p_filehandle, NULL); + + p_maphandle = CreateFileMapping(p_filehandle, NULL, flprotect, 0, p_size, NULL); + if(p_maphandle == INVALID_HANDLE_VALUE) { + CloseHandle(p_filehandle); + p_filehandle = INVALID_HANDLE_VALUE; + return false; + } + + p_handle = (uint8_t*)MapViewOfFile(p_maphandle, map_access, 0, 0, p_size); + return p_handle; + } + + void p_close() { + if(p_handle) { + UnmapViewOfFile(p_handle); + p_handle = 0; + } + + if(p_maphandle != INVALID_HANDLE_VALUE) { + CloseHandle(p_maphandle); + p_maphandle = INVALID_HANDLE_VALUE; + } + + if(p_filehandle != INVALID_HANDLE_VALUE) { + CloseHandle(p_filehandle); + p_filehandle = INVALID_HANDLE_VALUE; + } + } + + void p_ctor() { + p_filehandle = INVALID_HANDLE_VALUE; + p_maphandle = INVALID_HANDLE_VALUE; + } + + void p_dtor() { + close(); + } + + #else + //==== + //mmap + //==== + + int p_fd; + + bool p_open(const char *filename, filemode mode) { + int open_flags, mmap_flags; + + switch(mode) { + default: return false; + case mode_read: + open_flags = O_RDONLY; + mmap_flags = PROT_READ; + break; + case mode_write: + open_flags = O_RDWR | O_CREAT; //mmap() requires read access + mmap_flags = PROT_WRITE; + break; + case mode_readwrite: + open_flags = O_RDWR; + mmap_flags = PROT_READ | PROT_WRITE; + break; + case mode_writeread: + open_flags = O_RDWR | O_CREAT; + mmap_flags = PROT_READ | PROT_WRITE; + break; + } + + p_fd = ::open(filename, open_flags); + if(p_fd < 0) return false; + + struct stat p_stat; + fstat(p_fd, &p_stat); + p_size = p_stat.st_size; + + p_handle = (uint8_t*)mmap(0, p_size, mmap_flags, MAP_SHARED, p_fd, 0); + if(p_handle == MAP_FAILED) { + p_handle = 0; + ::close(p_fd); + p_fd = -1; + return false; + } + + return p_handle; + } + + void p_close() { + if(p_handle) { + munmap(p_handle, p_size); + p_handle = 0; + } + + if(p_fd >= 0) { + ::close(p_fd); + p_fd = -1; + } + } + + void p_ctor() { + p_fd = -1; + } + + void p_dtor() { + p_close(); + } + + #endif + }; +} + +#endif diff --git a/snesfilter/nall/function.hpp b/snesfilter/nall/function.hpp new file mode 100644 index 00000000..79195f70 --- /dev/null +++ b/snesfilter/nall/function.hpp @@ -0,0 +1,190 @@ +#ifndef NALL_FUNCTION_HPP +#define NALL_FUNCTION_HPP + +#include + +//prologue + +#define TN typename + +namespace nall { + template class function; +} + +//parameters = 0 + +#define cat(n) n +#define TL typename R +#define PL +#define CL + +#include "function.hpp" + +//parameters = 1 + +#define cat(n) , n +#define TL TN R, TN P1 +#define PL P1 p1 +#define CL p1 + +#include "function.hpp" + +//parameters = 2 + +#define cat(n) , n +#define TL TN R, TN P1, TN P2 +#define PL P1 p1, P2 p2 +#define CL p1, p2 + +#include "function.hpp" + +//parameters = 3 + +#define cat(n) , n +#define TL TN R, TN P1, TN P2, TN P3 +#define PL P1 p1, P2 p2, P3 p3 +#define CL p1, p2, p3 + +#include "function.hpp" + +//parameters = 4 + +#define cat(n) , n +#define TL TN R, TN P1, TN P2, TN P3, TN P4 +#define PL P1 p1, P2 p2, P3 p3, P4 p4 +#define CL p1, p2, p3, p4 + +#include "function.hpp" + +//parameters = 5 + +#define cat(n) , n +#define TL TN R, TN P1, TN P2, TN P3, TN P4, TN P5 +#define PL P1 p1, P2 p2, P3 p3, P4 p4, P5 p5 +#define CL p1, p2, p3, p4, p5 + +#include "function.hpp" + +//parameters = 6 + +#define cat(n) , n +#define TL TN R, TN P1, TN P2, TN P3, TN P4, TN P5, TN P6 +#define PL P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6 +#define CL p1, p2, p3, p4, p5, p6 + +#include "function.hpp" + +//parameters = 7 + +#define cat(n) , n +#define TL TN R, TN P1, TN P2, TN P3, TN P4, TN P5, TN P6, TN P7 +#define PL P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7 +#define CL p1, p2, p3, p4, p5, p6, p7 + +#include "function.hpp" + +//parameters = 8 + +#define cat(n) , n +#define TL TN R, TN P1, TN P2, TN P3, TN P4, TN P5, TN P6, TN P7, TN P8 +#define PL P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8 +#define CL p1, p2, p3, p4, p5, p6, p7, p8 + +#include "function.hpp" + +//epilogue + +#undef TN +#define NALL_FUNCTION_T + +#elif !defined(NALL_FUNCTION_T) + +//function implementation template class + +namespace nall { + template + class function { + private: + struct base1 { virtual void func1(PL) {} }; + struct base2 { virtual void func2(PL) {} }; + struct derived : base1, virtual base2 {}; + + struct data_t { + R (*fn_call)(const data_t& cat(PL)); + union { + R (*fn_global)(PL); + struct { + R (derived::*fn_member)(PL); + void *object; + }; + }; + } data; + + static R fn_call_global(const data_t &d cat(PL)) { + return d.fn_global(CL); + } + + template + static R fn_call_member(const data_t &d cat(PL)) { + return (((C*)d.object)->*((R (C::*&)(PL))d.fn_member))(CL); + } + + public: + R operator()(PL) const { return data.fn_call(data cat(CL)); } + operator bool() const { return data.fn_call; } + + function() { data.fn_call = 0; } + + function(void *fn) { + data.fn_call = &fn_call_global; + data.fn_global = (R (*)(PL))fn; + } + + function(R (*fn)(PL)) { + data.fn_call = &fn_call_global; + data.fn_global = fn; + } + + template + function(R (C::*fn)(PL), C *obj) { + data.fn_call = &fn_call_member; + (R (C::*&)(PL))data.fn_member = fn; + assert(sizeof data.fn_member >= sizeof fn); + data.object = obj; + } + + template + function(R (C::*fn)(PL) const, C *obj) { + data.fn_call = &fn_call_member; + (R (C::*&)(PL))data.fn_member = (R (C::*&)(PL))fn; + assert(sizeof data.fn_member >= sizeof fn); + data.object = obj; + } + + function& operator=(void *fn) { return operator=(function(fn)); } + function& operator=(const function &source) { memcpy(&data, &source.data, sizeof(data_t)); return *this; } + function(const function &source) { memcpy(&data, &source.data, sizeof(data_t)); } + }; + + template + function bind(R (*fn)(PL)) { + return function(fn); + } + + template + function bind(R (C::*fn)(PL), C *obj) { + return function(fn, obj); + } + + template + function bind(R (C::*fn)(PL) const, C *obj) { + return function(fn, obj); + } +} + +#undef cat +#undef TL +#undef PL +#undef CL + +#endif diff --git a/snesfilter/nall/input.hpp b/snesfilter/nall/input.hpp new file mode 100644 index 00000000..b3ce9ebf --- /dev/null +++ b/snesfilter/nall/input.hpp @@ -0,0 +1,386 @@ +#ifndef NALL_INPUT_HPP +#define NALL_INPUT_HPP + +#include +#include +#include + +#include +#include + +namespace nall { + +struct Keyboard; +Keyboard& keyboard(unsigned = 0); + +static const char KeyboardScancodeName[][64] = { + "Escape", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", + "PrintScreen", "ScrollLock", "Pause", "Tilde", + "Num1", "Num2", "Num3", "Num4", "Num5", "Num6", "Num7", "Num8", "Num9", "Num0", + "Dash", "Equal", "Backspace", + "Insert", "Delete", "Home", "End", "PageUp", "PageDown", + "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", + "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", + "LeftBracket", "RightBracket", "Backslash", "Semicolon", "Apostrophe", "Comma", "Period", "Slash", + "Keypad1", "Keypad2", "Keypad3", "Keypad4", "Keypad5", "Keypad6", "Keypad7", "Keypad8", "Keypad9", "Keypad0", + "Point", "Enter", "Add", "Subtract", "Multiply", "Divide", + "NumLock", "CapsLock", + "Up", "Down", "Left", "Right", + "Tab", "Return", "Spacebar", "Menu", + "Shift", "Control", "Alt", "Super", +}; + +struct Keyboard { + const unsigned ID; + enum { Base = 1 }; + enum { Count = 8, Size = 128 }; + + enum Scancode { + Escape, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, + PrintScreen, ScrollLock, Pause, Tilde, + Num1, Num2, Num3, Num4, Num5, Num6, Num7, Num8, Num9, Num0, + Dash, Equal, Backspace, + Insert, Delete, Home, End, PageUp, PageDown, + A, B, C, D, E, F, G, H, I, J, K, L, M, + N, O, P, Q, R, S, T, U, V, W, X, Y, Z, + LeftBracket, RightBracket, Backslash, Semicolon, Apostrophe, Comma, Period, Slash, + Keypad1, Keypad2, Keypad3, Keypad4, Keypad5, Keypad6, Keypad7, Keypad8, Keypad9, Keypad0, + Point, Enter, Add, Subtract, Multiply, Divide, + NumLock, CapsLock, + Up, Down, Left, Right, + Tab, Return, Spacebar, Menu, + Shift, Control, Alt, Super, + Limit, + }; + + static signed numberDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(keyboard(i).belongsTo(scancode)) return i; + } + return -1; + } + + static signed keyDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(keyboard(i).isKey(scancode)) return scancode - keyboard(i).key(Escape); + } + return -1; + } + + static signed modifierDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(keyboard(i).isModifier(scancode)) return scancode - keyboard(i).key(Shift); + } + return -1; + } + + static bool isAnyKey(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(keyboard(i).isKey(scancode)) return true; + } + return false; + } + + static bool isAnyModifier(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(keyboard(i).isModifier(scancode)) return true; + } + return false; + } + + static uint16_t decode(const char *name) { + string s(name); + if(!strbegin(name, "KB")) return 0; + ltrim(s, "KB"); + unsigned id = strunsigned(s); + int pos = strpos(s, "::"); + if(pos < 0) return 0; + s = substr(s, pos + 2); + for(unsigned i = 0; i < Limit; i++) { + if(s == KeyboardScancodeName[i]) return Base + Size * id + i; + } + return 0; + } + + string encode(uint16_t code) const { + unsigned index = 0; + for(unsigned i = 0; i < Count; i++) { + if(code >= Base + Size * i && code < Base + Size * (i + 1)) { + index = code - (Base + Size * i); + break; + } + } + return string() << "KB" << ID << "::" << KeyboardScancodeName[index]; + } + + uint16_t operator[](Scancode code) const { return Base + ID * Size + code; } + uint16_t key(unsigned id) const { return Base + Size * ID + id; } + bool isKey(unsigned id) const { return id >= key(Escape) && id <= key(Menu); } + bool isModifier(unsigned id) const { return id >= key(Shift) && id <= key(Super); } + bool belongsTo(uint16_t scancode) const { return isKey(scancode) || isModifier(scancode); } + + Keyboard(unsigned ID_) : ID(ID_) {} +}; + +inline Keyboard& keyboard(unsigned id) { + static Keyboard kb0(0), kb1(1), kb2(2), kb3(3), kb4(4), kb5(5), kb6(6), kb7(7); + switch(id) { default: + case 0: return kb0; case 1: return kb1; case 2: return kb2; case 3: return kb3; + case 4: return kb4; case 5: return kb5; case 6: return kb6; case 7: return kb7; + } +} + +static const char MouseScancodeName[][64] = { + "Xaxis", "Yaxis", "Zaxis", + "Button0", "Button1", "Button2", "Button3", "Button4", "Button5", "Button6", "Button7", +}; + +struct Mouse; +Mouse& mouse(unsigned = 0); + +struct Mouse { + const unsigned ID; + enum { Base = Keyboard::Base + Keyboard::Size * Keyboard::Count }; + enum { Count = 8, Size = 16 }; + enum { Axes = 3, Buttons = 8 }; + + enum Scancode { + Xaxis, Yaxis, Zaxis, + Button0, Button1, Button2, Button3, Button4, Button5, Button6, Button7, + Limit, + }; + + static signed numberDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(mouse(i).belongsTo(scancode)) return i; + } + return -1; + } + + static signed axisDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(mouse(i).isAxis(scancode)) return scancode - mouse(i).axis(0); + } + return -1; + } + + static signed buttonDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(mouse(i).isButton(scancode)) return scancode - mouse(i).button(0); + } + return -1; + } + + static bool isAnyAxis(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(mouse(i).isAxis(scancode)) return true; + } + return false; + } + + static bool isAnyButton(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(mouse(i).isButton(scancode)) return true; + } + return false; + } + + static uint16_t decode(const char *name) { + string s(name); + if(!strbegin(name, "MS")) return 0; + ltrim(s, "MS"); + unsigned id = strunsigned(s); + int pos = strpos(s, "::"); + if(pos < 0) return 0; + s = substr(s, pos + 2); + for(unsigned i = 0; i < Limit; i++) { + if(s == MouseScancodeName[i]) return Base + Size * id + i; + } + return 0; + } + + string encode(uint16_t code) const { + unsigned index = 0; + for(unsigned i = 0; i < Count; i++) { + if(code >= Base + Size * i && code < Base + Size * (i + 1)) { + index = code - (Base + Size * i); + break; + } + } + return string() << "MS" << ID << "::" << MouseScancodeName[index]; + } + + uint16_t operator[](Scancode code) const { return Base + ID * Size + code; } + uint16_t axis(unsigned id) const { return Base + Size * ID + Xaxis + id; } + uint16_t button(unsigned id) const { return Base + Size * ID + Button0 + id; } + bool isAxis(unsigned id) const { return id >= axis(0) && id <= axis(2); } + bool isButton(unsigned id) const { return id >= button(0) && id <= button(7); } + bool belongsTo(uint16_t scancode) const { return isAxis(scancode) || isButton(scancode); } + + Mouse(unsigned ID_) : ID(ID_) {} +}; + +inline Mouse& mouse(unsigned id) { + static Mouse ms0(0), ms1(1), ms2(2), ms3(3), ms4(4), ms5(5), ms6(6), ms7(7); + switch(id) { default: + case 0: return ms0; case 1: return ms1; case 2: return ms2; case 3: return ms3; + case 4: return ms4; case 5: return ms5; case 6: return ms6; case 7: return ms7; + } +} + +static const char JoypadScancodeName[][64] = { + "Hat0", "Hat1", "Hat2", "Hat3", "Hat4", "Hat5", "Hat6", "Hat7", + "Axis0", "Axis1", "Axis2", "Axis3", "Axis4", "Axis5", "Axis6", "Axis7", + "Axis8", "Axis9", "Axis10", "Axis11", "Axis12", "Axis13", "Axis14", "Axis15", + "Button0", "Button1", "Button2", "Button3", "Button4", "Button5", "Button6", "Button7", + "Button8", "Button9", "Button10", "Button11", "Button12", "Button13", "Button14", "Button15", + "Button16", "Button17", "Button18", "Button19", "Button20", "Button21", "Button22", "Button23", + "Button24", "Button25", "Button26", "Button27", "Button28", "Button29", "Button30", "Button31", +}; + +struct Joypad; +Joypad& joypad(unsigned = 0); + +struct Joypad { + const unsigned ID; + enum { Base = Mouse::Base + Mouse::Size * Mouse::Count }; + enum { Count = 8, Size = 64 }; + enum { Hats = 8, Axes = 16, Buttons = 32 }; + + enum Scancode { + Hat0, Hat1, Hat2, Hat3, Hat4, Hat5, Hat6, Hat7, + Axis0, Axis1, Axis2, Axis3, Axis4, Axis5, Axis6, Axis7, + Axis8, Axis9, Axis10, Axis11, Axis12, Axis13, Axis14, Axis15, + Button0, Button1, Button2, Button3, Button4, Button5, Button6, Button7, + Button8, Button9, Button10, Button11, Button12, Button13, Button14, Button15, + Button16, Button17, Button18, Button19, Button20, Button21, Button22, Button23, + Button24, Button25, Button26, Button27, Button28, Button29, Button30, Button31, + Limit, + }; + + enum Hat { HatCenter = 0, HatUp = 1, HatRight = 2, HatDown = 4, HatLeft = 8 }; + + static signed numberDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(joypad(i).belongsTo(scancode)) return i; + } + return -1; + } + + static signed hatDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(joypad(i).isHat(scancode)) return scancode - joypad(i).hat(0); + } + return -1; + } + + static signed axisDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(joypad(i).isAxis(scancode)) return scancode - joypad(i).axis(0); + } + return -1; + } + + static signed buttonDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(joypad(i).isButton(scancode)) return scancode - joypad(i).button(0); + } + return -1; + } + + static bool isAnyHat(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(joypad(i).isHat(scancode)) return true; + } + return false; + } + + static bool isAnyAxis(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(joypad(i).isAxis(scancode)) return true; + } + return false; + } + + static bool isAnyButton(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(joypad(i).isButton(scancode)) return true; + } + return false; + } + + static uint16_t decode(const char *name) { + string s(name); + if(!strbegin(name, "JP")) return 0; + ltrim(s, "JP"); + unsigned id = strunsigned(s); + int pos = strpos(s, "::"); + if(pos < 0) return 0; + s = substr(s, pos + 2); + for(unsigned i = 0; i < Limit; i++) { + if(s == JoypadScancodeName[i]) return Base + Size * id + i; + } + return 0; + } + + string encode(uint16_t code) const { + unsigned index = 0; + for(unsigned i = 0; i < Count; i++) { + if(code >= Base + Size * i && code < Base + Size * (i + 1)) { + index = code - (Base + Size * i); + } + } + return string() << "JP" << ID << "::" << JoypadScancodeName[index]; + } + + uint16_t operator[](Scancode code) const { return Base + ID * Size + code; } + uint16_t hat(unsigned id) const { return Base + Size * ID + Hat0 + id; } + uint16_t axis(unsigned id) const { return Base + Size * ID + Axis0 + id; } + uint16_t button(unsigned id) const { return Base + Size * ID + Button0 + id; } + bool isHat(unsigned id) const { return id >= hat(0) && id <= hat(7); } + bool isAxis(unsigned id) const { return id >= axis(0) && id <= axis(15); } + bool isButton(unsigned id) const { return id >= button(0) && id <= button(31); } + bool belongsTo(uint16_t scancode) const { return isHat(scancode) || isAxis(scancode) || isButton(scancode); } + + Joypad(unsigned ID_) : ID(ID_) {} +}; + +inline Joypad& joypad(unsigned id) { + static Joypad jp0(0), jp1(1), jp2(2), jp3(3), jp4(4), jp5(5), jp6(6), jp7(7); + switch(id) { default: + case 0: return jp0; case 1: return jp1; case 2: return jp2; case 3: return jp3; + case 4: return jp4; case 5: return jp5; case 6: return jp6; case 7: return jp7; + } +} + +struct Scancode { + enum { None = 0, Limit = Joypad::Base + Joypad::Size * Joypad::Count }; + + static uint16_t decode(const char *name) { + uint16_t code; + code = Keyboard::decode(name); + if(code) return code; + code = Mouse::decode(name); + if(code) return code; + code = Joypad::decode(name); + if(code) return code; + return None; + } + + static string encode(uint16_t code) { + for(unsigned i = 0; i < Keyboard::Count; i++) { + if(keyboard(i).belongsTo(code)) return keyboard(i).encode(code); + } + for(unsigned i = 0; i < Mouse::Count; i++) { + if(mouse(i).belongsTo(code)) return mouse(i).encode(code); + } + for(unsigned i = 0; i < Joypad::Count; i++) { + if(joypad(i).belongsTo(code)) return joypad(i).encode(code); + } + return "None"; + } +}; + +} + +#endif diff --git a/snesfilter/nall/lzss.hpp b/snesfilter/nall/lzss.hpp new file mode 100644 index 00000000..202bc814 --- /dev/null +++ b/snesfilter/nall/lzss.hpp @@ -0,0 +1,81 @@ +#ifndef NALL_LZSS_HPP +#define NALL_LZSS_HPP + +#include +#include +#include + +namespace nall { + class lzss { + public: + static bool encode(uint8_t *&output, unsigned &outlength, const uint8_t *input, unsigned inlength) { + output = new(zeromemory) uint8_t[inlength * 9 / 8 + 9]; + + unsigned i = 0, o = 0; + while(i < inlength) { + unsigned flagoffset = o++; + uint8_t flag = 0x00; + + for(unsigned b = 0; b < 8 && i < inlength; b++) { + unsigned longest = 0, pointer; + for(unsigned index = 1; index < 4096; index++) { + unsigned count = 0; + while(true) { + if(count >= 15 + 3) break; //verify pattern match is not longer than max length + if(i + count >= inlength) break; //verify pattern match does not read past end of input + if(i + count < index) break; //verify read is not before start of input + if(input[i + count] != input[i + count - index]) break; //verify pattern still matches + count++; + } + + if(count > longest) { + longest = count; + pointer = index; + } + } + + if(longest < 3) output[o++] = input[i++]; + else { + flag |= 1 << b; + uint16_t x = ((longest - 3) << 12) + pointer; + output[o++] = x; + output[o++] = x >> 8; + i += longest; + } + } + + output[flagoffset] = flag; + } + + outlength = o; + return true; + } + + static bool decode(uint8_t *&output, const uint8_t *input, unsigned length) { + output = new(zeromemory) uint8_t[length]; + + unsigned i = 0, o = 0; + while(o < length) { + uint8_t flag = input[i++]; + + for(unsigned b = 0; b < 8 && o < length; b++) { + if(!(flag & (1 << b))) output[o++] = input[i++]; + else { + uint16_t offset = input[i++]; + offset += input[i++] << 8; + uint16_t lookuplength = (offset >> 12) + 3; + offset &= 4095; + for(unsigned index = 0; index < lookuplength && o + index < length; index++) { + output[o + index] = output[o + index - offset]; + } + o += lookuplength; + } + } + } + + return true; + } + }; +} + +#endif diff --git a/snesfilter/nall/moduloarray.hpp b/snesfilter/nall/moduloarray.hpp new file mode 100644 index 00000000..be549ae9 --- /dev/null +++ b/snesfilter/nall/moduloarray.hpp @@ -0,0 +1,40 @@ +#ifndef NALL_MODULO_HPP +#define NALL_MODULO_HPP + +#include + +namespace nall { + template class modulo_array { + public: + inline T operator[](int index) const { + return buffer[size + index]; + } + + inline T read(int index) const { + return buffer[size + index]; + } + + inline void write(unsigned index, const T value) { + buffer[index] = + buffer[index + size] = + buffer[index + size + size] = value; + } + + void serialize(serializer &s) { + s.array(buffer, size * 3); + } + + modulo_array() { + buffer = new T[size * 3](); + } + + ~modulo_array() { + delete[] buffer; + } + + private: + T *buffer; + }; +} + +#endif diff --git a/snesfilter/nall/platform.hpp b/snesfilter/nall/platform.hpp new file mode 100644 index 00000000..0bd62895 --- /dev/null +++ b/snesfilter/nall/platform.hpp @@ -0,0 +1,77 @@ +#ifndef NALL_PLATFORM_HPP +#define NALL_PLATFORM_HPP + +//========================= +//standard platform headers +//========================= + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(_WIN32) + #include + #include + #include + #undef interface +#else + #include + #include + #include +#endif + +//================== +//warning supression +//================== + +//Visual C++ +#if defined(_MSC_VER) + //disable libc "deprecation" warnings + #pragma warning(disable:4996) +#endif + +//================ +//POSIX compliance +//================ + +#if defined(_MSC_VER) + #define PATH_MAX _MAX_PATH + #define va_copy(dest, src) ((dest) = (src)) +#endif + +#if defined(_WIN32) + #define getcwd _getcwd + #define ftruncate _chsize + #define putenv _putenv + #define rmdir _rmdir + #define vsnprintf _vsnprintf + #define usleep(n) Sleep(n / 1000) +#endif + +//================ +//inline expansion +//================ + +#if defined(__GNUC__) + #define noinline __attribute__((noinline)) + #define inline inline + #define alwaysinline inline __attribute__((always_inline)) +#elif defined(_MSC_VER) + #define noinline __declspec(noinline) + #define inline inline + #define alwaysinline inline __forceinline +#else + #define noinline + #define inline inline + #define alwaysinline inline +#endif + +#endif + diff --git a/snesfilter/nall/priorityqueue.hpp b/snesfilter/nall/priorityqueue.hpp new file mode 100644 index 00000000..7f33e23b --- /dev/null +++ b/snesfilter/nall/priorityqueue.hpp @@ -0,0 +1,106 @@ +#ifndef NALL_PRIORITYQUEUE_HPP +#define NALL_PRIORITYQUEUE_HPP + +#include +#include +#include +#include + +namespace nall { + template void priority_queue_nocallback(type_t) {} + + //priority queue implementation using binary min-heap array; + //does not require normalize() function. + //O(1) find (tick) + //O(log n) insert (enqueue) + //O(log n) remove (dequeue) + template class priority_queue : noncopyable { + public: + inline void tick(unsigned ticks) { + basecounter += ticks; + while(heapsize && gte(basecounter, heap[0].counter)) callback(dequeue()); + } + + //counter is relative to current time (eg enqueue(64, ...) fires in 64 ticks); + //counter cannot exceed std::numeric_limits::max() >> 1. + void enqueue(unsigned counter, type_t event) { + unsigned child = heapsize++; + counter += basecounter; + + while(child) { + unsigned parent = (child - 1) >> 1; + if(gte(counter, heap[parent].counter)) break; + + heap[child].counter = heap[parent].counter; + heap[child].event = heap[parent].event; + child = parent; + } + + heap[child].counter = counter; + heap[child].event = event; + } + + type_t dequeue() { + type_t event(heap[0].event); + unsigned parent = 0; + unsigned counter = heap[--heapsize].counter; + + while(true) { + unsigned child = (parent << 1) + 1; + if(child >= heapsize) break; + if(child + 1 < heapsize && gte(heap[child].counter, heap[child + 1].counter)) child++; + if(gte(heap[child].counter, counter)) break; + + heap[parent].counter = heap[child].counter; + heap[parent].event = heap[child].event; + parent = child; + } + + heap[parent].counter = counter; + heap[parent].event = heap[heapsize].event; + return event; + } + + void reset() { + basecounter = 0; + heapsize = 0; + } + + void serialize(serializer &s) { + s.integer(basecounter); + s.integer(heapsize); + for(unsigned n = 0; n < heapcapacity; n++) { + s.integer(heap[n].counter); + s.integer(heap[n].event); + } + } + + priority_queue(unsigned size, function callback_ = &priority_queue_nocallback) + : callback(callback_) { + heap = new heap_t[size]; + heapcapacity = size; + reset(); + } + + ~priority_queue() { + delete[] heap; + } + + private: + function callback; + unsigned basecounter; + unsigned heapsize; + unsigned heapcapacity; + struct heap_t { + unsigned counter; + type_t event; + } *heap; + + //return true if x is greater than or equal to y + inline bool gte(unsigned x, unsigned y) { + return x - y < (std::numeric_limits::max() >> 1); + } + }; +} + +#endif diff --git a/snesfilter/nall/property.hpp b/snesfilter/nall/property.hpp new file mode 100644 index 00000000..0099939c --- /dev/null +++ b/snesfilter/nall/property.hpp @@ -0,0 +1,45 @@ +#ifndef NALL_PROPERTY_HPP +#define NALL_PROPERTY_HPP + +//nall::property implements a variable container that disallows write access +//to non-derived objects. This requires use of property::set(), as C++ lacks +//the ability to make this implementation completely transparent. + +namespace nall { + class property { + public: + template class property_t; + + protected: + template T& get(property_t&); + template property_t& set(property_t&, const T); + + public: + template + class property_t { + public: + const T& operator()() const { return value; } + property_t() : value() {} + property_t(const T value_) : value(value_) {} + + protected: + T value; + operator T&() { return value; } + property_t& operator=(const T newValue) { value = newValue; return *this; } + friend T& property::get(property_t&); + friend property_t& property::set(property_t&, const T); + }; + }; + + template + T& property::get(property::property_t &p) { + return p.operator T&(); + } + + template + property::property_t& property::set(property::property_t &p, const T value) { + return p.operator=(value); + } +} + +#endif diff --git a/snesfilter/nall/serial.hpp b/snesfilter/nall/serial.hpp new file mode 100644 index 00000000..6f5cf6d6 --- /dev/null +++ b/snesfilter/nall/serial.hpp @@ -0,0 +1,80 @@ +#ifndef NALL_SERIAL_HPP +#define NALL_SERIAL_HPP + +#include +#include +#include +#include + +#include + +namespace nall { + class serial { + public: + //-1 on error, otherwise return bytes read + int read(uint8_t *data, unsigned length) { + if(port_open == false) return -1; + return ::read(port, (void*)data, length); + } + + //-1 on error, otherwise return bytes written + int write(const uint8_t *data, unsigned length) { + if(port_open == false) return -1; + return ::write(port, (void*)data, length); + } + + bool open(const char *portname, unsigned rate) { + close(); + + port = ::open(portname, O_RDWR | O_NOCTTY | O_NDELAY | O_NONBLOCK); + if(port == -1) return false; + + if(ioctl(port, TIOCEXCL) == -1) { close(); return false; } + if(fcntl(port, F_SETFL, 0) == -1) { close(); return false; } + if(tcgetattr(port, &original_attr) == -1) { close(); return false; } + + termios attr = original_attr; + cfmakeraw(&attr); + cfsetspeed(&attr, rate); + + attr.c_lflag &=~ (ECHO | ECHONL | ISIG | ICANON | IEXTEN); + attr.c_iflag &=~ (BRKINT | PARMRK | INPCK | ISTRIP | INLCR | IGNCR | ICRNL | IXON | IXOFF | IXANY); + attr.c_iflag |= (IGNBRK | IGNPAR); + attr.c_oflag &=~ (OPOST); + attr.c_cflag &=~ (CSIZE | CSTOPB | PARENB); + attr.c_cflag |= (CS8 | CREAD | CLOCAL); + attr.c_cc[VTIME] = attr.c_cc[VMIN] = 0; + + if(tcsetattr(port, TCSANOW, &attr) == -1) { close(); return false; } + return port_open = true; + } + + void close() { + if(port != -1) { + tcdrain(port); + if(port_open == true) { + tcsetattr(port, TCSANOW, &original_attr); + port_open = false; + } + ::close(port); + port = -1; + } + } + + serial() { + port = -1; + port_open = false; + } + + ~serial() { + close(); + } + + private: + int port; + bool port_open; + termios original_attr; + }; +} + +#endif diff --git a/snesfilter/nall/serializer.hpp b/snesfilter/nall/serializer.hpp new file mode 100644 index 00000000..521e7d2e --- /dev/null +++ b/snesfilter/nall/serializer.hpp @@ -0,0 +1,126 @@ +#ifndef NALL_SERIALIZER_HPP +#define NALL_SERIALIZER_HPP + +#include +#include +#include + +namespace nall { + + //serializer: a class designed to save and restore the state of classes. + // + //benefits: + //- data() will be portable in size (it is not necessary to specify type sizes.) + //- data() will be portable in endianness (always stored internally as little-endian.) + //- one serialize function can both save and restore class states. + // + //caveats: + //- only plain-old-data can be stored. complex classes must provide serialize(serializer&); + //- floating-point usage is not portable across platforms + + class serializer { + public: + enum mode_t { Load, Save, Size }; + + mode_t mode() const { + return imode; + } + + const uint8_t* data() const { + return idata; + } + + unsigned size() const { + return isize; + } + + unsigned capacity() const { + return icapacity; + } + + template void floatingpoint(T &value) { + enum { size = sizeof(T) }; + //this is rather dangerous, and not cross-platform safe; + //but there is no standardized way to export FP-values + uint8_t *p = (uint8_t*)&value; + if(imode == Save) { + for(unsigned n = 0; n < size; n++) idata[isize++] = p[n]; + } else if(imode == Load) { + for(unsigned n = 0; n < size; n++) p[n] = idata[isize++]; + } else { + isize += size; + } + } + + template void integer(T &value) { + enum { size = is_bool::value ? 1 : sizeof(T) }; + if(imode == Save) { + for(unsigned n = 0; n < size; n++) idata[isize++] = value >> (n << 3); + } else if(imode == Load) { + value = 0; + for(unsigned n = 0; n < size; n++) value |= idata[isize++] << (n << 3); + } else if(imode == Size) { + isize += size; + } + } + + template void array(T &array) { + enum { size = sizeof(T) / sizeof(typename remove_extent::type) }; + for(unsigned n = 0; n < size; n++) integer(array[n]); + } + + template void array(T array, unsigned size) { + for(unsigned n = 0; n < size; n++) integer(array[n]); + } + + serializer& operator=(const serializer &s) { + if(idata) delete[] idata; + + imode = s.imode; + idata = new uint8_t[s.icapacity]; + isize = s.isize; + icapacity = s.icapacity; + + memcpy(idata, s.idata, s.icapacity); + return *this; + } + + serializer(const serializer &s) : idata(0) { + operator=(s); + } + + serializer() { + imode = Size; + idata = 0; + isize = 0; + } + + serializer(unsigned capacity) { + imode = Save; + idata = new uint8_t[capacity](); + isize = 0; + icapacity = capacity; + } + + serializer(const uint8_t *data, unsigned capacity) { + imode = Load; + idata = new uint8_t[capacity]; + isize = 0; + icapacity = capacity; + memcpy(idata, data, capacity); + } + + ~serializer() { + if(idata) delete[] idata; + } + + private: + mode_t imode; + uint8_t *idata; + unsigned isize; + unsigned icapacity; + }; + +}; + +#endif diff --git a/snesfilter/nall/sha256.hpp b/snesfilter/nall/sha256.hpp new file mode 100644 index 00000000..7f41f04e --- /dev/null +++ b/snesfilter/nall/sha256.hpp @@ -0,0 +1,143 @@ +#ifndef NALL_SHA256_HPP +#define NALL_SHA256_HPP + +//author: vladitx + +namespace nall { + #define PTR(t, a) ((t*)(a)) + + #define SWAP32(x) ((uint32_t)( \ + (((uint32_t)(x) & 0x000000ff) << 24) | \ + (((uint32_t)(x) & 0x0000ff00) << 8) | \ + (((uint32_t)(x) & 0x00ff0000) >> 8) | \ + (((uint32_t)(x) & 0xff000000) >> 24) \ + )) + + #define ST32(a, d) *PTR(uint32_t, a) = (d) + #define ST32BE(a, d) ST32(a, SWAP32(d)) + + #define LD32(a) *PTR(uint32_t, a) + #define LD32BE(a) SWAP32(LD32(a)) + + #define LSL32(x, n) ((uint32_t)(x) << (n)) + #define LSR32(x, n) ((uint32_t)(x) >> (n)) + #define ROR32(x, n) (LSR32(x, n) | LSL32(x, 32 - (n))) + + //first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19 + static const uint32_t T_H[8] = { + 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19, + }; + + //first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311 + static const uint32_t T_K[64] = { + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2, + }; + + struct sha256_ctx { + uint8_t in[64]; + unsigned inlen; + + uint32_t w[64]; + uint32_t h[8]; + uint64_t len; + }; + + void sha256_init(sha256_ctx *p) { + memset(p, 0, sizeof(sha256_ctx)); + memcpy(p->h, T_H, sizeof(T_H)); + } + + static void sha256_block(sha256_ctx *p) { + unsigned i; + uint32_t s0, s1; + uint32_t a, b, c, d, e, f, g, h; + uint32_t t1, t2, maj, ch; + + for(i = 0; i < 16; i++) p->w[i] = LD32BE(p->in + i * 4); + + for(i = 16; i < 64; i++) { + s0 = ROR32(p->w[i - 15], 7) ^ ROR32(p->w[i - 15], 18) ^ LSR32(p->w[i - 15], 3); + s1 = ROR32(p->w[i - 2], 17) ^ ROR32(p->w[i - 2], 19) ^ LSR32(p->w[i - 2], 10); + p->w[i] = p->w[i - 16] + s0 + p->w[i - 7] + s1; + } + + a = p->h[0]; b = p->h[1]; c = p->h[2]; d = p->h[3]; + e = p->h[4]; f = p->h[5]; g = p->h[6]; h = p->h[7]; + + for(i = 0; i < 64; i++) { + s0 = ROR32(a, 2) ^ ROR32(a, 13) ^ ROR32(a, 22); + maj = (a & b) ^ (a & c) ^ (b & c); + t2 = s0 + maj; + s1 = ROR32(e, 6) ^ ROR32(e, 11) ^ ROR32(e, 25); + ch = (e & f) ^ (~e & g); + t1 = h + s1 + ch + T_K[i] + p->w[i]; + + h = g; g = f; f = e; e = d + t1; + d = c; c = b; b = a; a = t1 + t2; + } + + p->h[0] += a; p->h[1] += b; p->h[2] += c; p->h[3] += d; + p->h[4] += e; p->h[5] += f; p->h[6] += g; p->h[7] += h; + + //next block + p->inlen = 0; + } + + void sha256_chunk(sha256_ctx *p, const uint8_t *s, unsigned len) { + unsigned l; + p->len += len; + + while(len) { + l = 64 - p->inlen; + l = (len < l) ? len : l; + + memcpy(p->in + p->inlen, s, l); + s += l; + p->inlen += l; + len -= l; + + if(p->inlen == 64) sha256_block(p); + } + } + + void sha256_final(sha256_ctx *p) { + uint64_t len; + p->in[p->inlen++] = 0x80; + + if(p->inlen > 56) { + memset(p->in + p->inlen, 0, 64 - p->inlen); + sha256_block(p); + } + + memset(p->in + p->inlen, 0, 56 - p->inlen); + + len = p->len << 3; + ST32BE(p->in + 56, len >> 32); + ST32BE(p->in + 60, len); + sha256_block(p); + } + + void sha256_hash(sha256_ctx *p, uint8_t *s) { + uint32_t *t = (uint32_t*)s; + for(unsigned i = 0; i < 8; i++) ST32BE(t++, p->h[i]); + } + + #undef PTR + #undef SWAP32 + #undef ST32 + #undef ST32BE + #undef LD32 + #undef LD32BE + #undef LSL32 + #undef LSR32 + #undef ROR32 +} + +#endif diff --git a/snesfilter/nall/sort.hpp b/snesfilter/nall/sort.hpp new file mode 100644 index 00000000..23c317a5 --- /dev/null +++ b/snesfilter/nall/sort.hpp @@ -0,0 +1,62 @@ +#ifndef NALL_SORT_HPP +#define NALL_SORT_HPP + +#include + +//class: merge sort +//average: O(n log n) +//worst: O(n log n) +//memory: O(n) +//stack: O(log n) +//stable?: yes + +//notes: +//there are two primary reasons for choosing merge sort +//over the (usually) faster quick sort*: +//1: it is a stable sort. +//2: it lacks O(n^2) worst-case overhead. +//(* which is also O(n log n) in the average case.) + +namespace nall { + template + void sort(T list[], unsigned length) { + if(length <= 1) return; //nothing to sort + + //use insertion sort to quickly sort smaller blocks + if(length < 64) { + for(unsigned i = 0; i < length; i++) { + unsigned min = i; + for(unsigned j = i + 1; j < length; j++) { + if(list[j] < list[min]) min = j; + } + if(min != i) swap(list[i], list[min]); + } + return; + } + + //split list in half and recursively sort both + unsigned middle = length / 2; + sort(list, middle); + sort(list + middle, length - middle); + + //left and right are sorted here; perform merge sort + T *buffer = new T[length]; + unsigned offset = 0; + unsigned left = 0; + unsigned right = middle; + while(left < middle && right < length) { + if(list[left] < list[right]) { + buffer[offset++] = list[left++]; + } else { + buffer[offset++] = list[right++]; + } + } + while(left < middle) buffer[offset++] = list[left++]; + while(right < length) buffer[offset++] = list[right++]; + + for(unsigned i = 0; i < length; i++) list[i] = buffer[i]; + delete[] buffer; + } +} + +#endif diff --git a/snesfilter/nall/static.hpp b/snesfilter/nall/static.hpp new file mode 100644 index 00000000..00c3664c --- /dev/null +++ b/snesfilter/nall/static.hpp @@ -0,0 +1,17 @@ +#ifndef NALL_STATIC_HPP +#define NALL_STATIC_HPP + +namespace nall { + template struct static_assert; + template<> struct static_assert {}; + + template struct static_if { + typedef true_type type; + }; + + template struct static_if { + typedef false_type type; + }; +} + +#endif diff --git a/snesfilter/nall/stdint.hpp b/snesfilter/nall/stdint.hpp new file mode 100644 index 00000000..7e2c7a46 --- /dev/null +++ b/snesfilter/nall/stdint.hpp @@ -0,0 +1,44 @@ +#ifndef NALL_STDINT_HPP +#define NALL_STDINT_HPP + +#include + +#if defined(_MSC_VER) + typedef signed char int8_t; + typedef signed short int16_t; + typedef signed int int32_t; + typedef signed long long int64_t; + typedef int64_t intmax_t; + #if defined(_WIN64) + typedef int64_t intptr_t; + #else + typedef int32_t intptr_t; + #endif + + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned int uint32_t; + typedef unsigned long long uint64_t; + typedef uint64_t uintmax_t; + #if defined(_WIN64) + typedef uint64_t uintptr_t; + #else + typedef uint32_t uintptr_t; + #endif +#else + #include +#endif + +namespace nall { + static static_assert int8_t_assert; + static static_assert int16_t_assert; + static static_assert int32_t_assert; + static static_assert int64_t_assert; + + static static_assert uint8_t_assert; + static static_assert uint16_t_assert; + static static_assert uint32_t_assert; + static static_assert uint64_t_assert; +} + +#endif diff --git a/snesfilter/nall/string.hpp b/snesfilter/nall/string.hpp new file mode 100644 index 00000000..94e65b68 --- /dev/null +++ b/snesfilter/nall/string.hpp @@ -0,0 +1,18 @@ +#ifndef NALL_STRING_HPP +#define NALL_STRING_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif diff --git a/snesfilter/nall/string/base.hpp b/snesfilter/nall/string/base.hpp new file mode 100644 index 00000000..24a5b1d4 --- /dev/null +++ b/snesfilter/nall/string/base.hpp @@ -0,0 +1,119 @@ +#ifndef NALL_STRING_BASE_HPP +#define NALL_STRING_BASE_HPP + +#include +#include +#include +#include +#include +#include + +inline char chrlower(char c); +inline char chrupper(char c); +inline int stricmp(const char *dest, const char *src); +inline int strpos (const char *str, const char *key); +inline int qstrpos(const char *str, const char *key); +inline bool strbegin (const char *str, const char *key); +inline bool stribegin(const char *str, const char *key); +inline bool strend (const char *str, const char *key); +inline bool striend(const char *str, const char *key); +inline char* strlower(char *str); +inline char* strupper(char *str); +inline char* strtr(char *dest, const char *before, const char *after); +inline uintmax_t strhex (const char *str); +inline intmax_t strsigned (const char *str); +inline uintmax_t strunsigned(const char *str); +inline uintmax_t strbin (const char *str); +inline double strdouble (const char *str); +inline size_t strhex (char *str, uintmax_t value, size_t length = 0); +inline size_t strsigned (char *str, intmax_t value, size_t length = 0); +inline size_t strunsigned(char *str, uintmax_t value, size_t length = 0); +inline size_t strbin (char *str, uintmax_t value, size_t length = 0); +inline size_t strdouble (char *str, double value, size_t length = 0); +inline bool match(const char *pattern, const char *str); +inline bool strint (const char *str, int &result); +inline bool strmath(const char *str, int &result); +inline size_t strlcpy(char *dest, const char *src, size_t length); +inline size_t strlcat(char *dest, const char *src, size_t length); +inline char* ltrim(char *str, const char *key = " "); +inline char* rtrim(char *str, const char *key = " "); +inline char* trim (char *str, const char *key = " "); +inline char* ltrim_once(char *str, const char *key = " "); +inline char* rtrim_once(char *str, const char *key = " "); +inline char* trim_once (char *str, const char *key = " "); + +namespace nall { + class string; + template inline string to_string(T); + + class string { + public: + inline void reserve(size_t); + inline unsigned length() const; + + inline string& assign(const char*); + inline string& append(const char*); + template inline string& operator= (T value); + template inline string& operator<<(T value); + + inline operator const char*() const; + inline char* operator()(); + inline char& operator[](int); + + inline bool operator==(const char*) const; + inline bool operator!=(const char*) const; + inline bool operator< (const char*) const; + inline bool operator<=(const char*) const; + inline bool operator> (const char*) const; + inline bool operator>=(const char*) const; + + inline string(); + inline string(const char*); + inline string(const string&); + inline string& operator=(const string&); + inline ~string(); + + inline bool readfile(const char*); + inline string& replace (const char*, const char*); + inline string& qreplace(const char*, const char*); + + protected: + char *data; + size_t size; + + #if defined(QT_CORE_LIB) + public: + inline operator QString() const; + #endif + }; + + class lstring : public vector { + public: + template inline lstring& operator<<(T value); + + inline int find(const char*); + inline void split (const char*, const char*, unsigned = 0); + inline void qsplit(const char*, const char*, unsigned = 0); + }; +}; + +inline size_t strlcpy(nall::string &dest, const char *src, size_t length); +inline size_t strlcat(nall::string &dest, const char *src, size_t length); +inline nall::string& strlower(nall::string &str); +inline nall::string& strupper(nall::string &str); +inline nall::string& strtr(nall::string &dest, const char *before, const char *after); +inline nall::string& ltrim(nall::string &str, const char *key = " "); +inline nall::string& rtrim(nall::string &str, const char *key = " "); +inline nall::string& trim (nall::string &str, const char *key = " "); +inline nall::string& ltrim_once(nall::string &str, const char *key = " "); +inline nall::string& rtrim_once(nall::string &str, const char *key = " "); +inline nall::string& trim_once (nall::string &str, const char *key = " "); + +inline nall::string substr(const char *src, size_t start = 0, size_t length = 0); +inline nall::string strhex (uintmax_t value); +inline nall::string strsigned (intmax_t value); +inline nall::string strunsigned(uintmax_t value); +inline nall::string strbin (uintmax_t value); +inline nall::string strdouble (double value); + +#endif diff --git a/snesfilter/nall/string/cast.hpp b/snesfilter/nall/string/cast.hpp new file mode 100644 index 00000000..0b490917 --- /dev/null +++ b/snesfilter/nall/string/cast.hpp @@ -0,0 +1,30 @@ +#ifndef NALL_STRING_CAST_HPP +#define NALL_STRING_CAST_HPP + +namespace nall { + //this is needed, as C++98 does not support explicit template specialization inside classes; + //redundant memory allocation should hopefully be avoided via compiler optimizations. + template<> inline string to_string (bool v) { return v ? "true" : "false"; } + template<> inline string to_string (signed int v) { return strsigned(v); } + template<> inline string to_string (unsigned int v) { return strunsigned(v); } + template<> inline string to_string (double v) { return strdouble(v); } + template<> inline string to_string (char *v) { return v; } + template<> inline string to_string (const char *v) { return v; } + template<> inline string to_string (string v) { return v; } + template<> inline string to_string(const string &v) { return v; } + + template string& string::operator= (T value) { return assign(to_string(value)); } + template string& string::operator<<(T value) { return append(to_string(value)); } + + template lstring& lstring::operator<<(T value) { + operator[](size()).assign(to_string(value)); + return *this; + } + + #if defined(QT_CORE_LIB) + template<> inline string to_string(const QString &v) { return v.toUtf8().constData(); } + string::operator QString() const { return QString::fromUtf8(*this); } + #endif +}; + +#endif diff --git a/snesfilter/nall/string/compare.hpp b/snesfilter/nall/string/compare.hpp new file mode 100644 index 00000000..23d2ee39 --- /dev/null +++ b/snesfilter/nall/string/compare.hpp @@ -0,0 +1,100 @@ +#ifndef NALL_STRING_COMPARE_HPP +#define NALL_STRING_COMPARE_HPP + +char chrlower(char c) { + return (c >= 'A' && c <= 'Z') ? c + ('a' - 'A') : c; +} + +char chrupper(char c) { + return (c >= 'a' && c <= 'z') ? c - ('a' - 'A') : c; +} + +int stricmp(const char *dest, const char *src) { + while(*dest) { + if(chrlower(*dest) != chrlower(*src)) break; + dest++; + src++; + } + + return (int)chrlower(*dest) - (int)chrlower(*src); +} + +int strpos(const char *str, const char *key) { + int ssl = strlen(str), ksl = strlen(key); + + if(ksl > ssl) return -1; + for(int i = 0; i <= ssl - ksl; i++) { + if(!memcmp(str + i, key, ksl)) { + return i; + } + } + return -1; +} + +int qstrpos(const char *str, const char *key) { + int ssl = strlen(str), ksl = strlen(key); + + if(ksl > ssl) return -1; + for(int i = 0; i <= ssl - ksl;) { + uint8_t x = str[i]; + if(x == '\"' || x == '\'') { + uint8_t z = i++; + while(str[i] != x && i < ssl) i++; + if(i >= ssl) i = z; + } + if(!memcmp(str + i, key, ksl)) { + return i; + } else { + i++; + } + } + return -1; +} + +bool strbegin(const char *str, const char *key) { + int i, ssl = strlen(str), ksl = strlen(key); + + if(ksl > ssl) return false; + return (!memcmp(str, key, ksl)); +} + +bool stribegin(const char *str, const char *key) { + int ssl = strlen(str), ksl = strlen(key); + + if(ksl > ssl) return false; + for(int i = 0; i < ksl; i++) { + if(str[i] >= 'A' && str[i] <= 'Z') { + if(str[i] != key[i] && str[i]+0x20 != key[i])return false; + } else if(str[i] >= 'a' && str[i] <= 'z') { + if(str[i] != key[i] && str[i]-0x20 != key[i])return false; + } else { + if(str[i] != key[i])return false; + } + } + return true; +} + +bool strend(const char *str, const char *key) { + int ssl = strlen(str), ksl = strlen(key); + + if(ksl > ssl) return false; + return (!memcmp(str + ssl - ksl, key, ksl)); +} + +bool striend(const char *str, const char *key) { + int ssl = strlen(str), ksl = strlen(key); + + if(ksl > ssl) return false; + for(int i = ssl - ksl, z = 0; i < ssl; i++, z++) { + if(str[i] >= 'A' && str[i] <= 'Z') { + if(str[i] != key[z] && str[i]+0x20 != key[z])return false; + } else if(str[i] >= 'a' && str[i] <= 'z') { + if(str[i] != key[z] && str[i]-0x20 != key[z])return false; + } else { + if(str[i] != key[z])return false; + } + } + return true; +} + +#endif diff --git a/snesfilter/nall/string/convert.hpp b/snesfilter/nall/string/convert.hpp new file mode 100644 index 00000000..da90bb09 --- /dev/null +++ b/snesfilter/nall/string/convert.hpp @@ -0,0 +1,285 @@ +#ifndef NALL_STRING_CONVERT_HPP +#define NALL_STRING_CONVERT_HPP + +char* strlower(char *str) { + if(!str) return 0; + int i = 0; + while(str[i]) { + str[i] = chrlower(str[i]); + i++; + } + return str; +} + +char* strupper(char *str) { + if(!str) return 0; + int i = 0; + while(str[i]) { + str[i] = chrupper(str[i]); + i++; + } + return str; +} + +char* strtr(char *dest, const char *before, const char *after) { + if(!dest || !before || !after) return dest; + int sl = strlen(dest), bsl = strlen(before), asl = strlen(after); + + if(bsl != asl || bsl == 0) return dest; //patterns must be the same length for 1:1 replace + for(unsigned i = 0; i < sl; i++) { + for(unsigned l = 0; l < bsl; l++) { + if(dest[i] == before[l]) { + dest[i] = after[l]; + break; + } + } + } + + return dest; +} + +uintmax_t strhex(const char *str) { + if(!str) return 0; + uintmax_t result = 0; + + //skip hex identifiers 0x and $, if present + if(*str == '0' && (*(str + 1) == 'X' || *(str + 1) == 'x')) str += 2; + else if(*str == '$') str++; + + while(*str) { + uint8_t x = *str++; + if(x >= '0' && x <= '9') x -= '0'; + else if(x >= 'A' && x <= 'F') x -= 'A' - 10; + else if(x >= 'a' && x <= 'f') x -= 'a' - 10; + else break; //stop at first invalid character + result = result * 16 + x; + } + + return result; +} + +intmax_t strsigned(const char *str) { + if(!str) return 0; + intmax_t result = 0; + bool negate = false; + + //check for negation + if(*str == '-') { + negate = true; + str++; + } + + while(*str) { + uint8_t x = *str++; + if(x >= '0' && x <= '9') x -= '0'; + else break; //stop at first invalid character + result = result * 10 + x; + } + + return !negate ? result : -result; +} + +uintmax_t strunsigned(const char *str) { + if(!str) return 0; + uintmax_t result = 0; + + while(*str) { + uint8_t x = *str++; + if(x >= '0' && x <= '9') x -= '0'; + else break; //stop at first invalid character + result = result * 10 + x; + } + + return result; +} + +uintmax_t strbin(const char *str) { + if(!str) return 0; + uintmax_t result = 0; + + //skip bin identifiers 0b and %, if present + if(*str == '0' && (*(str + 1) == 'B' || *(str + 1) == 'b')) str += 2; + else if(*str == '%') str++; + + while(*str) { + uint8_t x = *str++; + if(x == '0' || x == '1') x -= '0'; + else break; //stop at first invalid character + result = result * 2 + x; + } + + return result; +} + +double strdouble(const char *str) { + if(!str) return 0.0; + bool negate = false; + + //check for negation + if(*str == '-') { + negate = true; + str++; + } + + intmax_t result_integral = 0; + while(*str) { + uint8_t x = *str++; + if(x >= '0' && x <= '9') x -= '0'; + else if(x == '.') break; //break loop and read fractional part + else return (double)result_integral; //invalid value, assume no fractional part + result_integral = result_integral * 10 + x; + } + + intmax_t result_fractional = 0; + while(*str) { + uint8_t x = *str++; + if(x >= '0' && x <= '9') x -= '0'; + else break; //stop at first invalid character + result_fractional = result_fractional * 10 + x; + } + + //calculate fractional portion + double result = (double)result_fractional; + while((uintmax_t)result > 0) result /= 10.0; + result += (double)result_integral; + + return !negate ? result : -result; +} + +// + +size_t strhex(char *str, uintmax_t value, size_t length /* = 0 */) { + if(length == 0) length -= 1U; //"infinite" length + size_t initial_length = length; + + //count number of digits in value + int digits_integral = 1; + uintmax_t digits_integral_ = value; + while(digits_integral_ /= 16) digits_integral++; + + int digits = digits_integral; + if(!str) return digits + 1; //only computing required length? + + length = nall::min(digits, length - 1); + str += length; //seek to end of target string + *str = 0; //set null terminator + + while(length--) { + uint8_t x = value % 16; + value /= 16; + *--str = x < 10 ? (x + '0') : (x + 'a' - 10); //iterate backwards to write string + } + + return nall::min(initial_length, digits + 1); +} + +size_t strsigned(char *str, intmax_t value_, size_t length /* = 0 */) { + if(length == 0) length = -1U; //"infinite" length + size_t initial_length = length; + + bool negate = value_ < 0; + uintmax_t value = value_ >= 0 ? value_ : -value_; + + //count number of digits in value + int digits_integral = 1; + uintmax_t digits_integral_ = value; + while(digits_integral_ /= 10) digits_integral++; + + int digits = (negate ? 1 : 0) + digits_integral; + if(!str) return digits + 1; //only computing required length? + + length = nall::min(digits, length - 1); + str += length; //seek to end of target string + *str = 0; //set null terminator + while(length && digits_integral--) { + uint8_t x = '0' + (value % 10); + value /= 10; + *--str = x; //iterate backwards to write string + length--; + } + + if(length && negate) { + *--str = '-'; + } + + return nall::min(initial_length, digits + 1); +} + +size_t strunsigned(char *str, uintmax_t value, size_t length /* = 0 */) { + if(length == 0) length = -1U; //"infinite" length + size_t initial_length = length; + + //count number of digits in value + int digits_integral = 1; + uintmax_t digits_integral_ = value; + while(digits_integral_ /= 10) digits_integral++; + + int digits = digits_integral; + if(!str) return digits_integral + 1; //only computing required length? + + length = nall::min(digits, length - 1); + str += length; //seek to end of target string + *str = 0; //set null terminator + + while(length--) { + uint8_t x = '0' + (value % 10); + value /= 10; + *--str = x; //iterate backwards to write string + } + + return nall::min(initial_length, digits + 1); +} + +size_t strbin(char *str, uintmax_t value, size_t length /* = 0 */) { + if(length == 0) length = -1U; //"infinite" length + size_t initial_length = length; + + //count number of digits in value + int digits_integral = 1; + uintmax_t digits_integral_ = value; + while(digits_integral_ /= 2) digits_integral++; + + int digits = digits_integral; + if(!str) return digits + 1; //only computing required length? + + length = nall::min(digits, length - 1); + str += length; //seek to end of target string + *str = 0; //set null terminator + + while(length--) { + uint8_t x = '0' + (value % 2); + value /= 2; + *--str = x; //iterate backwards to write string + } + + return nall::min(initial_length, digits + 1); +} + +//using sprintf is certainly not the most ideal method to convert +//a double to a string ... but attempting to parse a double by +//hand, digit-by-digit, results in subtle rounding errors. +// +//note: length parameter is currently ignored. +//it remains for consistency and possible future support. +size_t strdouble(char *str, double value, size_t length /* = 0 */) { + char buffer[256]; + sprintf(buffer, "%f", value); + + //remove excess 0's in fraction (2.500000 -> 2.5) + for(char *p = buffer; *p; p++) { + if(*p == '.') { + char *p = buffer + strlen(buffer) - 1; + while(*p == '0') { + if(*(p - 1) != '.') *p = 0; //... but not for eg 1.0 -> 1. + p--; + } + break; + } + } + + length = strlen(buffer); + if(str) strcpy(str, buffer); + return length + 1; +} + +#endif diff --git a/snesfilter/nall/string/core.hpp b/snesfilter/nall/string/core.hpp new file mode 100644 index 00000000..5c16ff5c --- /dev/null +++ b/snesfilter/nall/string/core.hpp @@ -0,0 +1,109 @@ +#ifndef NALL_STRING_CORE_HPP +#define NALL_STRING_CORE_HPP + +namespace nall { + +void string::reserve(size_t size_) { + if(size_ > size) { + size = size_; + data = (char*)realloc(data, size + 1); + data[size] = 0; + } +} + +unsigned string::length() const { + return strlen(data); +} + +string& string::assign(const char *s) { + unsigned length = strlen(s); + reserve(length); + strcpy(data, s); + return *this; +} + +string& string::append(const char *s) { + unsigned length = strlen(data) + strlen(s); + reserve(length); + strcat(data, s); + return *this; +} + +string::operator const char*() const { + return data; +} + +char* string::operator()() { + return data; +} + +char& string::operator[](int index) { + reserve(index); + return data[index]; +} + +bool string::operator==(const char *str) const { return strcmp(data, str) == 0; } +bool string::operator!=(const char *str) const { return strcmp(data, str) != 0; } +bool string::operator< (const char *str) const { return strcmp(data, str) < 0; } +bool string::operator<=(const char *str) const { return strcmp(data, str) <= 0; } +bool string::operator> (const char *str) const { return strcmp(data, str) > 0; } +bool string::operator>=(const char *str) const { return strcmp(data, str) >= 0; } + +string::string() { + size = 64; + data = (char*)malloc(size + 1); + *data = 0; +} + +string::string(const char *value) { + size = strlen(value); + data = strdup(value); +} + +string::string(const string &value) { + size = strlen(value); + data = strdup(value); +} + +string& string::operator=(const string &value) { + assign(value); + return *this; +} + +string::~string() { + free(data); +} + +bool string::readfile(const char *filename) { + assign(""); + + #if !defined(_WIN32) + FILE *fp = fopen(filename, "rb"); + #else + FILE *fp = _wfopen(nall::utf16_t(filename), L"rb"); + #endif + if(!fp) return false; + + fseek(fp, 0, SEEK_END); + size_t size = ftell(fp); + rewind(fp); + char *fdata = new char[size + 1]; + unsigned unused = fread(fdata, 1, size, fp); + fclose(fp); + fdata[size] = 0; + assign(fdata); + delete[] fdata; + + return true; +} + +int lstring::find(const char *key) { + for(unsigned i = 0; i < size(); i++) { + if(operator[](i) == key) return i; + } + return -1; +} + +}; + +#endif diff --git a/snesfilter/nall/string/filename.hpp b/snesfilter/nall/string/filename.hpp new file mode 100644 index 00000000..29dc37d4 --- /dev/null +++ b/snesfilter/nall/string/filename.hpp @@ -0,0 +1,48 @@ +#ifndef NALL_FILENAME_HPP +#define NALL_FILENAME_HPP + +namespace nall { + // "foo/bar.c" -> "foo/", "bar.c" -> "./" + inline string dir(char const *name) { + string result = name; + for(signed i = strlen(result); i >= 0; i--) { + if(result[i] == '/' || result[i] == '\\') { + result[i + 1] = 0; + break; + } + if(i == 0) result = "./"; + } + return result; + } + + // "foo/bar.c" -> "bar.c" + inline string notdir(char const *name) { + for(signed i = strlen(name); i >= 0; i--) { + if(name[i] == '/' || name[i] == '\\') { + name += i + 1; + break; + } + } + string result = name; + return result; + } + + // "foo/bar.c" -> "foo/bar" + inline string basename(char const *name) { + string result = name; + for(signed i = strlen(result); i >= 0; i--) { + if(result[i] == '/' || result[i] == '\\') { + //file has no extension + break; + } + + if(result[i] == '.') { + result[i] = 0; + break; + } + } + return result; + } +} + +#endif diff --git a/snesfilter/nall/string/match.hpp b/snesfilter/nall/string/match.hpp new file mode 100644 index 00000000..70184fec --- /dev/null +++ b/snesfilter/nall/string/match.hpp @@ -0,0 +1,72 @@ +#ifndef NALL_STRING_MATCH_HPP +#define NALL_STRING_MATCH_HPP + +bool match(const char *p, const char *s) { + const char *p_ = 0, *s_ = 0; + + for(;;) { + if(!*s) { + while(*p == '*') p++; + return !*p; + } + + //wildcard match + if(*p == '*') { + p_ = p++, s_ = s; + continue; + } + + //any match + if(*p == '?') { + p++, s++; + continue; + } + + //ranged match + if(*p == '{') { + #define pattern(name_, rule_) \ + if(strbegin(p, name_)) { \ + if(rule_) { \ + p += sizeof(name_) - 1, s++; \ + continue; \ + } \ + goto failure; \ + } + + pattern("{alpha}", (*s >= 'A' && *s <= 'Z') || (*s >= 'a' && *s <= 'z')) + pattern("{alphanumeric}", (*s >= 'A' && *s <= 'Z') || (*s >= 'a' && *s <= 'z') || (*s >= '0' && *s <= '9')) + pattern("{binary}", (*s == '0' || *s == '1')) + pattern("{hex}", (*s >= '0' && *s <= '9') || (*s >= 'A' && *s <= 'F') || (*s >= 'a' && *s <= 'f')) + pattern("{lowercase}", (*s >= 'a' && *s <= 'z')) + pattern("{numeric}", (*s >= '0' && *s <= '9')) + pattern("{uppercase}", (*s >= 'A' && *s <= 'Z')) + pattern("{whitespace}", (*s == ' ' || *s == '\t')) + + #undef pattern + goto failure; + } + + //reserved character match + if(*p == '\\') { + p++; + //fallthrough + } + + //literal match + if(*p == *s) { + p++, *s++; + continue; + } + + //attempt wildcard rematch + failure: + if(p_) { + p = p_, s = s_ + 1; + continue; + } + + return false; + } +} + +#endif diff --git a/snesfilter/nall/string/math.hpp b/snesfilter/nall/string/math.hpp new file mode 100644 index 00000000..604b083e --- /dev/null +++ b/snesfilter/nall/string/math.hpp @@ -0,0 +1,160 @@ +#ifndef NALL_STRING_MATH_HPP +#define NALL_STRING_MATH_HPP + +static int eval_integer(const char *&s) { + if(!*s) throw "unrecognized_integer"; + int value = 0, x = *s, y = *(s + 1); + + //hexadecimal + if(x == '0' && (y == 'X' || y == 'x')) { + s += 2; + while(true) { + if(*s >= '0' && *s <= '9') { value = value * 16 + (*s++ - '0'); continue; } + if(*s >= 'A' && *s <= 'F') { value = value * 16 + (*s++ - 'A' + 10); continue; } + if(*s >= 'a' && *s <= 'f') { value = value * 16 + (*s++ - 'a' + 10); continue; } + return value; + } + } + + //binary + if(x == '0' && (y == 'B' || y == 'b')) { + s += 2; + while(true) { + if(*s == '0' || *s == '1') { value = value * 2 + (*s++ - '0'); continue; } + return value; + } + } + + //octal (or decimal '0') + if(x == '0') { + s += 1; + while(true) { + if(*s >= '0' && *s <= '7') { value = value * 8 + (*s++ - '0'); continue; } + return value; + } + } + + //decimal + if(x >= '0' && x <= '9') { + while(true) { + if(*s >= '0' && *s <= '9') { value = value * 10 + (*s++ - '0'); continue; } + return value; + } + } + + //char + if(x == '\'' && y != '\'') { + s += 1; + while(true) { + value = value * 256 + *s++; + if(*s == '\'') { s += 1; return value; } + if(!*s) throw "mismatched_char"; + } + } + + throw "unrecognized_integer"; +} + +static int eval(const char *&s, int depth = 0) { + while(*s == ' ' || *s == '\t') s++; //trim whitespace + if(!*s) throw "unrecognized_token"; + int value = 0, x = *s, y = *(s + 1); + + if(*s == '(') { + value = eval(++s, 1); + if(*s++ != ')') throw "mismatched_group"; + } + + else if(x == '!') value = !eval(++s, 13); + else if(x == '~') value = ~eval(++s, 13); + else if(x == '+') value = +eval(++s, 13); + else if(x == '-') value = -eval(++s, 13); + + else if((x >= '0' && x <= '9') || x == '\'') value = eval_integer(s); + + else throw "unrecognized_token"; + + while(true) { + while(*s == ' ' || *s == '\t') s++; //trim whitespace + if(!*s) break; + x = *s, y = *(s + 1); + + if(depth >= 13) break; + if(x == '*') { value *= eval(++s, 13); continue; } + if(x == '/') { value /= eval(++s, 13); continue; } + if(x == '%') { value %= eval(++s, 13); continue; } + + if(depth >= 12) break; + if(x == '+') { value += eval(++s, 12); continue; } + if(x == '-') { value -= eval(++s, 12); continue; } + + if(depth >= 11) break; + if(x == '<' && y == '<') { value <<= eval(++++s, 11); continue; } + if(x == '>' && y == '>') { value >>= eval(++++s, 11); continue; } + + if(depth >= 10) break; + if(x == '<' && y == '=') { value = value <= eval(++++s, 10); continue; } + if(x == '>' && y == '=') { value = value >= eval(++++s, 10); continue; } + if(x == '<') { value = value < eval(++s, 10); continue; } + if(x == '>') { value = value > eval(++s, 10); continue; } + + if(depth >= 9) break; + if(x == '=' && y == '=') { value = value == eval(++++s, 9); continue; } + if(x == '!' && y == '=') { value = value != eval(++++s, 9); continue; } + + if(depth >= 8) break; + if(x == '&' && y != '&') { value = value & eval(++s, 8); continue; } + + if(depth >= 7) break; + if(x == '^' && y != '^') { value = value ^ eval(++s, 7); continue; } + + if(depth >= 6) break; + if(x == '|' && y != '|') { value = value | eval(++s, 6); continue; } + + if(depth >= 5) break; + if(x == '&' && y == '&') { value = eval(++++s, 5) && value; continue; } + + if(depth >= 4) break; + if(x == '^' && y == '^') { value = (!eval(++++s, 4) != !value); continue; } + + if(depth >= 3) break; + if(x == '|' && y == '|') { value = eval(++++s, 3) || value; continue; } + + if(x == '?') { + int lhs = eval(++s, 2); + if(*s != ':') throw "mismatched_ternary"; + int rhs = eval(++s, 2); + value = value ? lhs : rhs; + continue; + } + if(depth >= 2) break; + + if(depth > 0 && x == ')') break; + + throw "unrecognized_token"; + } + + return value; +} + +bool strint(const char *s, int &result) { + try { + result = eval_integer(s); + return true; + } catch(const char*) { + result = 0; + return false; + } +} + +bool strmath(const char *s, int &result) { + try { + result = eval(s); + return true; + } catch(const char*) { + result = 0; + return false; + } +} + +#endif diff --git a/snesfilter/nall/string/replace.hpp b/snesfilter/nall/string/replace.hpp new file mode 100644 index 00000000..db405a9b --- /dev/null +++ b/snesfilter/nall/string/replace.hpp @@ -0,0 +1,103 @@ +#ifndef NALL_STRING_REPLACE_HPP +#define NALL_STRING_REPLACE_HPP + +namespace nall { + +string& string::replace(const char *key, const char *token) { + int i, z, ksl = strlen(key), tsl = strlen(token), ssl = length(); + unsigned int replace_count = 0, size = ssl; + char *buffer; + + if(ksl <= ssl) { + if(tsl > ksl) { //the new string may be longer than the old string... + for(i = 0; i <= ssl - ksl;) { //so let's find out how big of a string we'll need... + if(!memcmp(data + i, key, ksl)) { + replace_count++; + i += ksl; + } else i++; + } + size = ssl + ((tsl - ksl) * replace_count); + reserve(size); + } + + buffer = new char[size + 1]; + for(i = z = 0; i < ssl;) { + if(i <= ssl - ksl) { + if(!memcmp(data + i, key, ksl)) { + memcpy(buffer + z, token, tsl); + z += tsl; + i += ksl; + } else buffer[z++] = data[i++]; + } else buffer[z++] = data[i++]; + } + buffer[z] = 0; + + assign(buffer); + delete[] buffer; + } + + return *this; +} + +string& string::qreplace(const char *key, const char *token) { + int i, l, z, ksl = strlen(key), tsl = strlen(token), ssl = length(); + unsigned int replace_count = 0, size = ssl; + uint8_t x; + char *buffer; + + if(ksl <= ssl) { + if(tsl > ksl) { + for(i = 0; i <= ssl - ksl;) { + x = data[i]; + if(x == '\"' || x == '\'') { + l = i; + i++; + while(data[i++] != x) { + if(i == ssl) { + i = l; + break; + } + } + } + if(!memcmp(data + i, key, ksl)) { + replace_count++; + i += ksl; + } else i++; + } + size = ssl + ((tsl - ksl) * replace_count); + reserve(size); + } + + buffer = new char[size + 1]; + for(i = z = 0; i < ssl;) { + x = data[i]; + if(x == '\"' || x == '\'') { + l = i++; + while(data[i] != x && i < ssl)i++; + if(i >= ssl)i = l; + else { + memcpy(buffer + z, data + l, i - l); + z += i - l; + } + } + if(i <= ssl - ksl) { + if(!memcmp(data + i, key, ksl)) { + memcpy(buffer + z, token, tsl); + z += tsl; + i += ksl; + replace_count++; + } else buffer[z++] = data[i++]; + } else buffer[z++] = data[i++]; + } + buffer[z] = 0; + + assign(buffer); + delete[] buffer; + } + + return *this; +} + +}; + +#endif diff --git a/snesfilter/nall/string/split.hpp b/snesfilter/nall/string/split.hpp new file mode 100644 index 00000000..bb77dfcd --- /dev/null +++ b/snesfilter/nall/string/split.hpp @@ -0,0 +1,56 @@ +#ifndef NALL_STRING_SPLIT_HPP +#define NALL_STRING_SPLIT_HPP + +namespace nall { + +void lstring::split(const char *key, const char *src, unsigned limit) { + reset(); + + int ssl = strlen(src), ksl = strlen(key); + int lp = 0, split_count = 0; + + for(int i = 0; i <= ssl - ksl;) { + if(!memcmp(src + i, key, ksl)) { + strlcpy(operator[](split_count++), src + lp, i - lp + 1); + i += ksl; + lp = i; + if(!--limit) break; + } else i++; + } + + operator[](split_count++) = src + lp; +} + +void lstring::qsplit(const char *key, const char *src, unsigned limit) { + reset(); + + int ssl = strlen(src), ksl = strlen(key); + int lp = 0, split_count = 0; + + for(int i = 0; i <= ssl - ksl;) { + uint8_t x = src[i]; + + if(x == '\"' || x == '\'') { + int z = i++; //skip opening quote + while(i < ssl && src[i] != x) i++; + if(i >= ssl) i = z; //failed match, rewind i + else { + i++; //skip closing quote + continue; //restart in case next char is also a quote + } + } + + if(!memcmp(src + i, key, ksl)) { + strlcpy(operator[](split_count++), src + lp, i - lp + 1); + i += ksl; + lp = i; + if(!--limit) break; + } else i++; + } + + operator[](split_count++) = src + lp; +} + +}; + +#endif diff --git a/snesfilter/nall/string/strl.hpp b/snesfilter/nall/string/strl.hpp new file mode 100644 index 00000000..329e8520 --- /dev/null +++ b/snesfilter/nall/string/strl.hpp @@ -0,0 +1,48 @@ +#ifndef NALL_STRING_STRL_HPP +#define NALL_STRING_STRL_HPP + +//strlcpy, strlcat based on OpenBSD implementation by Todd C. Miller + +//return = strlen(src) +size_t strlcpy(char *dest, const char *src, size_t length) { + char *d = dest; + const char *s = src; + size_t n = length; + + if(n) { + while(--n && (*d++ = *s++)); //copy as many bytes as possible, or until null terminator reached + } + + if(!n) { + if(length) *d = 0; + while(*s++); //traverse rest of s, so that s - src == strlen(src) + } + + return (s - src - 1); //return length of copied string, sans null terminator +} + +//return = strlen(src) + min(length, strlen(dest)) +size_t strlcat(char *dest, const char *src, size_t length) { + char *d = dest; + const char *s = src; + size_t n = length; + + while(n-- && *d) d++; //find end of dest + size_t dlength = d - dest; + n = length - dlength; //subtract length of dest from maximum string length + + if(!n) return dlength + strlen(s); + + while(*s) { + if(n != 1) { + *d++ = *s; + n--; + } + s++; + } + *d = 0; + + return dlength + (s - src); //return length of resulting string, sans null terminator +} + +#endif diff --git a/snesfilter/nall/string/trim.hpp b/snesfilter/nall/string/trim.hpp new file mode 100644 index 00000000..8f218c54 --- /dev/null +++ b/snesfilter/nall/string/trim.hpp @@ -0,0 +1,50 @@ +#ifndef NALL_STRING_TRIM_HPP +#define NALL_STRING_TRIM_HPP + +char* ltrim(char *str, const char *key) { + if(!key || !*key) return str; + while(strbegin(str, key)) { + char *dest = str, *src = str + strlen(key); + while(true) { + *dest = *src++; + if(!*dest) break; + dest++; + } + } + return str; +} + +char* rtrim(char *str, const char *key) { + if(!key || !*key) return str; + while(strend(str, key)) str[strlen(str) - strlen(key)] = 0; + return str; +} + +char* trim(char *str, const char *key) { + return ltrim(rtrim(str, key), key); +} + +char* ltrim_once(char *str, const char *key) { + if(!key || !*key) return str; + if(strbegin(str, key)) { + char *dest = str, *src = str + strlen(key); + while(true) { + *dest = *src++; + if(!*dest) break; + dest++; + } + } + return str; +} + +char* rtrim_once(char *str, const char *key) { + if(!key || !*key) return str; + if(strend(str, key)) str[strlen(str) - strlen(key)] = 0; + return str; +} + +char* trim_once(char *str, const char *key) { + return ltrim_once(rtrim_once(str, key), key); +} + +#endif diff --git a/snesfilter/nall/string/utility.hpp b/snesfilter/nall/string/utility.hpp new file mode 100644 index 00000000..1300d326 --- /dev/null +++ b/snesfilter/nall/string/utility.hpp @@ -0,0 +1,75 @@ +#ifndef NALL_STRING_UTILITY_HPP +#define NALL_STRING_UTILITY_HPP + +size_t strlcpy(nall::string &dest, const char *src, size_t length) { + dest.reserve(length); + return strlcpy(dest(), src, length); +} + +size_t strlcat(nall::string &dest, const char *src, size_t length) { + dest.reserve(length); + return strlcat(dest(), src, length); +} + +nall::string substr(const char *src, size_t start, size_t length) { + nall::string dest; + if(length == 0) { + //copy entire string + dest = src + start; + } else { + //copy partial string + strlcpy(dest, src + start, length + 1); + } + return dest; +} + +/* very simplistic wrappers to return nall::string& instead of char* type */ + +nall::string& strlower(nall::string &str) { strlower(str()); return str; } +nall::string& strupper(nall::string &str) { strupper(str()); return str; } +nall::string& strtr(nall::string &dest, const char *before, const char *after) { strtr(dest(), before, after); return dest; } +nall::string& ltrim(nall::string &str, const char *key) { ltrim(str(), key); return str; } +nall::string& rtrim(nall::string &str, const char *key) { rtrim(str(), key); return str; } +nall::string& trim (nall::string &str, const char *key) { trim (str(), key); return str; } +nall::string& ltrim_once(nall::string &str, const char *key) { ltrim_once(str(), key); return str; } +nall::string& rtrim_once(nall::string &str, const char *key) { rtrim_once(str(), key); return str; } +nall::string& trim_once (nall::string &str, const char *key) { trim_once (str(), key); return str; } + +/* arithmetic <> string */ + +nall::string strhex(uintmax_t value) { + nall::string temp; + temp.reserve(strhex(0, value)); + strhex(temp(), value); + return temp; +} + +nall::string strsigned(intmax_t value) { + nall::string temp; + temp.reserve(strsigned(0, value)); + strsigned(temp(), value); + return temp; +} + +nall::string strunsigned(uintmax_t value) { + nall::string temp; + temp.reserve(strunsigned(0, value)); + strunsigned(temp(), value); + return temp; +} + +nall::string strbin(uintmax_t value) { + nall::string temp; + temp.reserve(strbin(0, value)); + strbin(temp(), value); + return temp; +} + +nall::string strdouble(double value) { + nall::string temp; + temp.reserve(strdouble(0, value)); + strdouble(temp(), value); + return temp; +} + +#endif diff --git a/snesfilter/nall/traits.hpp b/snesfilter/nall/traits.hpp new file mode 100644 index 00000000..0e7e0db3 --- /dev/null +++ b/snesfilter/nall/traits.hpp @@ -0,0 +1,97 @@ +#ifndef NALL_TRAITS_HPP +#define NALL_TRAITS_HPP + +namespace nall { + //== + //is + //== + + template struct is_integral { enum { value = false }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + + template struct is_floating_point { enum { value = false }; }; + template<> struct is_floating_point { enum { value = true }; }; + template<> struct is_floating_point { enum { value = true }; }; + template<> struct is_floating_point { enum { value = true }; }; + + template struct is_bool { enum { value = false }; }; + template<> struct is_bool { enum { value = true }; }; + + template struct is_void { enum { value = false }; }; + template<> struct is_void { enum { value = true }; }; + + template struct is_arithmetic { + enum { value = is_integral::value || is_floating_point::value }; + }; + + template struct is_fundamental { + enum { value = is_integral::value || is_floating_point::value || is_void::value }; + }; + + template struct is_compound { + enum { value = !is_fundamental::value }; + }; + + template struct is_array { enum { value = false }; }; + template struct is_array { enum { value = true }; }; + template struct is_array { enum { value = true }; }; + + template struct is_const { enum { value = false }; }; + template struct is_const { enum { value = true }; }; + template struct is_const { enum { value = true }; }; + + template struct is_pointer { enum { value = false }; }; + template struct is_pointer { enum { value = true }; }; + + template struct is_reference { enum { value = false }; }; + template struct is_reference { enum { value = true }; }; + + template struct is_same { enum { value = false }; }; + template struct is_same { enum { value = true }; }; + + //=== + //add + //=== + + template struct add_const { typedef const T type; }; + template struct add_const { typedef const T type; }; + template struct add_const { typedef const T& type; }; + + template struct add_pointer { typedef T* type; }; + template struct add_pointer { typedef T** type; }; + + template struct add_reference { typedef T& type; }; + template struct add_reference { typedef T& type; }; + + //====== + //remove + //====== + + template struct remove_const { typedef T type; }; + template struct remove_const { typedef T type; }; + template struct remove_const { typedef T type; }; + + template struct remove_extent { typedef T type; }; + template struct remove_extent { typedef T type; }; + template struct remove_extent { typedef T type; }; + + template struct remove_pointer { typedef T type; }; + template struct remove_pointer { typedef T type; }; + + template struct remove_reference { typedef T type; }; + template struct remove_reference { typedef T type; }; +} + +#endif diff --git a/snesfilter/nall/ups.hpp b/snesfilter/nall/ups.hpp new file mode 100644 index 00000000..f255ecb3 --- /dev/null +++ b/snesfilter/nall/ups.hpp @@ -0,0 +1,190 @@ +#ifndef NALL_UPS_HPP +#define NALL_UPS_HPP + +#include + +#include +#include +#include +#include + +namespace nall { + class ups { + public: + enum result { + ok, + patch_unreadable, + patch_unwritable, + patch_invalid, + input_invalid, + output_invalid, + patch_crc32_invalid, + input_crc32_invalid, + output_crc32_invalid, + }; + + ups::result create(const char *patch_fn, const uint8_t *x_data, unsigned x_size, const uint8_t *y_data, unsigned y_size) { + if(!fp.open(patch_fn, file::mode_write)) return patch_unwritable; + + crc32 = ~0; + uint32_t x_crc32 = crc32_calculate(x_data, x_size); + uint32_t y_crc32 = crc32_calculate(y_data, y_size); + + //header + write('U'); + write('P'); + write('S'); + write('1'); + encptr(x_size); + encptr(y_size); + + //body + unsigned max_size = max(x_size, y_size); + unsigned relative = 0; + for(unsigned i = 0; i < max_size;) { + uint8_t x = i < x_size ? x_data[i] : 0x00; + uint8_t y = i < y_size ? y_data[i] : 0x00; + + if(x == y) { + i++; + continue; + } + + encptr(i++ - relative); + write(x ^ y); + + while(true) { + if(i >= max_size) { + write(0x00); + break; + } + + x = i < x_size ? x_data[i] : 0x00; + y = i < y_size ? y_data[i] : 0x00; + i++; + write(x ^ y); + if(x == y) break; + } + + relative = i; + } + + //footer + for(unsigned i = 0; i < 4; i++) write(x_crc32 >> (i << 3)); + for(unsigned i = 0; i < 4; i++) write(y_crc32 >> (i << 3)); + uint32_t p_crc32 = ~crc32; + for(unsigned i = 0; i < 4; i++) write(p_crc32 >> (i << 3)); + + fp.close(); + return ok; + } + + ups::result apply(const uint8_t *p_data, unsigned p_size, const uint8_t *x_data, unsigned x_size, uint8_t *&y_data, unsigned &y_size) { + if(p_size < 18) return patch_invalid; + p_buffer = p_data; + + crc32 = ~0; + + //header + if(read() != 'U') return patch_invalid; + if(read() != 'P') return patch_invalid; + if(read() != 'S') return patch_invalid; + if(read() != '1') return patch_invalid; + + unsigned px_size = decptr(); + unsigned py_size = decptr(); + + //mirror + if(x_size != px_size && x_size != py_size) return input_invalid; + y_size = (x_size == px_size) ? py_size : px_size; + y_data = new uint8_t[y_size](); + + for(unsigned i = 0; i < x_size && i < y_size; i++) y_data[i] = x_data[i]; + for(unsigned i = x_size; i < y_size; i++) y_data[i] = 0x00; + + //body + unsigned relative = 0; + while(p_buffer < p_data + p_size - 12) { + relative += decptr(); + + while(true) { + uint8_t x = read(); + if(x && relative < y_size) { + uint8_t y = relative < x_size ? x_data[relative] : 0x00; + y_data[relative] = x ^ y; + } + relative++; + if(!x) break; + } + } + + //footer + unsigned px_crc32 = 0, py_crc32 = 0, pp_crc32 = 0; + for(unsigned i = 0; i < 4; i++) px_crc32 |= read() << (i << 3); + for(unsigned i = 0; i < 4; i++) py_crc32 |= read() << (i << 3); + uint32_t p_crc32 = ~crc32; + for(unsigned i = 0; i < 4; i++) pp_crc32 |= read() << (i << 3); + + uint32_t x_crc32 = crc32_calculate(x_data, x_size); + uint32_t y_crc32 = crc32_calculate(y_data, y_size); + + if(px_size != py_size) { + if(x_size == px_size && x_crc32 != px_crc32) return input_crc32_invalid; + if(x_size == py_size && x_crc32 != py_crc32) return input_crc32_invalid; + if(y_size == px_size && y_crc32 != px_crc32) return output_crc32_invalid; + if(y_size == py_size && y_crc32 != py_crc32) return output_crc32_invalid; + } else { + if(x_crc32 != px_crc32 && x_crc32 != py_crc32) return input_crc32_invalid; + if(y_crc32 != px_crc32 && y_crc32 != py_crc32) return output_crc32_invalid; + if(x_crc32 == y_crc32 && px_crc32 != py_crc32) return output_crc32_invalid; + if(x_crc32 != y_crc32 && px_crc32 == py_crc32) return output_crc32_invalid; + } + + if(p_crc32 != pp_crc32) return patch_crc32_invalid; + return ok; + } + + private: + file fp; + uint32_t crc32; + const uint8_t *p_buffer; + + uint8_t read() { + uint8_t n = *p_buffer++; + crc32 = crc32_adjust(crc32, n); + return n; + } + + void write(uint8_t n) { + fp.write(n); + crc32 = crc32_adjust(crc32, n); + } + + void encptr(uint64_t offset) { + while(true) { + uint64_t x = offset & 0x7f; + offset >>= 7; + if(offset == 0) { + write(0x80 | x); + break; + } + write(x); + offset--; + } + } + + uint64_t decptr() { + uint64_t offset = 0, shift = 1; + while(true) { + uint8_t x = read(); + offset += (x & 0x7f) * shift; + if(x & 0x80) break; + shift <<= 7; + offset += shift; + } + return offset; + } + }; +} + +#endif diff --git a/snesfilter/nall/utf8.hpp b/snesfilter/nall/utf8.hpp new file mode 100644 index 00000000..c66c341a --- /dev/null +++ b/snesfilter/nall/utf8.hpp @@ -0,0 +1,72 @@ +#ifndef NALL_UTF8_HPP +#define NALL_UTF8_HPP + +//UTF-8 <> UTF-16 conversion +//used only for Win32; Linux, etc use UTF-8 internally + +#if defined(_WIN32) + +#undef _WIN32_WINNT +#define _WIN32_WINNT 0x0501 +#undef NOMINMAX +#define NOMINMAX +#include +#undef interface + +namespace nall { + //UTF-8 to UTF-16 + class utf16_t { + public: + operator wchar_t*() { + return buffer; + } + + operator const wchar_t*() const { + return buffer; + } + + utf16_t(const char *s = "") { + if(!s) s = ""; + unsigned length = MultiByteToWideChar(CP_UTF8, 0, s, -1, 0, 0); + buffer = new wchar_t[length + 1](); + MultiByteToWideChar(CP_UTF8, 0, s, -1, buffer, length); + } + + ~utf16_t() { + delete[] buffer; + } + + private: + wchar_t *buffer; + }; + + //UTF-16 to UTF-8 + class utf8_t { + public: + operator char*() { + return buffer; + } + + operator const char*() const { + return buffer; + } + + utf8_t(const wchar_t *s = L"") { + if(!s) s = L""; + unsigned length = WideCharToMultiByte(CP_UTF8, 0, s, -1, 0, 0, (const char*)0, (BOOL*)0); + buffer = new char[length + 1](); + WideCharToMultiByte(CP_UTF8, 0, s, -1, buffer, length, (const char*)0, (BOOL*)0); + } + + ~utf8_t() { + delete[] buffer; + } + + private: + char *buffer; + }; +} + +#endif //if defined(_WIN32) + +#endif diff --git a/snesfilter/nall/utility.hpp b/snesfilter/nall/utility.hpp new file mode 100644 index 00000000..fa73f8cb --- /dev/null +++ b/snesfilter/nall/utility.hpp @@ -0,0 +1,36 @@ +#ifndef NALL_UTILITY_HPP +#define NALL_UTILITY_HPP + +namespace nall { + template + inline void swap(T &x, T &y) { + T temp(x); + x = y; + y = temp; + } + + template + struct base_from_member { + T value; + base_from_member(T value_) : value(value_) {} + }; + + class noncopyable { + protected: + noncopyable() {} + ~noncopyable() {} + + private: + noncopyable(const noncopyable&); + const noncopyable& operator=(const noncopyable&); + }; + + template + inline T* allocate(size_t size, const T &value) { + T *array = new T[size]; + for(size_t i = 0; i < size; i++) array[i] = value; + return array; + } +} + +#endif diff --git a/snesfilter/nall/varint.hpp b/snesfilter/nall/varint.hpp new file mode 100644 index 00000000..cc3bb17c --- /dev/null +++ b/snesfilter/nall/varint.hpp @@ -0,0 +1,92 @@ +#ifndef NALL_VARINT_HPP +#define NALL_VARINT_HPP + +#include +#include +#include + +namespace nall { + template class uint_t { + private: + enum { bytes = (bits + 7) >> 3 }; //minimum number of bytes needed to store value + typedef typename static_if< + sizeof(int) >= bytes, + unsigned int, + typename static_if< + sizeof(long) >= bytes, + unsigned long, + typename static_if< + sizeof(long long) >= bytes, + unsigned long long, + void + >::type + >::type + >::type T; + static_assert::value> uint_assert; + T data; + + public: + inline operator T() const { return data; } + inline T operator ++(int) { T r = data; data = uclip(data + 1); return r; } + inline T operator --(int) { T r = data; data = uclip(data - 1); return r; } + inline T operator ++() { return data = uclip(data + 1); } + inline T operator --() { return data = uclip(data - 1); } + inline T operator =(const T i) { return data = uclip(i); } + inline T operator |=(const T i) { return data = uclip(data | i); } + inline T operator ^=(const T i) { return data = uclip(data ^ i); } + inline T operator &=(const T i) { return data = uclip(data & i); } + inline T operator<<=(const T i) { return data = uclip(data << i); } + inline T operator>>=(const T i) { return data = uclip(data >> i); } + inline T operator +=(const T i) { return data = uclip(data + i); } + inline T operator -=(const T i) { return data = uclip(data - i); } + inline T operator *=(const T i) { return data = uclip(data * i); } + inline T operator /=(const T i) { return data = uclip(data / i); } + inline T operator %=(const T i) { return data = uclip(data % i); } + + inline uint_t() : data(0) {} + inline uint_t(const T i) : data(uclip(i)) {} + }; + + template class int_t { + private: + enum { bytes = (bits + 7) >> 3 }; //minimum number of bytes needed to store value + typedef typename static_if< + sizeof(int) >= bytes, + signed int, + typename static_if< + sizeof(long) >= bytes, + signed long, + typename static_if< + sizeof(long long) >= bytes, + signed long long, + void + >::type + >::type + >::type T; + static_assert::value> int_assert; + T data; + + public: + inline operator T() const { return data; } + inline T operator ++(int) { T r = data; data = sclip(data + 1); return r; } + inline T operator --(int) { T r = data; data = sclip(data - 1); return r; } + inline T operator ++() { return data = sclip(data + 1); } + inline T operator --() { return data = sclip(data - 1); } + inline T operator =(const T i) { return data = sclip(i); } + inline T operator |=(const T i) { return data = sclip(data | i); } + inline T operator ^=(const T i) { return data = sclip(data ^ i); } + inline T operator &=(const T i) { return data = sclip(data & i); } + inline T operator<<=(const T i) { return data = sclip(data << i); } + inline T operator>>=(const T i) { return data = sclip(data >> i); } + inline T operator +=(const T i) { return data = sclip(data + i); } + inline T operator -=(const T i) { return data = sclip(data - i); } + inline T operator *=(const T i) { return data = sclip(data * i); } + inline T operator /=(const T i) { return data = sclip(data / i); } + inline T operator %=(const T i) { return data = sclip(data % i); } + + inline int_t() : data(0) {} + inline int_t(const T i) : data(sclip(i)) {} + }; +} + +#endif diff --git a/snesfilter/nall/vector.hpp b/snesfilter/nall/vector.hpp new file mode 100644 index 00000000..aeff81c0 --- /dev/null +++ b/snesfilter/nall/vector.hpp @@ -0,0 +1,162 @@ +#ifndef NALL_VECTOR_HPP +#define NALL_VECTOR_HPP + +#include +#include +#include +#include + +namespace nall { + //linear_vector + //memory: O(capacity * 2) + // + //linear_vector uses placement new + manual destructor calls to create a + //contiguous block of memory for all objects. accessing individual elements + //is fast, though resizing the array incurs significant overhead. + //reserve() overhead is reduced from quadratic time to amortized constant time + //by resizing twice as much as requested. + // + //if objects hold memory address references to themselves (introspection), a + //valid copy constructor will be needed to keep pointers valid. + + template class linear_vector : noncopyable { + protected: + T *pool; + unsigned poolsize, objectsize; + + public: + unsigned size() const { return objectsize; } + unsigned capacity() const { return poolsize; } + + void reset() { + if(pool) { + for(unsigned i = 0; i < objectsize; i++) pool[i].~T(); + free(pool); + } + pool = 0; + poolsize = 0; + objectsize = 0; + } + + void reserve(unsigned newsize) { + newsize = bit::round(newsize); //round to nearest power of two (for amortized growth) + + T *poolcopy = (T*)malloc(newsize * sizeof(T)); + for(unsigned i = 0; i < min(objectsize, newsize); i++) new(poolcopy + i) T(pool[i]); + for(unsigned i = 0; i < objectsize; i++) pool[i].~T(); + free(pool); + pool = poolcopy; + poolsize = newsize; + objectsize = min(objectsize, newsize); + } + + void resize(unsigned newsize) { + if(newsize > poolsize) reserve(newsize); + + if(newsize < objectsize) { + //vector is shrinking; destroy excess objects + for(unsigned i = newsize; i < objectsize; i++) pool[i].~T(); + } else if(newsize > objectsize) { + //vector is expanding; allocate new objects + for(unsigned i = objectsize; i < newsize; i++) new(pool + i) T; + } + + objectsize = newsize; + } + + void add(const T data) { + if(objectsize + 1 > poolsize) reserve(objectsize + 1); + new(pool + objectsize++) T(data); + } + + inline T& operator[](unsigned index) { + if(index >= objectsize) resize(index + 1); + return pool[index]; + } + + inline const T& operator[](unsigned index) const { + if(index >= objectsize) throw "vector[] out of bounds"; + return pool[index]; + } + + linear_vector() : pool(0), poolsize(0), objectsize(0) {} + ~linear_vector() { reset(); } + }; + + //pointer_vector + //memory: O(1) + // + //pointer_vector keeps an array of pointers to each vector object. this adds + //significant overhead to individual accesses, but allows for optimal memory + //utilization. + // + //by guaranteeing that the base memory address of each objects never changes, + //this avoids the need for an object to have a valid copy constructor. + + template class pointer_vector : noncopyable { + protected: + T **pool; + unsigned poolsize, objectsize; + + public: + unsigned size() const { return objectsize; } + unsigned capacity() const { return poolsize; } + + void reset() { + if(pool) { + for(unsigned i = 0; i < objectsize; i++) { if(pool[i]) delete pool[i]; } + free(pool); + } + pool = 0; + poolsize = 0; + objectsize = 0; + } + + void reserve(unsigned newsize) { + newsize = bit::round(newsize); //round to nearest power of two (for amortized growth) + + for(unsigned i = newsize; i < objectsize; i++) { + if(pool[i]) { delete pool[i]; pool[i] = 0; } + } + + pool = (T**)realloc(pool, newsize * sizeof(T*)); + for(unsigned i = poolsize; i < newsize; i++) pool[i] = 0; + poolsize = newsize; + objectsize = min(objectsize, newsize); + } + + void resize(unsigned newsize) { + if(newsize > poolsize) reserve(newsize); + + for(unsigned i = newsize; i < objectsize; i++) { + if(pool[i]) { delete pool[i]; pool[i] = 0; } + } + + objectsize = newsize; + } + + void add(const T data) { + if(objectsize + 1 > poolsize) reserve(objectsize + 1); + pool[objectsize++] = new T(data); + } + + inline T& operator[](unsigned index) { + if(index >= objectsize) resize(index + 1); + if(!pool[index]) pool[index] = new T; + return *pool[index]; + } + + inline const T& operator[](unsigned index) const { + if(index >= objectsize || !pool[index]) throw "vector[] out of bounds"; + return *pool[index]; + } + + pointer_vector() : pool(0), poolsize(0), objectsize(0) {} + ~pointer_vector() { reset(); } + }; + + //default vector type + template class vector : public linear_vector {}; +} + +#endif diff --git a/snesfilter/ntsc/ntsc.cpp b/snesfilter/ntsc/ntsc.cpp new file mode 100644 index 00000000..142ce8f8 --- /dev/null +++ b/snesfilter/ntsc/ntsc.cpp @@ -0,0 +1,396 @@ +#include "snes_ntsc/snes_ntsc.h" +#include "snes_ntsc/snes_ntsc.c" + +#include "ntsc.moc.hpp" +#include "ntsc.moc" + +void NTSCFilter::bind(configuration &config) { + config.attach(hue = 0.0, "snesfilter.ntsc.hue"); + config.attach(saturation = 0.0, "snesfilter.ntsc.saturation"); + config.attach(contrast = 0.0, "snesfilter.ntsc.contrast"); + config.attach(brightness = 0.0, "snesfilter.ntsc.brightness"); + config.attach(sharpness = 0.0, "snesfilter.ntsc.sharpness"); + config.attach(gamma = 0.0, "snesfilter.ntsc.gamma"); + config.attach(resolution = 0.0, "snesfilter.ntsc.resolution"); + config.attach(artifacts = 0.0, "snesfilter.ntsc.artifacts"); + config.attach(fringing = 0.0, "snesfilter.ntsc.fringing"); + config.attach(bleed = 0.0, "snesfilter.ntsc.bleed"); + config.attach(mergeFields = true, "snesfilter.ntsc.mergeFields"); +} + +void NTSCFilter::size(unsigned &outwidth, unsigned &outheight, unsigned width, unsigned height) { + outwidth = SNES_NTSC_OUT_WIDTH(256); + outheight = height; +} + +void NTSCFilter::render( + uint32_t *output, unsigned outpitch, const uint16_t *input, unsigned pitch, + const unsigned *line, unsigned width, unsigned height +) { + if(!ntsc) return; + + width = SNES_NTSC_OUT_WIDTH(256); + burst ^= burst_toggle; + + pitch >>= 1; + outpitch >>= 2; + + unsigned line_burst = burst; + for(unsigned y = 0; y < height;) { + const uint16_t *in = input + y * pitch; + uint32_t *out = output + y * outpitch; + + //render as many lines in one snes_ntsc_blit as possible: + //do this by determining for how many lines the width stays the same + unsigned rheight = 1; + unsigned rwidth = line[y]; + while(y + rheight < height && rwidth == line[y + rheight]) rheight++; + + if(rwidth == 256) { + snes_ntsc_blit (ntsc, in, pitch, line_burst, rwidth, rheight, out, outpitch << 2); + } else { + snes_ntsc_blit_hires(ntsc, in, pitch, line_burst, rwidth, rheight, out, outpitch << 2); + } + + line_burst = (line_burst + rheight) % 3; + y += rheight; + } +} + +QWidget* NTSCFilter::settings() { + if(!widget) { + widget = new QWidget; + widget->setWindowTitle("NTSC Filter Configuration"); + + layout = new QVBoxLayout; + layout->setAlignment(Qt::AlignTop); + widget->setLayout(layout); + + gridLayout = new QGridLayout; + layout->addLayout(gridLayout); + + basicSettings = new QLabel("Basic settings:"); + gridLayout->addWidget(basicSettings, 0, 0, 1, 3); + + hueLabel = new QLabel("Hue:"); + gridLayout->addWidget(hueLabel, 1, 0); + + hueValue = new QLabel; + hueValue->setMinimumWidth(hueValue->fontMetrics().width("-100.0")); + hueValue->setAlignment(Qt::AlignHCenter); + gridLayout->addWidget(hueValue, 1, 1); + + hueSlider = new QSlider(Qt::Horizontal); + hueSlider->setMinimum(-100); + hueSlider->setMaximum(+100); + gridLayout->addWidget(hueSlider, 1, 2); + + saturationLabel = new QLabel("Saturation:"); + gridLayout->addWidget(saturationLabel, 2, 0); + + saturationValue = new QLabel; + saturationValue->setAlignment(Qt::AlignHCenter); + gridLayout->addWidget(saturationValue, 2, 1); + + saturationSlider = new QSlider(Qt::Horizontal); + saturationSlider->setMinimum(-100); + saturationSlider->setMaximum(+100); + gridLayout->addWidget(saturationSlider, 2, 2); + + contrastLabel = new QLabel("Contrast:"); + gridLayout->addWidget(contrastLabel, 3, 0); + + contrastValue = new QLabel; + contrastValue->setAlignment(Qt::AlignHCenter); + gridLayout->addWidget(contrastValue, 3, 1); + + contrastSlider = new QSlider(Qt::Horizontal); + contrastSlider->setMinimum(-100); + contrastSlider->setMaximum(+100); + gridLayout->addWidget(contrastSlider, 3, 2); + + brightnessLabel = new QLabel("Brightness:"); + gridLayout->addWidget(brightnessLabel, 4, 0); + + brightnessValue = new QLabel; + brightnessValue->setAlignment(Qt::AlignHCenter); + gridLayout->addWidget(brightnessValue, 4, 1); + + brightnessSlider = new QSlider(Qt::Horizontal); + brightnessSlider->setMinimum(-100); + brightnessSlider->setMaximum(+100); + gridLayout->addWidget(brightnessSlider, 4, 2); + + sharpnessLabel = new QLabel("Sharpness:"); + gridLayout->addWidget(sharpnessLabel, 5, 0); + + sharpnessValue = new QLabel; + sharpnessValue->setAlignment(Qt::AlignHCenter); + gridLayout->addWidget(sharpnessValue, 5, 1); + + sharpnessSlider = new QSlider(Qt::Horizontal); + sharpnessSlider->setMinimum(-100); + sharpnessSlider->setMaximum(+100); + gridLayout->addWidget(sharpnessSlider, 5, 2); + + advancedSettings = new QLabel("Advanced settings:"); + gridLayout->addWidget(advancedSettings, 6, 0, 1, 3); + + gammaLabel = new QLabel("Gamma:"); + gridLayout->addWidget(gammaLabel, 7, 0); + + gammaValue = new QLabel; + gammaValue->setAlignment(Qt::AlignHCenter); + gridLayout->addWidget(gammaValue, 7, 1); + + gammaSlider = new QSlider(Qt::Horizontal); + gammaSlider->setMinimum(-100); + gammaSlider->setMaximum(+100); + gridLayout->addWidget(gammaSlider, 7, 2); + + resolutionLabel = new QLabel("Resolution:"); + gridLayout->addWidget(resolutionLabel, 8, 0); + + resolutionValue = new QLabel; + resolutionValue->setAlignment(Qt::AlignHCenter); + gridLayout->addWidget(resolutionValue, 8, 1); + + resolutionSlider = new QSlider(Qt::Horizontal); + resolutionSlider->setMinimum(-100); + resolutionSlider->setMaximum(+100); + gridLayout->addWidget(resolutionSlider, 8, 2); + + artifactsLabel = new QLabel("Artifacts:"); + gridLayout->addWidget(artifactsLabel, 9, 0); + + artifactsValue = new QLabel; + artifactsValue->setAlignment(Qt::AlignHCenter); + gridLayout->addWidget(artifactsValue, 9, 1); + + artifactsSlider = new QSlider(Qt::Horizontal); + artifactsSlider->setMinimum(-100); + artifactsSlider->setMaximum(+100); + gridLayout->addWidget(artifactsSlider, 9, 2); + + fringingLabel = new QLabel("Fringing:"); + gridLayout->addWidget(fringingLabel, 10, 0); + + fringingValue = new QLabel; + fringingValue->setAlignment(Qt::AlignHCenter); + gridLayout->addWidget(fringingValue, 10, 1); + + fringingSlider = new QSlider(Qt::Horizontal); + fringingSlider->setMinimum(-100); + fringingSlider->setMaximum(+100); + gridLayout->addWidget(fringingSlider, 10, 2); + + bleedLabel = new QLabel("Color bleed:"); + gridLayout->addWidget(bleedLabel, 11, 0); + + bleedValue = new QLabel; + bleedValue->setAlignment(Qt::AlignHCenter); + gridLayout->addWidget(bleedValue, 11, 1); + + bleedSlider = new QSlider(Qt::Horizontal); + bleedSlider->setMinimum(-100); + bleedSlider->setMaximum(+100); + gridLayout->addWidget(bleedSlider, 11, 2); + + mergeFieldsBox = new QCheckBox("Merge even and odd fields to reduce flicker"); + gridLayout->addWidget(mergeFieldsBox, 12, 0, 1, 3); + + presets = new QLabel("Presets:"); + gridLayout->addWidget(presets, 13, 0, 1, 3); + + controlLayout = new QHBoxLayout; + layout->addLayout(controlLayout); + + rfPreset = new QPushButton("RF"); + controlLayout->addWidget(rfPreset); + + compositePreset = new QPushButton("Composite"); + controlLayout->addWidget(compositePreset); + + svideoPreset = new QPushButton("S-Video"); + controlLayout->addWidget(svideoPreset); + + rgbPreset = new QPushButton("RGB"); + controlLayout->addWidget(rgbPreset); + + monoPreset = new QPushButton("Monochrome"); + controlLayout->addWidget(monoPreset); + + spacer = new QWidget; + spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + spacer->setMinimumWidth(50); + controlLayout->addWidget(spacer); + + ok = new QPushButton("Ok"); + controlLayout->addWidget(ok); + + blockSignals = true; + loadSettingsFromConfig(); + syncUiToSettings(); + initialize(); + + connect(hueSlider, SIGNAL(valueChanged(int)), this, SLOT(syncSettingsToUi())); + connect(saturationSlider, SIGNAL(valueChanged(int)), this, SLOT(syncSettingsToUi())); + connect(contrastSlider, SIGNAL(valueChanged(int)), this, SLOT(syncSettingsToUi())); + connect(brightnessSlider, SIGNAL(valueChanged(int)), this, SLOT(syncSettingsToUi())); + connect(sharpnessSlider, SIGNAL(valueChanged(int)), this, SLOT(syncSettingsToUi())); + connect(gammaSlider, SIGNAL(valueChanged(int)), this, SLOT(syncSettingsToUi())); + connect(resolutionSlider, SIGNAL(valueChanged(int)), this, SLOT(syncSettingsToUi())); + connect(artifactsSlider, SIGNAL(valueChanged(int)), this, SLOT(syncSettingsToUi())); + connect(fringingSlider, SIGNAL(valueChanged(int)), this, SLOT(syncSettingsToUi())); + connect(bleedSlider, SIGNAL(valueChanged(int)), this, SLOT(syncSettingsToUi())); + connect(mergeFieldsBox, SIGNAL(stateChanged(int)), this, SLOT(syncSettingsToUi())); + connect(rfPreset, SIGNAL(released()), this, SLOT(setRfPreset())); + connect(compositePreset, SIGNAL(released()), this, SLOT(setCompositePreset())); + connect(svideoPreset, SIGNAL(released()), this, SLOT(setSvideoPreset())); + connect(rgbPreset, SIGNAL(released()), this, SLOT(setRgbPreset())); + connect(monoPreset, SIGNAL(released()), this, SLOT(setMonoPreset())); + connect(ok, SIGNAL(released()), widget, SLOT(hide())); + + blockSignals = false; + } + + return widget; +} + +void NTSCFilter::initialize() { + burst = 0; + burst_toggle = (setup.merge_fields ? 0 : 1); //don't toggle burst when fields are merged + snes_ntsc_init(ntsc, &setup); +} + +void NTSCFilter::loadSettingsFromConfig() { + setup.hue = hue; + setup.saturation = saturation; + setup.contrast = contrast; + setup.brightness = brightness; + setup.sharpness = sharpness; + + setup.gamma = gamma; + setup.resolution = resolution; + setup.artifacts = artifacts; + setup.fringing = fringing; + setup.bleed = bleed; + + setup.merge_fields = mergeFields; +} + +void NTSCFilter::syncUiToSettings() { + blockSignals = true; + + hue = setup.hue; + saturation = setup.saturation; + contrast = setup.contrast; + brightness = setup.brightness; + sharpness = setup.sharpness; + + gamma = setup.gamma; + resolution = setup.resolution; + artifacts = setup.artifacts; + fringing = setup.fringing; + bleed = setup.bleed; + + mergeFields = setup.merge_fields; + + hueValue->setText(string() << hue); + hueSlider->setSliderPosition(hue * 100); + + saturationValue->setText(string() << saturation); + saturationSlider->setSliderPosition(saturation * 100); + + contrastValue->setText(string() << contrast); + contrastSlider->setSliderPosition(contrast * 100); + + brightnessValue->setText(string() << brightness); + brightnessSlider->setSliderPosition(brightness * 100); + + sharpnessValue->setText(string() << sharpness); + sharpnessSlider->setSliderPosition(sharpness * 100); + + gammaValue->setText(string() << gamma); + gammaSlider->setSliderPosition(gamma * 100); + + resolutionValue->setText(string() << resolution); + resolutionSlider->setSliderPosition(resolution * 100); + + artifactsValue->setText(string() << artifacts); + artifactsSlider->setSliderPosition(artifacts * 100); + + fringingValue->setText(string() << fringing); + fringingSlider->setSliderPosition(fringing * 100); + + bleedValue->setText(string() << bleed); + bleedSlider->setSliderPosition(bleed * 100); + + mergeFieldsBox->setChecked(mergeFields); + + blockSignals = false; +} + +void NTSCFilter::syncSettingsToUi() { + if(blockSignals) return; + + hue = hueSlider->sliderPosition() / 100.0; + saturation = saturationSlider->sliderPosition() / 100.0; + contrast = contrastSlider->sliderPosition() / 100.0; + brightness = brightnessSlider->sliderPosition() / 100.0; + sharpness = sharpnessSlider->sliderPosition() / 100.0; + + gamma = gammaSlider->sliderPosition() / 100.0; + resolution = resolutionSlider->sliderPosition() / 100.0; + artifacts = artifactsSlider->sliderPosition() / 100.0; + fringing = fringingSlider->sliderPosition() / 100.0; + bleed = bleedSlider->sliderPosition() / 100.0; + + mergeFields = mergeFieldsBox->isChecked(); + + loadSettingsFromConfig(); + syncUiToSettings(); + initialize(); +} + +void NTSCFilter::setRfPreset() { + static snes_ntsc_setup_t defaults; + setup = defaults; + syncUiToSettings(); + initialize(); +} + +void NTSCFilter::setCompositePreset() { + setup = snes_ntsc_composite; + syncUiToSettings(); + initialize(); +} + +void NTSCFilter::setSvideoPreset() { + setup = snes_ntsc_svideo; + syncUiToSettings(); + initialize(); +} + +void NTSCFilter::setRgbPreset() { + setup = snes_ntsc_rgb; + syncUiToSettings(); + initialize(); +} + +void NTSCFilter::setMonoPreset() { + setup = snes_ntsc_monochrome; + syncUiToSettings(); + initialize(); +} + +NTSCFilter::NTSCFilter() : widget(0) { + ntsc = (snes_ntsc_t*)malloc(sizeof *ntsc); + static snes_ntsc_setup_t defaults; + setup = defaults; + initialize(); +} + +NTSCFilter::~NTSCFilter() { + if(ntsc) free(ntsc); +} diff --git a/snesfilter/ntsc/ntsc.moc.hpp b/snesfilter/ntsc/ntsc.moc.hpp new file mode 100644 index 00000000..a99a6bb4 --- /dev/null +++ b/snesfilter/ntsc/ntsc.moc.hpp @@ -0,0 +1,91 @@ +class NTSCFilter : public QObject { + Q_OBJECT + +public: + void bind(configuration&); + void size(unsigned&, unsigned&, unsigned, unsigned); + void render(uint32_t*, unsigned, const uint16_t*, unsigned, const unsigned*, unsigned, unsigned); + QWidget* settings(); + + NTSCFilter(); + ~NTSCFilter(); + +private: + void initialize(); + void loadSettingsFromConfig(); + void syncUiToSettings(); + +private slots: + void syncSettingsToUi(); + void setRfPreset(); + void setCompositePreset(); + void setSvideoPreset(); + void setRgbPreset(); + void setMonoPreset(); + +private: + QWidget *widget; + QVBoxLayout *layout; + QGridLayout *gridLayout; + QLabel *basicSettings; + QLabel *hueLabel; + QLabel *hueValue; + QSlider *hueSlider; + QLabel *saturationLabel; + QLabel *saturationValue; + QSlider *saturationSlider; + QLabel *contrastLabel; + QLabel *contrastValue; + QSlider *contrastSlider; + QLabel *brightnessLabel; + QLabel *brightnessValue; + QSlider *brightnessSlider; + QLabel *sharpnessLabel; + QLabel *sharpnessValue; + QSlider *sharpnessSlider; + QLabel *advancedSettings; + QLabel *gammaLabel; + QLabel *gammaValue; + QSlider *gammaSlider; + QLabel *resolutionLabel; + QLabel *resolutionValue; + QSlider *resolutionSlider; + QLabel *artifactsLabel; + QLabel *artifactsValue; + QSlider *artifactsSlider; + QLabel *fringingLabel; + QLabel *fringingValue; + QSlider *fringingSlider; + QLabel *bleedLabel; + QLabel *bleedValue; + QSlider *bleedSlider; + QCheckBox *mergeFieldsBox; + QLabel *presets; + QHBoxLayout *controlLayout; + QPushButton *rfPreset; + QPushButton *compositePreset; + QPushButton *svideoPreset; + QPushButton *rgbPreset; + QPushButton *monoPreset; + QWidget *spacer; + QPushButton *ok; + + bool blockSignals; + + struct snes_ntsc_t *ntsc; + snes_ntsc_setup_t setup; + int burst, burst_toggle; + + //settings + double hue; + double saturation; + double contrast; + double brightness; + double sharpness; + double gamma; + double resolution; + double artifacts; + double fringing; + double bleed; + bool mergeFields; +} filter_ntsc; diff --git a/snesfilter/ntsc/snes_ntsc/snes_ntsc.c b/snesfilter/ntsc/snes_ntsc/snes_ntsc.c new file mode 100644 index 00000000..f622baf8 --- /dev/null +++ b/snesfilter/ntsc/snes_ntsc/snes_ntsc.c @@ -0,0 +1,251 @@ +/* snes_ntsc 0.2.2. http://www.slack.net/~ant/ */ + +#include "snes_ntsc.h" + +/* Copyright (C) 2006-2007 Shay Green. This module is free software; you +can redistribute it and/or modify it under the terms of the GNU Lesser +General Public License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. This +module is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +details. You should have received a copy of the GNU Lesser General Public +License along with this module; if not, write to the Free Software Foundation, +Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ + +snes_ntsc_setup_t const snes_ntsc_monochrome = { 0,-1, 0, 0,.2, 0,.2,-.2,-.2,-1, 1, 0, 0 }; +snes_ntsc_setup_t const snes_ntsc_composite = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 }; +snes_ntsc_setup_t const snes_ntsc_svideo = { 0, 0, 0, 0,.2, 0,.2, -1, -1, 0, 1, 0, 0 }; +snes_ntsc_setup_t const snes_ntsc_rgb = { 0, 0, 0, 0,.2, 0,.7, -1, -1,-1, 1, 0, 0 }; + +#define alignment_count 3 +#define burst_count 3 +#define rescale_in 8 +#define rescale_out 7 + +#define artifacts_mid 1.0f +#define fringing_mid 1.0f +#define std_decoder_hue 0 + +#define rgb_bits 7 /* half normal range to allow for doubled hires pixels */ +#define gamma_size 32 + +#include "snes_ntsc_impl.h" + +/* 3 input pixels -> 8 composite samples */ +pixel_info_t const snes_ntsc_pixels [alignment_count] = { + { PIXEL_OFFSET( -4, -9 ), { 1, 1, .6667f, 0 } }, + { PIXEL_OFFSET( -2, -7 ), { .3333f, 1, 1, .3333f } }, + { PIXEL_OFFSET( 0, -5 ), { 0, .6667f, 1, 1 } }, +}; + +static void merge_kernel_fields( snes_ntsc_rgb_t* io ) +{ + int n; + for ( n = burst_size; n; --n ) + { + snes_ntsc_rgb_t p0 = io [burst_size * 0] + rgb_bias; + snes_ntsc_rgb_t p1 = io [burst_size * 1] + rgb_bias; + snes_ntsc_rgb_t p2 = io [burst_size * 2] + rgb_bias; + /* merge colors without losing precision */ + io [burst_size * 0] = + ((p0 + p1 - ((p0 ^ p1) & snes_ntsc_rgb_builder)) >> 1) - rgb_bias; + io [burst_size * 1] = + ((p1 + p2 - ((p1 ^ p2) & snes_ntsc_rgb_builder)) >> 1) - rgb_bias; + io [burst_size * 2] = + ((p2 + p0 - ((p2 ^ p0) & snes_ntsc_rgb_builder)) >> 1) - rgb_bias; + ++io; + } +} + +static void correct_errors( snes_ntsc_rgb_t color, snes_ntsc_rgb_t* out ) +{ + int n; + for ( n = burst_count; n; --n ) + { + unsigned i; + for ( i = 0; i < rgb_kernel_size / 2; i++ ) + { + snes_ntsc_rgb_t error = color - + out [i ] - out [(i+12)%14+14] - out [(i+10)%14+28] - + out [i + 7] - out [i + 5 +14] - out [i + 3 +28]; + DISTRIBUTE_ERROR( i+3+28, i+5+14, i+7 ); + } + out += alignment_count * rgb_kernel_size; + } +} + +void snes_ntsc_init( snes_ntsc_t* ntsc, snes_ntsc_setup_t const* setup ) +{ + int merge_fields; + int entry; + init_t impl; + if ( !setup ) + setup = &snes_ntsc_composite; + init( &impl, setup ); + + merge_fields = setup->merge_fields; + if ( setup->artifacts <= -1 && setup->fringing <= -1 ) + merge_fields = 1; + + for ( entry = 0; entry < snes_ntsc_palette_size; entry++ ) + { + /* Reduce number of significant bits of source color. Clearing the + low bits of R and B were least notictable. Modifying green was too + noticeable. */ + int ir = entry >> 8 & 0x1E; + int ig = entry >> 4 & 0x1F; + int ib = entry << 1 & 0x1E; + + #if SNES_NTSC_BSNES_COLORTBL + if ( setup->bsnes_colortbl ) + { + int bgr15 = (ib << 10) | (ig << 5) | ir; + unsigned long rgb16 = setup->bsnes_colortbl [bgr15]; + ir = rgb16 >> 11 & 0x1E; + ig = rgb16 >> 6 & 0x1F; + ib = rgb16 & 0x1E; + } + #endif + + { + float rr = impl.to_float [ir]; + float gg = impl.to_float [ig]; + float bb = impl.to_float [ib]; + + float y, i, q = RGB_TO_YIQ( rr, gg, bb, y, i ); + + int r, g, b = YIQ_TO_RGB( y, i, q, impl.to_rgb, int, r, g ); + snes_ntsc_rgb_t rgb = PACK_RGB( r, g, b ); + + snes_ntsc_rgb_t* out = ntsc->table [entry]; + gen_kernel( &impl, y, i, q, out ); + if ( merge_fields ) + merge_kernel_fields( out ); + correct_errors( rgb, out ); + } + } +} + +#ifndef SNES_NTSC_NO_BLITTERS + +void snes_ntsc_blit( snes_ntsc_t const* ntsc, SNES_NTSC_IN_T const* input, long in_row_width, + int burst_phase, int in_width, int in_height, void* rgb_out, long out_pitch ) +{ + int chunk_count = (in_width - 1) / snes_ntsc_in_chunk; + for ( ; in_height; --in_height ) + { + SNES_NTSC_IN_T const* line_in = input; + SNES_NTSC_BEGIN_ROW( ntsc, burst_phase, + snes_ntsc_black, snes_ntsc_black, SNES_NTSC_ADJ_IN( *line_in ) ); + snes_ntsc_out_t* restrict line_out = (snes_ntsc_out_t*) rgb_out; + int n; + ++line_in; + + for ( n = chunk_count; n; --n ) + { + /* order of input and output pixels must not be altered */ + SNES_NTSC_COLOR_IN( 0, SNES_NTSC_ADJ_IN( line_in [0] ) ); + SNES_NTSC_RGB_OUT( 0, line_out [0], SNES_NTSC_OUT_DEPTH ); + SNES_NTSC_RGB_OUT( 1, line_out [1], SNES_NTSC_OUT_DEPTH ); + + SNES_NTSC_COLOR_IN( 1, SNES_NTSC_ADJ_IN( line_in [1] ) ); + SNES_NTSC_RGB_OUT( 2, line_out [2], SNES_NTSC_OUT_DEPTH ); + SNES_NTSC_RGB_OUT( 3, line_out [3], SNES_NTSC_OUT_DEPTH ); + + SNES_NTSC_COLOR_IN( 2, SNES_NTSC_ADJ_IN( line_in [2] ) ); + SNES_NTSC_RGB_OUT( 4, line_out [4], SNES_NTSC_OUT_DEPTH ); + SNES_NTSC_RGB_OUT( 5, line_out [5], SNES_NTSC_OUT_DEPTH ); + SNES_NTSC_RGB_OUT( 6, line_out [6], SNES_NTSC_OUT_DEPTH ); + + line_in += 3; + line_out += 7; + } + + /* finish final pixels */ + SNES_NTSC_COLOR_IN( 0, snes_ntsc_black ); + SNES_NTSC_RGB_OUT( 0, line_out [0], SNES_NTSC_OUT_DEPTH ); + SNES_NTSC_RGB_OUT( 1, line_out [1], SNES_NTSC_OUT_DEPTH ); + + SNES_NTSC_COLOR_IN( 1, snes_ntsc_black ); + SNES_NTSC_RGB_OUT( 2, line_out [2], SNES_NTSC_OUT_DEPTH ); + SNES_NTSC_RGB_OUT( 3, line_out [3], SNES_NTSC_OUT_DEPTH ); + + SNES_NTSC_COLOR_IN( 2, snes_ntsc_black ); + SNES_NTSC_RGB_OUT( 4, line_out [4], SNES_NTSC_OUT_DEPTH ); + SNES_NTSC_RGB_OUT( 5, line_out [5], SNES_NTSC_OUT_DEPTH ); + SNES_NTSC_RGB_OUT( 6, line_out [6], SNES_NTSC_OUT_DEPTH ); + + burst_phase = (burst_phase + 1) % snes_ntsc_burst_count; + input += in_row_width; + rgb_out = (char*) rgb_out + out_pitch; + } +} + +void snes_ntsc_blit_hires( snes_ntsc_t const* ntsc, SNES_NTSC_IN_T const* input, long in_row_width, + int burst_phase, int in_width, int in_height, void* rgb_out, long out_pitch ) +{ + int chunk_count = (in_width - 2) / (snes_ntsc_in_chunk * 2); + for ( ; in_height; --in_height ) + { + SNES_NTSC_IN_T const* line_in = input; + SNES_NTSC_HIRES_ROW( ntsc, burst_phase, + snes_ntsc_black, snes_ntsc_black, snes_ntsc_black, + SNES_NTSC_ADJ_IN( line_in [0] ), + SNES_NTSC_ADJ_IN( line_in [1] ) ); + snes_ntsc_out_t* restrict line_out = (snes_ntsc_out_t*) rgb_out; + int n; + line_in += 2; + + for ( n = chunk_count; n; --n ) + { + /* twice as many input pixels per chunk */ + SNES_NTSC_COLOR_IN( 0, SNES_NTSC_ADJ_IN( line_in [0] ) ); + SNES_NTSC_HIRES_OUT( 0, line_out [0], SNES_NTSC_OUT_DEPTH ); + + SNES_NTSC_COLOR_IN( 1, SNES_NTSC_ADJ_IN( line_in [1] ) ); + SNES_NTSC_HIRES_OUT( 1, line_out [1], SNES_NTSC_OUT_DEPTH ); + + SNES_NTSC_COLOR_IN( 2, SNES_NTSC_ADJ_IN( line_in [2] ) ); + SNES_NTSC_HIRES_OUT( 2, line_out [2], SNES_NTSC_OUT_DEPTH ); + + SNES_NTSC_COLOR_IN( 3, SNES_NTSC_ADJ_IN( line_in [3] ) ); + SNES_NTSC_HIRES_OUT( 3, line_out [3], SNES_NTSC_OUT_DEPTH ); + + SNES_NTSC_COLOR_IN( 4, SNES_NTSC_ADJ_IN( line_in [4] ) ); + SNES_NTSC_HIRES_OUT( 4, line_out [4], SNES_NTSC_OUT_DEPTH ); + + SNES_NTSC_COLOR_IN( 5, SNES_NTSC_ADJ_IN( line_in [5] ) ); + SNES_NTSC_HIRES_OUT( 5, line_out [5], SNES_NTSC_OUT_DEPTH ); + SNES_NTSC_HIRES_OUT( 6, line_out [6], SNES_NTSC_OUT_DEPTH ); + + line_in += 6; + line_out += 7; + } + + SNES_NTSC_COLOR_IN( 0, snes_ntsc_black ); + SNES_NTSC_HIRES_OUT( 0, line_out [0], SNES_NTSC_OUT_DEPTH ); + + SNES_NTSC_COLOR_IN( 1, snes_ntsc_black ); + SNES_NTSC_HIRES_OUT( 1, line_out [1], SNES_NTSC_OUT_DEPTH ); + + SNES_NTSC_COLOR_IN( 2, snes_ntsc_black ); + SNES_NTSC_HIRES_OUT( 2, line_out [2], SNES_NTSC_OUT_DEPTH ); + + SNES_NTSC_COLOR_IN( 3, snes_ntsc_black ); + SNES_NTSC_HIRES_OUT( 3, line_out [3], SNES_NTSC_OUT_DEPTH ); + + SNES_NTSC_COLOR_IN( 4, snes_ntsc_black ); + SNES_NTSC_HIRES_OUT( 4, line_out [4], SNES_NTSC_OUT_DEPTH ); + + SNES_NTSC_COLOR_IN( 5, snes_ntsc_black ); + SNES_NTSC_HIRES_OUT( 5, line_out [5], SNES_NTSC_OUT_DEPTH ); + SNES_NTSC_HIRES_OUT( 6, line_out [6], SNES_NTSC_OUT_DEPTH ); + + burst_phase = (burst_phase + 1) % snes_ntsc_burst_count; + input += in_row_width; + rgb_out = (char*) rgb_out + out_pitch; + } +} + +#endif diff --git a/snesfilter/ntsc/snes_ntsc/snes_ntsc.h b/snesfilter/ntsc/snes_ntsc/snes_ntsc.h new file mode 100644 index 00000000..fff97ecd --- /dev/null +++ b/snesfilter/ntsc/snes_ntsc/snes_ntsc.h @@ -0,0 +1,228 @@ +/* SNES NTSC video filter */ + +/* snes_ntsc 0.2.2 */ +#ifndef SNES_NTSC_H +#define SNES_NTSC_H + +#include "snes_ntsc_config.h" + +#ifdef __cplusplus + extern "C" { +#endif + +/* Image parameters, ranging from -1.0 to 1.0. Actual internal values shown +in parenthesis and should remain fairly stable in future versions. */ +typedef struct snes_ntsc_setup_t +{ + /* Basic parameters */ + double hue; /* -1 = -180 degrees +1 = +180 degrees */ + double saturation; /* -1 = grayscale (0.0) +1 = oversaturated colors (2.0) */ + double contrast; /* -1 = dark (0.5) +1 = light (1.5) */ + double brightness; /* -1 = dark (0.5) +1 = light (1.5) */ + double sharpness; /* edge contrast enhancement/blurring */ + + /* Advanced parameters */ + double gamma; /* -1 = dark (1.5) +1 = light (0.5) */ + double resolution; /* image resolution */ + double artifacts; /* artifacts caused by color changes */ + double fringing; /* color artifacts caused by brightness changes */ + double bleed; /* color bleed (color resolution reduction) */ + int merge_fields; /* if 1, merges even and odd fields together to reduce flicker */ + float const* decoder_matrix; /* optional RGB decoder matrix, 6 elements */ + + unsigned long const* bsnes_colortbl; /* undocumented; set to 0 */ +} snes_ntsc_setup_t; + +/* Video format presets */ +extern snes_ntsc_setup_t const snes_ntsc_composite; /* color bleeding + artifacts */ +extern snes_ntsc_setup_t const snes_ntsc_svideo; /* color bleeding only */ +extern snes_ntsc_setup_t const snes_ntsc_rgb; /* crisp image */ +extern snes_ntsc_setup_t const snes_ntsc_monochrome;/* desaturated + artifacts */ + +/* Initializes and adjusts parameters. Can be called multiple times on the same +snes_ntsc_t object. Can pass NULL for either parameter. */ +typedef struct snes_ntsc_t snes_ntsc_t; +void snes_ntsc_init( snes_ntsc_t* ntsc, snes_ntsc_setup_t const* setup ); + +/* Filters one or more rows of pixels. Input pixel format is set by SNES_NTSC_IN_FORMAT +and output RGB depth is set by SNES_NTSC_OUT_DEPTH. Both default to 16-bit RGB. +In_row_width is the number of pixels to get to the next input row. Out_pitch +is the number of *bytes* to get to the next output row. */ +void snes_ntsc_blit( snes_ntsc_t const* ntsc, SNES_NTSC_IN_T const* input, + long in_row_width, int burst_phase, int in_width, int in_height, + void* rgb_out, long out_pitch ); + +void snes_ntsc_blit_hires( snes_ntsc_t const* ntsc, SNES_NTSC_IN_T const* input, + long in_row_width, int burst_phase, int in_width, int in_height, + void* rgb_out, long out_pitch ); + +/* Number of output pixels written by low-res blitter for given input width. Width +might be rounded down slightly; use SNES_NTSC_IN_WIDTH() on result to find rounded +value. Guaranteed not to round 256 down at all. */ +#define SNES_NTSC_OUT_WIDTH( in_width ) \ + ((((in_width) - 1) / snes_ntsc_in_chunk + 1) * snes_ntsc_out_chunk) + +/* Number of low-res input pixels that will fit within given output width. Might be +rounded down slightly; use SNES_NTSC_OUT_WIDTH() on result to find rounded +value. */ +#define SNES_NTSC_IN_WIDTH( out_width ) \ + (((out_width) / snes_ntsc_out_chunk - 1) * snes_ntsc_in_chunk + 1) + + +/* Interface for user-defined custom blitters */ + +enum { snes_ntsc_in_chunk = 3 }; /* number of input pixels read per chunk */ +enum { snes_ntsc_out_chunk = 7 }; /* number of output pixels generated per chunk */ +enum { snes_ntsc_black = 0 }; /* palette index for black */ +enum { snes_ntsc_burst_count = 3 }; /* burst phase cycles through 0, 1, and 2 */ + +/* Begins outputting row and starts three pixels. First pixel will be cut off a bit. +Use snes_ntsc_black for unused pixels. Declares variables, so must be before first +statement in a block (unless you're using C++). */ +#define SNES_NTSC_BEGIN_ROW( ntsc, burst, pixel0, pixel1, pixel2 ) \ + char const* ktable = \ + (char const*) (ntsc)->table + burst * (snes_ntsc_burst_size * sizeof (snes_ntsc_rgb_t));\ + SNES_NTSC_BEGIN_ROW_6_( pixel0, pixel1, pixel2, SNES_NTSC_IN_FORMAT, ktable ) + +/* Begins input pixel */ +#define SNES_NTSC_COLOR_IN( index, color ) \ + SNES_NTSC_COLOR_IN_( index, color, SNES_NTSC_IN_FORMAT, ktable ) + +/* Generates output pixel. Bits can be 24, 16, 15, 14, 32 (treated as 24), or 0: +24: RRRRRRRR GGGGGGGG BBBBBBBB (8-8-8 RGB) +16: RRRRRGGG GGGBBBBB (5-6-5 RGB) +15: RRRRRGG GGGBBBBB (5-5-5 RGB) +14: BBBBBGG GGGRRRRR (5-5-5 BGR, native SNES format) + 0: xxxRRRRR RRRxxGGG GGGGGxxB BBBBBBBx (native internal format; x = junk bits) */ +#define SNES_NTSC_RGB_OUT( index, rgb_out, bits ) \ + SNES_NTSC_RGB_OUT_14_( index, rgb_out, bits, 1 ) + +/* Hires equivalents */ +#define SNES_NTSC_HIRES_ROW( ntsc, burst, pixel1, pixel2, pixel3, pixel4, pixel5 ) \ + char const* ktable = \ + (char const*) (ntsc)->table + burst * (snes_ntsc_burst_size * sizeof (snes_ntsc_rgb_t));\ + unsigned const snes_ntsc_pixel1_ = (pixel1);\ + snes_ntsc_rgb_t const* kernel1 = SNES_NTSC_IN_FORMAT( ktable, snes_ntsc_pixel1_ );\ + unsigned const snes_ntsc_pixel2_ = (pixel2);\ + snes_ntsc_rgb_t const* kernel2 = SNES_NTSC_IN_FORMAT( ktable, snes_ntsc_pixel2_ );\ + unsigned const snes_ntsc_pixel3_ = (pixel3);\ + snes_ntsc_rgb_t const* kernel3 = SNES_NTSC_IN_FORMAT( ktable, snes_ntsc_pixel3_ );\ + unsigned const snes_ntsc_pixel4_ = (pixel4);\ + snes_ntsc_rgb_t const* kernel4 = SNES_NTSC_IN_FORMAT( ktable, snes_ntsc_pixel4_ );\ + unsigned const snes_ntsc_pixel5_ = (pixel5);\ + snes_ntsc_rgb_t const* kernel5 = SNES_NTSC_IN_FORMAT( ktable, snes_ntsc_pixel5_ );\ + snes_ntsc_rgb_t const* kernel0 = kernel1;\ + snes_ntsc_rgb_t const* kernelx0;\ + snes_ntsc_rgb_t const* kernelx1 = kernel1;\ + snes_ntsc_rgb_t const* kernelx2 = kernel1;\ + snes_ntsc_rgb_t const* kernelx3 = kernel1;\ + snes_ntsc_rgb_t const* kernelx4 = kernel1;\ + snes_ntsc_rgb_t const* kernelx5 = kernel1 + +#define SNES_NTSC_HIRES_OUT( x, rgb_out, bits ) {\ + snes_ntsc_rgb_t raw_ =\ + kernel0 [ x ] + kernel2 [(x+5)%7+14] + kernel4 [(x+3)%7+28] +\ + kernelx0 [(x+7)%7+7] + kernelx2 [(x+5)%7+21] + kernelx4 [(x+3)%7+35] +\ + kernel1 [(x+6)%7 ] + kernel3 [(x+4)%7+14] + kernel5 [(x+2)%7+28] +\ + kernelx1 [(x+6)%7+7] + kernelx3 [(x+4)%7+21] + kernelx5 [(x+2)%7+35];\ + SNES_NTSC_CLAMP_( raw_, 0 );\ + SNES_NTSC_RGB_OUT_( rgb_out, (bits), 0 );\ +} + + +/* private */ +enum { snes_ntsc_entry_size = 128 }; +enum { snes_ntsc_palette_size = 0x2000 }; +typedef unsigned long snes_ntsc_rgb_t; +struct snes_ntsc_t { + snes_ntsc_rgb_t table [snes_ntsc_palette_size] [snes_ntsc_entry_size]; +}; +enum { snes_ntsc_burst_size = snes_ntsc_entry_size / snes_ntsc_burst_count }; + +#define SNES_NTSC_RGB16( ktable, n ) \ + (snes_ntsc_rgb_t const*) (ktable + ((n & 0x001E) | (n >> 1 & 0x03E0) | (n >> 2 & 0x3C00)) * \ + (snes_ntsc_entry_size / 2 * sizeof (snes_ntsc_rgb_t))) + +#define SNES_NTSC_BGR15( ktable, n ) \ + (snes_ntsc_rgb_t const*) (ktable + ((n << 9 & 0x3C00) | (n & 0x03E0) | (n >> 10 & 0x001E)) * \ + (snes_ntsc_entry_size / 2 * sizeof (snes_ntsc_rgb_t))) + +/* common 3->7 ntsc macros */ +#define SNES_NTSC_BEGIN_ROW_6_( pixel0, pixel1, pixel2, ENTRY, table ) \ + unsigned const snes_ntsc_pixel0_ = (pixel0);\ + snes_ntsc_rgb_t const* kernel0 = ENTRY( table, snes_ntsc_pixel0_ );\ + unsigned const snes_ntsc_pixel1_ = (pixel1);\ + snes_ntsc_rgb_t const* kernel1 = ENTRY( table, snes_ntsc_pixel1_ );\ + unsigned const snes_ntsc_pixel2_ = (pixel2);\ + snes_ntsc_rgb_t const* kernel2 = ENTRY( table, snes_ntsc_pixel2_ );\ + snes_ntsc_rgb_t const* kernelx0;\ + snes_ntsc_rgb_t const* kernelx1 = kernel0;\ + snes_ntsc_rgb_t const* kernelx2 = kernel0 + +#define SNES_NTSC_RGB_OUT_14_( x, rgb_out, bits, shift ) {\ + snes_ntsc_rgb_t raw_ =\ + kernel0 [x ] + kernel1 [(x+12)%7+14] + kernel2 [(x+10)%7+28] +\ + kernelx0 [(x+7)%14] + kernelx1 [(x+ 5)%7+21] + kernelx2 [(x+ 3)%7+35];\ + SNES_NTSC_CLAMP_( raw_, shift );\ + SNES_NTSC_RGB_OUT_( rgb_out, bits, shift );\ +} + +/* common ntsc macros */ +#define snes_ntsc_rgb_builder ((1L << 21) | (1 << 11) | (1 << 1)) +#define snes_ntsc_clamp_mask (snes_ntsc_rgb_builder * 3 / 2) +#define snes_ntsc_clamp_add (snes_ntsc_rgb_builder * 0x101) +#define SNES_NTSC_CLAMP_( io, shift ) {\ + snes_ntsc_rgb_t sub = (io) >> (9-(shift)) & snes_ntsc_clamp_mask;\ + snes_ntsc_rgb_t clamp = snes_ntsc_clamp_add - sub;\ + io |= clamp;\ + clamp -= sub;\ + io &= clamp;\ +} + +#define SNES_NTSC_COLOR_IN_( index, color, ENTRY, table ) {\ + unsigned color_;\ + kernelx##index = kernel##index;\ + kernel##index = (color_ = (color), ENTRY( table, color_ ));\ +} + +/* x is always zero except in snes_ntsc library */ +/* original routine */ +/* +#define SNES_NTSC_RGB_OUT_( rgb_out, bits, x ) {\ + if ( bits == 16 )\ + rgb_out = (raw_>>(13-x)& 0xF800)|(raw_>>(8-x)&0x07E0)|(raw_>>(4-x)&0x001F);\ + if ( bits == 24 || bits == 32 )\ + rgb_out = (raw_>>(5-x)&0xFF0000)|(raw_>>(3-x)&0xFF00)|(raw_>>(1-x)&0xFF);\ + if ( bits == 15 )\ + rgb_out = (raw_>>(14-x)& 0x7C00)|(raw_>>(9-x)&0x03E0)|(raw_>>(4-x)&0x001F);\ + if ( bits == 14 )\ + rgb_out = (raw_>>(24-x)& 0x001F)|(raw_>>(9-x)&0x03E0)|(raw_<<(6+x)&0x7C00);\ + if ( bits == 0 )\ + rgb_out = raw_ << x;\ +} +*/ + +/* custom bsnes routine -- hooks into bsnes colortable */ +#define SNES_NTSC_RGB_OUT_( rgb_out, bits, x ) {\ + if ( bits == 16 ) {\ + rgb_out = (raw_>>(13-x)& 0xF800)|(raw_>>(8-x)&0x07E0)|(raw_>>(4-x)&0x001F);\ + rgb_out = ((rgb_out&0xf800)>>11)|((rgb_out&0x07c0)>>1)|((rgb_out&0x001f)<<10);\ + rgb_out = colortable[rgb_out];\ + } else if ( bits == 24 || bits == 32 ) {\ + rgb_out = (raw_>>(5-x)&0xFF0000)|(raw_>>(3-x)&0xFF00)|(raw_>>(1-x)&0xFF);\ + rgb_out = ((rgb_out&0xf80000)>>19)|((rgb_out&0x00f800)>>6)|((rgb_out&0x0000f8)<<7);\ + rgb_out = colortable[rgb_out];\ + } else if ( bits == 15 ) {\ + rgb_out = (raw_>>(14-x)& 0x7C00)|(raw_>>(9-x)&0x03E0)|(raw_>>(4-x)&0x001F);\ + rgb_out = ((rgb_out&0x7c00)>>10)|((rgb_out&0x03e0))|((rgb_out&0x001f)<<10);\ + rgb_out = colortable[rgb_out];\ + } else {\ + rgb_out = raw_ << x;\ + }\ +} + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/snesfilter/ntsc/snes_ntsc/snes_ntsc_config.h b/snesfilter/ntsc/snes_ntsc/snes_ntsc_config.h new file mode 100644 index 00000000..7ab94c2c --- /dev/null +++ b/snesfilter/ntsc/snes_ntsc/snes_ntsc_config.h @@ -0,0 +1,26 @@ +/* Configure library by modifying this file */ + +#ifndef SNES_NTSC_CONFIG_H +#define SNES_NTSC_CONFIG_H + +/* Format of source pixels */ +/* #define SNES_NTSC_IN_FORMAT SNES_NTSC_RGB16 */ +#define SNES_NTSC_IN_FORMAT SNES_NTSC_BGR15 + +/* The following affect the built-in blitter only; a custom blitter can +handle things however it wants. */ + +/* Bits per pixel of output. Can be 15, 16, 32, or 24 (same as 32). */ +#define SNES_NTSC_OUT_DEPTH 32 + +/* Type of input pixel values */ +#define SNES_NTSC_IN_T unsigned short + +/* Each raw pixel input value is passed through this. You might want to mask +the pixel index if you use the high bits as flags, etc. */ +#define SNES_NTSC_ADJ_IN( in ) in + +/* For each pixel, this is the basic operation: +output_color = SNES_NTSC_ADJ_IN( SNES_NTSC_IN_T ) */ + +#endif diff --git a/snesfilter/ntsc/snes_ntsc/snes_ntsc_impl.h b/snesfilter/ntsc/snes_ntsc/snes_ntsc_impl.h new file mode 100644 index 00000000..1d7adc78 --- /dev/null +++ b/snesfilter/ntsc/snes_ntsc/snes_ntsc_impl.h @@ -0,0 +1,439 @@ +/* snes_ntsc 0.2.2. http://www.slack.net/~ant/ */ + +/* Common implementation of NTSC filters */ + +#include +#include + +/* Copyright (C) 2006 Shay Green. This module is free software; you +can redistribute it and/or modify it under the terms of the GNU Lesser +General Public License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. This +module is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +details. You should have received a copy of the GNU Lesser General Public +License along with this module; if not, write to the Free Software Foundation, +Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ + +#define DISABLE_CORRECTION 0 + +#undef PI +#define PI 3.14159265358979323846f + +#ifndef LUMA_CUTOFF + #define LUMA_CUTOFF 0.20 +#endif +#ifndef gamma_size + #define gamma_size 1 +#endif +#ifndef rgb_bits + #define rgb_bits 8 +#endif +#ifndef artifacts_max + #define artifacts_max (artifacts_mid * 1.5f) +#endif +#ifndef fringing_max + #define fringing_max (fringing_mid * 2) +#endif +#ifndef STD_HUE_CONDITION + #define STD_HUE_CONDITION( setup ) 1 +#endif + +#define ext_decoder_hue (std_decoder_hue + 15) +#define rgb_unit (1 << rgb_bits) +#define rgb_offset (rgb_unit * 2 + 0.5f) + +enum { burst_size = snes_ntsc_entry_size / burst_count }; +enum { kernel_half = 16 }; +enum { kernel_size = kernel_half * 2 + 1 }; + +typedef struct init_t +{ + float to_rgb [burst_count * 6]; + float to_float [gamma_size]; + float contrast; + float brightness; + float artifacts; + float fringing; + float kernel [rescale_out * kernel_size * 2]; +} init_t; + +#define ROTATE_IQ( i, q, sin_b, cos_b ) {\ + float t;\ + t = i * cos_b - q * sin_b;\ + q = i * sin_b + q * cos_b;\ + i = t;\ +} + +static void init_filters( init_t* impl, snes_ntsc_setup_t const* setup ) +{ +#if rescale_out > 1 + float kernels [kernel_size * 2]; +#else + float* const kernels = impl->kernel; +#endif + + /* generate luma (y) filter using sinc kernel */ + { + /* sinc with rolloff (dsf) */ + float const rolloff = 1 + (float) setup->sharpness * (float) 0.032; + float const maxh = 32; + float const pow_a_n = (float) pow( rolloff, maxh ); + float sum; + int i; + /* quadratic mapping to reduce negative (blurring) range */ + float to_angle = (float) setup->resolution + 1; + to_angle = PI / maxh * (float) LUMA_CUTOFF * (to_angle * to_angle + 1); + + kernels [kernel_size * 3 / 2] = maxh; /* default center value */ + for ( i = 0; i < kernel_half * 2 + 1; i++ ) + { + int x = i - kernel_half; + float angle = x * to_angle; + /* instability occurs at center point with rolloff very close to 1.0 */ + if ( x || pow_a_n > (float) 1.056 || pow_a_n < (float) 0.981 ) + { + float rolloff_cos_a = rolloff * (float) cos( angle ); + float num = 1 - rolloff_cos_a - + pow_a_n * (float) cos( maxh * angle ) + + pow_a_n * rolloff * (float) cos( (maxh - 1) * angle ); + float den = 1 - rolloff_cos_a - rolloff_cos_a + rolloff * rolloff; + float dsf = num / den; + kernels [kernel_size * 3 / 2 - kernel_half + i] = dsf - (float) 0.5; + } + } + + /* apply blackman window and find sum */ + sum = 0; + for ( i = 0; i < kernel_half * 2 + 1; i++ ) + { + float x = PI * 2 / (kernel_half * 2) * i; + float blackman = 0.42f - 0.5f * (float) cos( x ) + 0.08f * (float) cos( x * 2 ); + sum += (kernels [kernel_size * 3 / 2 - kernel_half + i] *= blackman); + } + + /* normalize kernel */ + sum = 1.0f / sum; + for ( i = 0; i < kernel_half * 2 + 1; i++ ) + { + int x = kernel_size * 3 / 2 - kernel_half + i; + kernels [x] *= sum; + assert( kernels [x] == kernels [x] ); /* catch numerical instability */ + } + } + + /* generate chroma (iq) filter using gaussian kernel */ + { + float const cutoff_factor = -0.03125f; + float cutoff = (float) setup->bleed; + int i; + + if ( cutoff < 0 ) + { + /* keep extreme value accessible only near upper end of scale (1.0) */ + cutoff *= cutoff; + cutoff *= cutoff; + cutoff *= cutoff; + cutoff *= -30.0f / 0.65f; + } + cutoff = cutoff_factor - 0.65f * cutoff_factor * cutoff; + + for ( i = -kernel_half; i <= kernel_half; i++ ) + kernels [kernel_size / 2 + i] = (float) exp( i * i * cutoff ); + + /* normalize even and odd phases separately */ + for ( i = 0; i < 2; i++ ) + { + float sum = 0; + int x; + for ( x = i; x < kernel_size; x += 2 ) + sum += kernels [x]; + + sum = 1.0f / sum; + for ( x = i; x < kernel_size; x += 2 ) + { + kernels [x] *= sum; + assert( kernels [x] == kernels [x] ); /* catch numerical instability */ + } + } + } + + /* + printf( "luma:\n" ); + for ( i = kernel_size; i < kernel_size * 2; i++ ) + printf( "%f\n", kernels [i] ); + printf( "chroma:\n" ); + for ( i = 0; i < kernel_size; i++ ) + printf( "%f\n", kernels [i] ); + */ + + /* generate linear rescale kernels */ + #if rescale_out > 1 + { + float weight = 1.0f; + float* out = impl->kernel; + int n = rescale_out; + do + { + float remain = 0; + int i; + weight -= 1.0f / rescale_in; + for ( i = 0; i < kernel_size * 2; i++ ) + { + float cur = kernels [i]; + float m = cur * weight; + *out++ = m + remain; + remain = cur - m; + } + } + while ( --n ); + } + #endif +} + +static float const default_decoder [6] = + { 0.956f, 0.621f, -0.272f, -0.647f, -1.105f, 1.702f }; + +static void init( init_t* impl, snes_ntsc_setup_t const* setup ) +{ + impl->brightness = (float) setup->brightness * (0.5f * rgb_unit) + rgb_offset; + impl->contrast = (float) setup->contrast * (0.5f * rgb_unit) + rgb_unit; + #ifdef default_palette_contrast + if ( !setup->palette ) + impl->contrast *= default_palette_contrast; + #endif + + impl->artifacts = (float) setup->artifacts; + if ( impl->artifacts > 0 ) + impl->artifacts *= artifacts_max - artifacts_mid; + impl->artifacts = impl->artifacts * artifacts_mid + artifacts_mid; + + impl->fringing = (float) setup->fringing; + if ( impl->fringing > 0 ) + impl->fringing *= fringing_max - fringing_mid; + impl->fringing = impl->fringing * fringing_mid + fringing_mid; + + init_filters( impl, setup ); + + /* generate gamma table */ + if ( gamma_size > 1 ) + { + float const to_float = 1.0f / (gamma_size - (gamma_size > 1)); + float const gamma = 1.1333f - (float) setup->gamma * 0.5f; + /* match common PC's 2.2 gamma to TV's 2.65 gamma */ + int i; + for ( i = 0; i < gamma_size; i++ ) + impl->to_float [i] = + (float) pow( i * to_float, gamma ) * impl->contrast + impl->brightness; + } + + /* setup decoder matricies */ + { + float hue = (float) setup->hue * PI + PI / 180 * ext_decoder_hue; + float sat = (float) setup->saturation + 1; + float const* decoder = setup->decoder_matrix; + if ( !decoder ) + { + decoder = default_decoder; + if ( STD_HUE_CONDITION( setup ) ) + hue += PI / 180 * (std_decoder_hue - ext_decoder_hue); + } + + { + float s = (float) sin( hue ) * sat; + float c = (float) cos( hue ) * sat; + float* out = impl->to_rgb; + int n; + + n = burst_count; + do + { + float const* in = decoder; + int n = 3; + do + { + float i = *in++; + float q = *in++; + *out++ = i * c - q * s; + *out++ = i * s + q * c; + } + while ( --n ); + if ( burst_count <= 1 ) + break; + ROTATE_IQ( s, c, 0.866025f, -0.5f ); /* +120 degrees */ + } + while ( --n ); + } + } +} + +/* kernel generation */ + +#define RGB_TO_YIQ( r, g, b, y, i ) (\ + (y = (r) * 0.299f + (g) * 0.587f + (b) * 0.114f),\ + (i = (r) * 0.596f - (g) * 0.275f - (b) * 0.321f),\ + ((r) * 0.212f - (g) * 0.523f + (b) * 0.311f)\ +) + +#define YIQ_TO_RGB( y, i, q, to_rgb, type, r, g ) (\ + r = (type) (y + to_rgb [0] * i + to_rgb [1] * q),\ + g = (type) (y + to_rgb [2] * i + to_rgb [3] * q),\ + (type) (y + to_rgb [4] * i + to_rgb [5] * q)\ +) + +#define PACK_RGB( r, g, b ) ((r) << 21 | (g) << 11 | (b) << 1) + +enum { rgb_kernel_size = burst_size / alignment_count }; +enum { rgb_bias = rgb_unit * 2 * snes_ntsc_rgb_builder }; + +typedef struct pixel_info_t +{ + int offset; + float negate; + float kernel [4]; +} pixel_info_t; + +#if rescale_in > 1 + #define PIXEL_OFFSET_( ntsc, scaled ) \ + (kernel_size / 2 + ntsc + (scaled != 0) + (rescale_out - scaled) % rescale_out + \ + (kernel_size * 2 * scaled)) + + #define PIXEL_OFFSET( ntsc, scaled ) \ + PIXEL_OFFSET_( ((ntsc) - (scaled) / rescale_out * rescale_in),\ + (((scaled) + rescale_out * 10) % rescale_out) ),\ + (1.0f - (((ntsc) + 100) & 2)) +#else + #define PIXEL_OFFSET( ntsc, scaled ) \ + (kernel_size / 2 + (ntsc) - (scaled)),\ + (1.0f - (((ntsc) + 100) & 2)) +#endif + +extern pixel_info_t const snes_ntsc_pixels [alignment_count]; + +/* Generate pixel at all burst phases and column alignments */ +static void gen_kernel( init_t* impl, float y, float i, float q, snes_ntsc_rgb_t* out ) +{ + /* generate for each scanline burst phase */ + float const* to_rgb = impl->to_rgb; + int burst_remain = burst_count; + y -= rgb_offset; + do + { + /* Encode yiq into *two* composite signals (to allow control over artifacting). + Convolve these with kernels which: filter respective components, apply + sharpening, and rescale horizontally. Convert resulting yiq to rgb and pack + into integer. Based on algorithm by NewRisingSun. */ + pixel_info_t const* pixel = snes_ntsc_pixels; + int alignment_remain = alignment_count; + do + { + /* negate is -1 when composite starts at odd multiple of 2 */ + float const yy = y * impl->fringing * pixel->negate; + float const ic0 = (i + yy) * pixel->kernel [0]; + float const qc1 = (q + yy) * pixel->kernel [1]; + float const ic2 = (i - yy) * pixel->kernel [2]; + float const qc3 = (q - yy) * pixel->kernel [3]; + + float const factor = impl->artifacts * pixel->negate; + float const ii = i * factor; + float const yc0 = (y + ii) * pixel->kernel [0]; + float const yc2 = (y - ii) * pixel->kernel [2]; + + float const qq = q * factor; + float const yc1 = (y + qq) * pixel->kernel [1]; + float const yc3 = (y - qq) * pixel->kernel [3]; + + float const* k = &impl->kernel [pixel->offset]; + int n; + ++pixel; + for ( n = rgb_kernel_size; n; --n ) + { + float i = k[0]*ic0 + k[2]*ic2; + float q = k[1]*qc1 + k[3]*qc3; + float y = k[kernel_size+0]*yc0 + k[kernel_size+1]*yc1 + + k[kernel_size+2]*yc2 + k[kernel_size+3]*yc3 + rgb_offset; + if ( rescale_out <= 1 ) + k--; + else if ( k < &impl->kernel [kernel_size * 2 * (rescale_out - 1)] ) + k += kernel_size * 2 - 1; + else + k -= kernel_size * 2 * (rescale_out - 1) + 2; + { + int r, g, b = YIQ_TO_RGB( y, i, q, to_rgb, int, r, g ); + *out++ = PACK_RGB( r, g, b ) - rgb_bias; + } + } + } + while ( alignment_count > 1 && --alignment_remain ); + + if ( burst_count <= 1 ) + break; + + to_rgb += 6; + + ROTATE_IQ( i, q, -0.866025f, -0.5f ); /* -120 degrees */ + } + while ( --burst_remain ); +} + +static void correct_errors( snes_ntsc_rgb_t color, snes_ntsc_rgb_t* out ); + +#if DISABLE_CORRECTION + #define CORRECT_ERROR( a ) { out [i] += rgb_bias; } + #define DISTRIBUTE_ERROR( a, b, c ) { out [i] += rgb_bias; } +#else + #define CORRECT_ERROR( a ) { out [a] += error; } + #define DISTRIBUTE_ERROR( a, b, c ) {\ + snes_ntsc_rgb_t fourth = (error + 2 * snes_ntsc_rgb_builder) >> 2;\ + fourth &= (rgb_bias >> 1) - snes_ntsc_rgb_builder;\ + fourth -= rgb_bias >> 2;\ + out [a] += fourth;\ + out [b] += fourth;\ + out [c] += fourth;\ + out [i] += error - (fourth * 3);\ + } +#endif + +#define RGB_PALETTE_OUT( rgb, out_ )\ +{\ + unsigned char* out = (out_);\ + snes_ntsc_rgb_t clamped = (rgb);\ + SNES_NTSC_CLAMP_( clamped, (8 - rgb_bits) );\ + out [0] = (unsigned char) (clamped >> 21);\ + out [1] = (unsigned char) (clamped >> 11);\ + out [2] = (unsigned char) (clamped >> 1);\ +} + +/* blitter related */ + +#ifndef restrict + #if defined (__GNUC__) + #define restrict __restrict__ + #elif defined (_MSC_VER) && _MSC_VER > 1300 + #define restrict __restrict + #else + /* no support for restricted pointers */ + #define restrict + #endif +#endif + +#include + +#if SNES_NTSC_OUT_DEPTH <= 16 + #if USHRT_MAX == 0xFFFF + typedef unsigned short snes_ntsc_out_t; + #else + #error "Need 16-bit int type" + #endif + +#else + #if UINT_MAX == 0xFFFFFFFF + typedef unsigned int snes_ntsc_out_t; + #elif ULONG_MAX == 0xFFFFFFFF + typedef unsigned long snes_ntsc_out_t; + #else + #error "Need 32-bit int type" + #endif + +#endif diff --git a/snesfilter/pixellate2x/pixellate2x.cpp b/snesfilter/pixellate2x/pixellate2x.cpp new file mode 100644 index 00000000..6259efc0 --- /dev/null +++ b/snesfilter/pixellate2x/pixellate2x.cpp @@ -0,0 +1,39 @@ +#include "pixellate2x.hpp" + +void Pixellate2xFilter::size(unsigned &outwidth, unsigned &outheight, unsigned width, unsigned height) { + outwidth = (width <= 256) ? width * 2 : width; + outheight = (height <= 240) ? height * 2 : height; +} + +void Pixellate2xFilter::render( + uint32_t *output, unsigned outpitch, const uint16_t *input, unsigned pitch, + const unsigned *line, unsigned width, unsigned height +) { + pitch >>= 1; + outpitch >>= 2; + + uint32_t *out0 = output; + uint32_t *out1 = output + outpitch; + + for(unsigned y = 0; y < height; y++) { + unsigned linewidth = line[y]; + for(unsigned x = 0; x < linewidth; x++) { + uint32_t p = colortable[*input++]; + + *out0++ = p; + if(height <= 240) *out1++ = p; + if(linewidth > 256) continue; + + *out0++ = p; + if(height <= 240) *out1++ = p; + } + + input += pitch - linewidth; + if(height <= 240) { + out0 += outpitch + outpitch - 512; + out1 += outpitch + outpitch - 512; + } else { + out0 += outpitch - 512; + } + } +} diff --git a/snesfilter/pixellate2x/pixellate2x.hpp b/snesfilter/pixellate2x/pixellate2x.hpp new file mode 100644 index 00000000..4e597e4b --- /dev/null +++ b/snesfilter/pixellate2x/pixellate2x.hpp @@ -0,0 +1,5 @@ +class Pixellate2xFilter { +public: + void size(unsigned&, unsigned&, unsigned, unsigned); + void render(uint32_t*, unsigned, const uint16_t*, unsigned, const unsigned*, unsigned, unsigned); +} filter_pixellate2x; diff --git a/snesfilter/scale2x/scale2x.cpp b/snesfilter/scale2x/scale2x.cpp new file mode 100644 index 00000000..f1915ab3 --- /dev/null +++ b/snesfilter/scale2x/scale2x.cpp @@ -0,0 +1,61 @@ +#include "scale2x.hpp" + +void Scale2xFilter::size(unsigned &outwidth, unsigned &outheight, unsigned width, unsigned height) { + if(height > 240) return filter_direct.size(outwidth, outheight, width, height); + outwidth = (width <= 256) ? width * 2 : width; + outheight = (height <= 240) ? height * 2 : height; +} + +void Scale2xFilter::render( + uint32_t *output, unsigned outpitch, const uint16_t *input, unsigned pitch, + const unsigned *line, unsigned width, unsigned height +) { + if(height > 240) { + filter_direct.render(output, outpitch, input, pitch, line, width, height); + return; + } + + pitch >>= 1; + outpitch >>= 2; + + uint32_t *out0 = output; + uint32_t *out1 = output + outpitch; + + for(unsigned y = 0; y < height; y++) { + unsigned linewidth = line[y]; + + if(linewidth == 256) { + int prevline = (y == 0) || (linewidth != line[y - 1]) ? 0 : pitch; + int nextline = (y == height - 1) || (linewidth != line[y + 1]) ? 0 : pitch; + + for(unsigned x = 0; x < 256; x++) { + uint16_t A = *(input - prevline); + uint16_t B = (x > 0) ? *(input - 1) : *input; + uint16_t C = *input; + uint16_t D = (x < 255) ? *(input + 1) : *input; + uint16_t E = *(input++ + nextline); + uint32_t c = colortable[C]; + + if(A != E && B != D) { + *out0++ = (A == B ? colortable[A] : c); + *out0++ = (A == D ? colortable[A] : c); + *out1++ = (E == B ? colortable[E] : c); + *out1++ = (E == D ? colortable[E] : c); + } else { + *out0++ = c; + *out0++ = c; + *out1++ = c; + *out1++ = c; + } + } + } else { + for(unsigned x = 0; x < 512; x++) { + *out0++ = *out1++ = colortable[*input++]; + } + } + + input += pitch - linewidth; + out0 += outpitch + outpitch - 512; + out1 += outpitch + outpitch - 512; + } +} diff --git a/snesfilter/scale2x/scale2x.hpp b/snesfilter/scale2x/scale2x.hpp new file mode 100644 index 00000000..fad44e6a --- /dev/null +++ b/snesfilter/scale2x/scale2x.hpp @@ -0,0 +1,5 @@ +class Scale2xFilter { +public: + void size(unsigned&, unsigned&, unsigned, unsigned); + void render(uint32_t*, unsigned, const uint16_t*, unsigned, const unsigned*, unsigned, unsigned); +} filter_scale2x; diff --git a/snesfilter/snesfilter.cpp b/snesfilter/snesfilter.cpp new file mode 100644 index 00000000..b73b9072 --- /dev/null +++ b/snesfilter/snesfilter.cpp @@ -0,0 +1,84 @@ +#include "snesfilter.hpp" + +#if defined(_WIN32) + #define dllexport __declspec(dllexport) +#else + #define dllexport +#endif + +#include +#include +#include + +#define QT_CORE_LIB +#include + +#include +#include +#include +using namespace nall; + +const uint32_t *colortable; +configuration *config; + +#include "direct/direct.cpp" +#include "pixellate2x/pixellate2x.cpp" +#include "scale2x/scale2x.cpp" +#include "2xsai/2xsai.cpp" +#include "lq2x/lq2x.cpp" +#include "hq2x/hq2x.cpp" +#include "ntsc/ntsc.cpp" + +dllexport const char* snesfilter_supported() { + return "Pixellate2x;Scale2x;2xSaI;Super 2xSaI;Super Eagle;LQ2x;HQ2x;NTSC"; +} + +dllexport void snesfilter_configuration(configuration &config_) { + config = &config_; + if(config) { + filter_ntsc.bind(*config); + } +} + +dllexport void snesfilter_colortable(const uint32_t *colortable_) { + colortable = colortable_; +} + +dllexport void snesfilter_size(unsigned filter, unsigned &outwidth, unsigned &outheight, unsigned width, unsigned height) { + switch(filter) { + default: return filter_direct.size(outwidth, outheight, width, height); + case 1: return filter_pixellate2x.size(outwidth, outheight, width, height); + case 2: return filter_scale2x.size(outwidth, outheight, width, height); + case 3: return filter_2xsai.size(outwidth, outheight, width, height); + case 4: return filter_super2xsai.size(outwidth, outheight, width, height); + case 5: return filter_supereagle.size(outwidth, outheight, width, height); + case 6: return filter_lq2x.size(outwidth, outheight, width, height); + case 7: return filter_hq2x.size(outwidth, outheight, width, height); + case 8: return filter_ntsc.size(outwidth, outheight, width, height); + } +} + +dllexport void snesfilter_render( + unsigned filter, uint32_t *output, unsigned outpitch, + const uint16_t *input, unsigned pitch, + const unsigned *line, unsigned width, unsigned height +) { + switch(filter) { + default: return filter_direct.render(output, outpitch, input, pitch, line, width, height); + case 1: return filter_pixellate2x.render(output, outpitch, input, pitch, line, width, height); + case 2: return filter_scale2x.render(output, outpitch, input, pitch, line, width, height); + case 3: return filter_2xsai.render(output, outpitch, input, pitch, line, width, height); + case 4: return filter_super2xsai.render(output, outpitch, input, pitch, line, width, height); + case 5: return filter_supereagle.render(output, outpitch, input, pitch, line, width, height); + case 6: return filter_lq2x.render(output, outpitch, input, pitch, line, width, height); + case 7: return filter_hq2x.render(output, outpitch, input, pitch, line, width, height); + case 8: return filter_ntsc.render(output, outpitch, input, pitch, line, width, height); + } +} + +dllexport QWidget* snesfilter_settings(unsigned filter) { + switch(filter) { + default: return 0; + case 8: return filter_ntsc.settings(); + } +} diff --git a/snesfilter/snesfilter.hpp b/snesfilter/snesfilter.hpp new file mode 100644 index 00000000..15a5ba4a --- /dev/null +++ b/snesfilter/snesfilter.hpp @@ -0,0 +1,16 @@ +#include +class QWidget; +namespace nall { class configuration; } + +extern "C" { + const char* snesfilter_supported(); + void snesfilter_configuration(nall::configuration&); + void snesfilter_colortable(const uint32_t*); + void snesfilter_size(unsigned, unsigned&, unsigned&, unsigned, unsigned); + void snesfilter_render( + unsigned, uint32_t*, unsigned, + const uint16_t*, unsigned, + const unsigned*, unsigned, unsigned + ); + QWidget* snesfilter_settings(unsigned); +} diff --git a/snesfilter/sync.sh b/snesfilter/sync.sh new file mode 100644 index 00000000..4bbaf34f --- /dev/null +++ b/snesfilter/sync.sh @@ -0,0 +1,2 @@ +rm -r nall +cp -r ../nall ./nall diff --git a/snesreader.dll b/snesreader.dll new file mode 100644 index 0000000000000000000000000000000000000000..9f70ee966df0370282883f7c30a80634530afe29 GIT binary patch literal 759348 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
tn$3>@x^6p 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 z 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

$y3Uh8c~jiB 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%0AHYm~#KbI>N6N2p2|Hn7 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�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 literal 0 HcmV?d00001 diff --git a/snesreader/7z_C/7zAlloc.c b/snesreader/7z_C/7zAlloc.c new file mode 100644 index 00000000..4bfaf42a --- /dev/null +++ b/snesreader/7z_C/7zAlloc.c @@ -0,0 +1,77 @@ +/* 7zAlloc.c -- Allocation functions +2008-10-04 : Igor Pavlov : Public domain */ + +#include +#include "7zAlloc.h" + +/* #define _SZ_ALLOC_DEBUG */ +/* use _SZ_ALLOC_DEBUG to debug alloc/free operations */ + +#ifdef _SZ_ALLOC_DEBUG + +#ifdef _WIN32 +#include +#endif + +#include +int g_allocCount = 0; +int g_allocCountTemp = 0; + +#endif + +void *SzAlloc(void *p, size_t size) +{ + p = p; + if (size == 0) + return 0; + #ifdef _SZ_ALLOC_DEBUG + fprintf(stderr, "\nAlloc %10d bytes; count = %10d", size, g_allocCount); + g_allocCount++; + #endif + return malloc(size); +} + +void SzFree(void *p, void *address) +{ + p = p; + #ifdef _SZ_ALLOC_DEBUG + if (address != 0) + { + g_allocCount--; + fprintf(stderr, "\nFree; count = %10d", g_allocCount); + } + #endif + free(address); +} + +void *SzAllocTemp(void *p, size_t size) +{ + p = p; + if (size == 0) + return 0; + #ifdef _SZ_ALLOC_DEBUG + fprintf(stderr, "\nAlloc_temp %10d bytes; count = %10d", size, g_allocCountTemp); + g_allocCountTemp++; + #ifdef _WIN32 + return HeapAlloc(GetProcessHeap(), 0, size); + #endif + #endif + return malloc(size); +} + +void SzFreeTemp(void *p, void *address) +{ + p = p; + #ifdef _SZ_ALLOC_DEBUG + if (address != 0) + { + g_allocCountTemp--; + fprintf(stderr, "\nFree_temp; count = %10d", g_allocCountTemp); + } + #ifdef _WIN32 + HeapFree(GetProcessHeap(), 0, address); + return; + #endif + #endif + free(address); +} diff --git a/snesreader/7z_C/7zAlloc.h b/snesreader/7z_C/7zAlloc.h new file mode 100644 index 00000000..f84ca5ae --- /dev/null +++ b/snesreader/7z_C/7zAlloc.h @@ -0,0 +1,23 @@ +/* 7zAlloc.h -- Allocation functions +2008-10-04 : Igor Pavlov : Public domain */ + +#ifndef __7Z_ALLOC_H +#define __7Z_ALLOC_H + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +void *SzAlloc(void *p, size_t size); +void SzFree(void *p, void *address); + +void *SzAllocTemp(void *p, size_t size); +void SzFreeTemp(void *p, void *address); + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/snesreader/7z_C/7zBuf.c b/snesreader/7z_C/7zBuf.c new file mode 100644 index 00000000..14e7f4e2 --- /dev/null +++ b/snesreader/7z_C/7zBuf.c @@ -0,0 +1,36 @@ +/* 7zBuf.c -- Byte Buffer +2008-03-28 +Igor Pavlov +Public domain */ + +#include "7zBuf.h" + +void Buf_Init(CBuf *p) +{ + p->data = 0; + p->size = 0; +} + +int Buf_Create(CBuf *p, size_t size, ISzAlloc *alloc) +{ + p->size = 0; + if (size == 0) + { + p->data = 0; + return 1; + } + p->data = (Byte *)alloc->Alloc(alloc, size); + if (p->data != 0) + { + p->size = size; + return 1; + } + return 0; +} + +void Buf_Free(CBuf *p, ISzAlloc *alloc) +{ + alloc->Free(alloc, p->data); + p->data = 0; + p->size = 0; +} diff --git a/snesreader/7z_C/7zBuf.h b/snesreader/7z_C/7zBuf.h new file mode 100644 index 00000000..c5bd7187 --- /dev/null +++ b/snesreader/7z_C/7zBuf.h @@ -0,0 +1,31 @@ +/* 7zBuf.h -- Byte Buffer +2008-10-04 : Igor Pavlov : Public domain */ + +#ifndef __7Z_BUF_H +#define __7Z_BUF_H + +#include "Types.h" + +typedef struct +{ + Byte *data; + size_t size; +} CBuf; + +void Buf_Init(CBuf *p); +int Buf_Create(CBuf *p, size_t size, ISzAlloc *alloc); +void Buf_Free(CBuf *p, ISzAlloc *alloc); + +typedef struct +{ + Byte *data; + size_t size; + size_t pos; +} CDynBuf; + +void DynBuf_Construct(CDynBuf *p); +void DynBuf_SeekToBeg(CDynBuf *p); +int DynBuf_Write(CDynBuf *p, const Byte *buf, size_t size, ISzAlloc *alloc); +void DynBuf_Free(CDynBuf *p, ISzAlloc *alloc); + +#endif diff --git a/snesreader/7z_C/7zC.txt b/snesreader/7z_C/7zC.txt new file mode 100644 index 00000000..4ff63250 --- /dev/null +++ b/snesreader/7z_C/7zC.txt @@ -0,0 +1,194 @@ +7z ANSI-C Decoder 4.62 +---------------------- + +7z ANSI-C provides 7z/LZMA decoding. +7z ANSI-C version is simplified version ported from C++ code. + +LZMA is default and general compression method of 7z format +in 7-Zip compression program (www.7-zip.org). LZMA provides high +compression ratio and very fast decompression. + + +LICENSE +------- + +7z ANSI-C Decoder is part of the LZMA SDK. +LZMA SDK is written and placed in the public domain by Igor Pavlov. + +Files +--------------------- + +7zDecode.* - Low level 7z decoding +7zExtract.* - High level 7z decoding +7zHeader.* - .7z format constants +7zIn.* - .7z archive opening +7zItem.* - .7z structures +7zMain.c - Test application + + +How To Use +---------- + +You must download 7-Zip program from www.7-zip.org. + +You can create .7z archive with 7z.exe or 7za.exe: + + 7za.exe a archive.7z *.htm -r -mx -m0fb=255 + +If you have big number of files in archive, and you need fast extracting, +you can use partly-solid archives: + + 7za.exe a archive.7z *.htm -ms=512K -r -mx -m0fb=255 -m0d=512K + +In that example 7-Zip will use 512KB solid blocks. So it needs to decompress only +512KB for extracting one file from such archive. + + +Limitations of current version of 7z ANSI-C Decoder +--------------------------------------------------- + + - It reads only "FileName", "Size", "LastWriteTime" and "CRC" information for each file in archive. + - It supports only LZMA and Copy (no compression) methods with BCJ or BCJ2 filters. + - It converts original UTF-16 Unicode file names to UTF-8 Unicode file names. + +These limitations will be fixed in future versions. + + +Using 7z ANSI-C Decoder Test application: +----------------------------------------- + +Usage: 7zDec + +: + e: Extract files from archive + l: List contents of archive + t: Test integrity of archive + +Example: + + 7zDec l archive.7z + +lists contents of archive.7z + + 7zDec e archive.7z + +extracts files from archive.7z to current folder. + + +How to use .7z Decoder +---------------------- + +Memory allocation +~~~~~~~~~~~~~~~~~ + +7z Decoder uses two memory pools: +1) Temporary pool +2) Main pool +Such scheme can allow you to avoid fragmentation of allocated blocks. + + +Steps for using 7z decoder +-------------------------- + +Use code at 7zMain.c as example. + +1) Declare variables: + inStream /* implements ILookInStream interface */ + CSzArEx db; /* 7z archive database structure */ + ISzAlloc allocImp; /* memory functions for main pool */ + ISzAlloc allocTempImp; /* memory functions for temporary pool */ + +2) call CrcGenerateTable(); function to initialize CRC structures. + +3) call SzArEx_Init(&db); function to initialize db structures. + +4) call SzArEx_Open(&db, inStream, &allocMain, &allocTemp) to open archive + +This function opens archive "inStream" and reads headers to "db". +All items in "db" will be allocated with "allocMain" functions. +SzArEx_Open function allocates and frees temporary structures by "allocTemp" functions. + +5) List items or Extract items + + Listing code: + ~~~~~~~~~~~~~ + { + UInt32 i; + for (i = 0; i < db.db.NumFiles; i++) + { + CFileItem *f = db.db.Files + i; + printf("%10d %s\n", (int)f->Size, f->Name); + } + } + + Extracting code: + ~~~~~~~~~~~~~~~~ + + SZ_RESULT SzAr_Extract( + CArchiveDatabaseEx *db, + ILookInStream *inStream, + UInt32 fileIndex, /* index of file */ + UInt32 *blockIndex, /* index of solid block */ + Byte **outBuffer, /* pointer to pointer to output buffer (allocated with allocMain) */ + size_t *outBufferSize, /* buffer size for output buffer */ + size_t *offset, /* offset of stream for required file in *outBuffer */ + size_t *outSizeProcessed, /* size of file in *outBuffer */ + ISzAlloc *allocMain, + ISzAlloc *allocTemp); + + If you need to decompress more than one file, you can send these values from previous call: + blockIndex, + outBuffer, + outBufferSize, + You can consider "outBuffer" as cache of solid block. If your archive is solid, + it will increase decompression speed. + + After decompressing you must free "outBuffer": + allocImp.Free(outBuffer); + +6) call SzArEx_Free(&db, allocImp.Free) to free allocated items in "db". + + + + +Memory requirements for .7z decoding +------------------------------------ + +Memory usage for Archive opening: + - Temporary pool: + - Memory for uncompressed .7z headers + - some other temporary blocks + - Main pool: + - Memory for database: + Estimated size of one file structures in solid archive: + - Size (4 or 8 Bytes) + - CRC32 (4 bytes) + - LastWriteTime (8 bytes) + - Some file information (4 bytes) + - File Name (variable length) + pointer + allocation structures + +Memory usage for archive Decompressing: + - Temporary pool: + - Memory for LZMA decompressing structures + - Main pool: + - Memory for decompressed solid block + - Memory for temprorary buffers, if BCJ2 fileter is used. Usually these + temprorary buffers can be about 15% of solid block size. + + +7z Decoder doesn't allocate memory for compressed blocks. +Instead of this, you must allocate buffer with desired +size before calling 7z Decoder. Use 7zMain.c as example. + + +Defines +------- + +_SZ_ALLOC_DEBUG - define it if you want to debug alloc/free operations to stderr. + + +--- + +http://www.7-zip.org +http://www.7-zip.org/sdk.html +http://www.7-zip.org/support.html diff --git a/snesreader/7z_C/7zCrc.c b/snesreader/7z_C/7zCrc.c new file mode 100644 index 00000000..71962b2c --- /dev/null +++ b/snesreader/7z_C/7zCrc.c @@ -0,0 +1,35 @@ +/* 7zCrc.c -- CRC32 calculation +2008-08-05 +Igor Pavlov +Public domain */ + +#include "7zCrc.h" + +#define kCrcPoly 0xEDB88320 +UInt32 g_CrcTable[256]; + +void MY_FAST_CALL CrcGenerateTable(void) +{ + UInt32 i; + for (i = 0; i < 256; i++) + { + UInt32 r = i; + int j; + for (j = 0; j < 8; j++) + r = (r >> 1) ^ (kCrcPoly & ~((r & 1) - 1)); + g_CrcTable[i] = r; + } +} + +UInt32 MY_FAST_CALL CrcUpdate(UInt32 v, const void *data, size_t size) +{ + const Byte *p = (const Byte *)data; + for (; size > 0 ; size--, p++) + v = CRC_UPDATE_BYTE(v, *p); + return v; +} + +UInt32 MY_FAST_CALL CrcCalc(const void *data, size_t size) +{ + return CrcUpdate(CRC_INIT_VAL, data, size) ^ 0xFFFFFFFF; +} diff --git a/snesreader/7z_C/7zCrc.h b/snesreader/7z_C/7zCrc.h new file mode 100644 index 00000000..ab8cf8c4 --- /dev/null +++ b/snesreader/7z_C/7zCrc.h @@ -0,0 +1,32 @@ +/* 7zCrc.h -- CRC32 calculation +2008-03-13 +Igor Pavlov +Public domain */ + +#ifndef __7Z_CRC_H +#define __7Z_CRC_H + +#include + +#include "Types.h" + +#ifdef __cplusplus + extern "C" { +#endif + +extern UInt32 g_CrcTable[]; + +void MY_FAST_CALL CrcGenerateTable(void); + +#define CRC_INIT_VAL 0xFFFFFFFF +#define CRC_GET_DIGEST(crc) ((crc) ^ 0xFFFFFFFF) +#define CRC_UPDATE_BYTE(crc, b) (g_CrcTable[((crc) ^ (b)) & 0xFF] ^ ((crc) >> 8)) + +UInt32 MY_FAST_CALL CrcUpdate(UInt32 crc, const void *data, size_t size); +UInt32 MY_FAST_CALL CrcCalc(const void *data, size_t size); + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/snesreader/7z_C/7zDecode.c b/snesreader/7z_C/7zDecode.c new file mode 100644 index 00000000..c643da5f --- /dev/null +++ b/snesreader/7z_C/7zDecode.c @@ -0,0 +1,257 @@ +/* 7zDecode.c -- Decoding from 7z folder +2008-11-23 : Igor Pavlov : Public domain */ + +#include + +#include "Bcj2.h" +#include "Bra.h" +#include "LzmaDec.h" +#include "7zDecode.h" + +#define k_Copy 0 +#define k_LZMA 0x30101 +#define k_BCJ 0x03030103 +#define k_BCJ2 0x0303011B + +static SRes SzDecodeLzma(CSzCoderInfo *coder, UInt64 inSize, ILookInStream *inStream, + Byte *outBuffer, SizeT outSize, ISzAlloc *allocMain) +{ + CLzmaDec state; + SRes res = SZ_OK; + + LzmaDec_Construct(&state); + RINOK(LzmaDec_AllocateProbs(&state, coder->Props.data, (unsigned)coder->Props.size, allocMain)); + state.dic = outBuffer; + state.dicBufSize = outSize; + LzmaDec_Init(&state); + + for (;;) + { + Byte *inBuf = NULL; + size_t lookahead = (1 << 18); + if (lookahead > inSize) + lookahead = (size_t)inSize; + res = inStream->Look((void *)inStream, (void **)&inBuf, &lookahead); + if (res != SZ_OK) + break; + + { + SizeT inProcessed = (SizeT)lookahead, dicPos = state.dicPos; + ELzmaStatus status; + res = LzmaDec_DecodeToDic(&state, outSize, inBuf, &inProcessed, LZMA_FINISH_END, &status); + lookahead -= inProcessed; + inSize -= inProcessed; + if (res != SZ_OK) + break; + if (state.dicPos == state.dicBufSize || (inProcessed == 0 && dicPos == state.dicPos)) + { + if (state.dicBufSize != outSize || lookahead != 0 || + (status != LZMA_STATUS_FINISHED_WITH_MARK && + status != LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK)) + res = SZ_ERROR_DATA; + break; + } + res = inStream->Skip((void *)inStream, inProcessed); + if (res != SZ_OK) + break; + } + } + + LzmaDec_FreeProbs(&state, allocMain); + return res; +} + +static SRes SzDecodeCopy(UInt64 inSize, ILookInStream *inStream, Byte *outBuffer) +{ + while (inSize > 0) + { + void *inBuf; + size_t curSize = (1 << 18); + if (curSize > inSize) + curSize = (size_t)inSize; + RINOK(inStream->Look((void *)inStream, (void **)&inBuf, &curSize)); + if (curSize == 0) + return SZ_ERROR_INPUT_EOF; + memcpy(outBuffer, inBuf, curSize); + outBuffer += curSize; + inSize -= curSize; + RINOK(inStream->Skip((void *)inStream, curSize)); + } + return SZ_OK; +} + +#define IS_UNSUPPORTED_METHOD(m) ((m) != k_Copy && (m) != k_LZMA) +#define IS_UNSUPPORTED_CODER(c) (IS_UNSUPPORTED_METHOD(c.MethodID) || c.NumInStreams != 1 || c.NumOutStreams != 1) +#define IS_NO_BCJ(c) (c.MethodID != k_BCJ || c.NumInStreams != 1 || c.NumOutStreams != 1) +#define IS_NO_BCJ2(c) (c.MethodID != k_BCJ2 || c.NumInStreams != 4 || c.NumOutStreams != 1) + +static +SRes CheckSupportedFolder(const CSzFolder *f) +{ + if (f->NumCoders < 1 || f->NumCoders > 4) + return SZ_ERROR_UNSUPPORTED; + if (IS_UNSUPPORTED_CODER(f->Coders[0])) + return SZ_ERROR_UNSUPPORTED; + if (f->NumCoders == 1) + { + if (f->NumPackStreams != 1 || f->PackStreams[0] != 0 || f->NumBindPairs != 0) + return SZ_ERROR_UNSUPPORTED; + return SZ_OK; + } + if (f->NumCoders == 2) + { + if (IS_NO_BCJ(f->Coders[1]) || + f->NumPackStreams != 1 || f->PackStreams[0] != 0 || + f->NumBindPairs != 1 || + f->BindPairs[0].InIndex != 1 || f->BindPairs[0].OutIndex != 0) + return SZ_ERROR_UNSUPPORTED; + return SZ_OK; + } + if (f->NumCoders == 4) + { + if (IS_UNSUPPORTED_CODER(f->Coders[1]) || + IS_UNSUPPORTED_CODER(f->Coders[2]) || + IS_NO_BCJ2(f->Coders[3])) + return SZ_ERROR_UNSUPPORTED; + if (f->NumPackStreams != 4 || + f->PackStreams[0] != 2 || + f->PackStreams[1] != 6 || + f->PackStreams[2] != 1 || + f->PackStreams[3] != 0 || + f->NumBindPairs != 3 || + f->BindPairs[0].InIndex != 5 || f->BindPairs[0].OutIndex != 0 || + f->BindPairs[1].InIndex != 4 || f->BindPairs[1].OutIndex != 1 || + f->BindPairs[2].InIndex != 3 || f->BindPairs[2].OutIndex != 2) + return SZ_ERROR_UNSUPPORTED; + return SZ_OK; + } + return SZ_ERROR_UNSUPPORTED; +} + +static +UInt64 GetSum(const UInt64 *values, UInt32 index) +{ + UInt64 sum = 0; + UInt32 i; + for (i = 0; i < index; i++) + sum += values[i]; + return sum; +} + +static +SRes SzDecode2(const UInt64 *packSizes, const CSzFolder *folder, + ILookInStream *inStream, UInt64 startPos, + Byte *outBuffer, SizeT outSize, ISzAlloc *allocMain, + Byte *tempBuf[]) +{ + UInt32 ci; + SizeT tempSizes[3] = { 0, 0, 0}; + SizeT tempSize3 = 0; + Byte *tempBuf3 = 0; + + RINOK(CheckSupportedFolder(folder)); + + for (ci = 0; ci < folder->NumCoders; ci++) + { + CSzCoderInfo *coder = &folder->Coders[ci]; + + if (coder->MethodID == k_Copy || coder->MethodID == k_LZMA) + { + UInt32 si = 0; + UInt64 offset; + UInt64 inSize; + Byte *outBufCur = outBuffer; + SizeT outSizeCur = outSize; + if (folder->NumCoders == 4) + { + UInt32 indices[] = { 3, 2, 0 }; + UInt64 unpackSize = folder->UnpackSizes[ci]; + si = indices[ci]; + if (ci < 2) + { + Byte *temp; + outSizeCur = (SizeT)unpackSize; + if (outSizeCur != unpackSize) + return SZ_ERROR_MEM; + temp = (Byte *)IAlloc_Alloc(allocMain, outSizeCur); + if (temp == 0 && outSizeCur != 0) + return SZ_ERROR_MEM; + outBufCur = tempBuf[1 - ci] = temp; + tempSizes[1 - ci] = outSizeCur; + } + else if (ci == 2) + { + if (unpackSize > outSize) /* check it */ + return SZ_ERROR_PARAM; + tempBuf3 = outBufCur = outBuffer + (outSize - (size_t)unpackSize); + tempSize3 = outSizeCur = (SizeT)unpackSize; + } + else + return SZ_ERROR_UNSUPPORTED; + } + offset = GetSum(packSizes, si); + inSize = packSizes[si]; + RINOK(LookInStream_SeekTo(inStream, startPos + offset)); + + if (coder->MethodID == k_Copy) + { + if (inSize != outSizeCur) /* check it */ + return SZ_ERROR_DATA; + RINOK(SzDecodeCopy(inSize, inStream, outBufCur)); + } + else + { + RINOK(SzDecodeLzma(coder, inSize, inStream, outBufCur, outSizeCur, allocMain)); + } + } + else if (coder->MethodID == k_BCJ) + { + UInt32 state; + if (ci != 1) + return SZ_ERROR_UNSUPPORTED; + x86_Convert_Init(state); + x86_Convert(outBuffer, outSize, 0, &state, 0); + } + else if (coder->MethodID == k_BCJ2) + { + UInt64 offset = GetSum(packSizes, 1); + UInt64 s3Size = packSizes[1]; + SRes res; + if (ci != 3) + return SZ_ERROR_UNSUPPORTED; + RINOK(LookInStream_SeekTo(inStream, startPos + offset)); + tempSizes[2] = (SizeT)s3Size; + if (tempSizes[2] != s3Size) + return SZ_ERROR_MEM; + tempBuf[2] = (Byte *)IAlloc_Alloc(allocMain, tempSizes[2]); + if (tempBuf[2] == 0 && tempSizes[2] != 0) + return SZ_ERROR_MEM; + res = SzDecodeCopy(s3Size, inStream, tempBuf[2]); + RINOK(res) + + res = Bcj2_Decode( + tempBuf3, tempSize3, + tempBuf[0], tempSizes[0], + tempBuf[1], tempSizes[1], + tempBuf[2], tempSizes[2], + outBuffer, outSize); + RINOK(res) + } + else + return SZ_ERROR_UNSUPPORTED; + } + return SZ_OK; +} + +SRes SzDecode(const UInt64 *packSizes, const CSzFolder *folder, + ILookInStream *inStream, UInt64 startPos, + Byte *outBuffer, size_t outSize, ISzAlloc *allocMain) +{ + Byte *tempBuf[3] = { 0, 0, 0}; + int i; + SRes res = SzDecode2(packSizes, folder, inStream, startPos, + outBuffer, (SizeT)outSize, allocMain, tempBuf); + for (i = 0; i < 3; i++) + IAlloc_Free(allocMain, tempBuf[i]); + return res; +} diff --git a/snesreader/7z_C/7zDecode.h b/snesreader/7z_C/7zDecode.h new file mode 100644 index 00000000..e19fe387 --- /dev/null +++ b/snesreader/7z_C/7zDecode.h @@ -0,0 +1,13 @@ +/* 7zDecode.h -- Decoding from 7z folder +2008-11-23 : Igor Pavlov : Public domain */ + +#ifndef __7Z_DECODE_H +#define __7Z_DECODE_H + +#include "7zItem.h" + +SRes SzDecode(const UInt64 *packSizes, const CSzFolder *folder, + ILookInStream *stream, UInt64 startPos, + Byte *outBuffer, size_t outSize, ISzAlloc *allocMain); + +#endif diff --git a/snesreader/7z_C/7zExtract.c b/snesreader/7z_C/7zExtract.c new file mode 100644 index 00000000..99ef3654 --- /dev/null +++ b/snesreader/7z_C/7zExtract.c @@ -0,0 +1,93 @@ +/* 7zExtract.c -- Extracting from 7z archive +2008-11-23 : Igor Pavlov : Public domain */ + +#include "7zCrc.h" +#include "7zDecode.h" +#include "7zExtract.h" + +SRes SzAr_Extract( + const CSzArEx *p, + ILookInStream *inStream, + UInt32 fileIndex, + UInt32 *blockIndex, + Byte **outBuffer, + size_t *outBufferSize, + size_t *offset, + size_t *outSizeProcessed, + ISzAlloc *allocMain, + ISzAlloc *allocTemp) +{ + UInt32 folderIndex = p->FileIndexToFolderIndexMap[fileIndex]; + SRes res = SZ_OK; + *offset = 0; + *outSizeProcessed = 0; + if (folderIndex == (UInt32)-1) + { + IAlloc_Free(allocMain, *outBuffer); + *blockIndex = folderIndex; + *outBuffer = 0; + *outBufferSize = 0; + return SZ_OK; + } + + if (*outBuffer == 0 || *blockIndex != folderIndex) + { + CSzFolder *folder = p->db.Folders + folderIndex; + UInt64 unpackSizeSpec = SzFolder_GetUnpackSize(folder); + size_t unpackSize = (size_t)unpackSizeSpec; + UInt64 startOffset = SzArEx_GetFolderStreamPos(p, folderIndex, 0); + + if (unpackSize != unpackSizeSpec) + return SZ_ERROR_MEM; + *blockIndex = folderIndex; + IAlloc_Free(allocMain, *outBuffer); + *outBuffer = 0; + + RINOK(LookInStream_SeekTo(inStream, startOffset)); + + if (res == SZ_OK) + { + *outBufferSize = unpackSize; + if (unpackSize != 0) + { + *outBuffer = (Byte *)IAlloc_Alloc(allocMain, unpackSize); + if (*outBuffer == 0) + res = SZ_ERROR_MEM; + } + if (res == SZ_OK) + { + res = SzDecode(p->db.PackSizes + + p->FolderStartPackStreamIndex[folderIndex], folder, + inStream, startOffset, + *outBuffer, unpackSize, allocTemp); + if (res == SZ_OK) + { + if (folder->UnpackCRCDefined) + { + if (CrcCalc(*outBuffer, unpackSize) != folder->UnpackCRC) + res = SZ_ERROR_CRC; + } + } + } + } + } + if (res == SZ_OK) + { + UInt32 i; + CSzFileItem *fileItem = p->db.Files + fileIndex; + *offset = 0; + for (i = p->FolderStartFileIndex[folderIndex]; i < fileIndex; i++) + *offset += (UInt32)p->db.Files[i].Size; + *outSizeProcessed = (size_t)fileItem->Size; + if (*offset + *outSizeProcessed > *outBufferSize) + return SZ_ERROR_FAIL; + { + if (fileItem->FileCRCDefined) + { + if (CrcCalc(*outBuffer + *offset, *outSizeProcessed) != fileItem->FileCRC) + res = SZ_ERROR_CRC; + } + } + } + return res; +} diff --git a/snesreader/7z_C/7zExtract.h b/snesreader/7z_C/7zExtract.h new file mode 100644 index 00000000..1ca110c6 --- /dev/null +++ b/snesreader/7z_C/7zExtract.h @@ -0,0 +1,49 @@ +/* 7zExtract.h -- Extracting from 7z archive +2008-11-23 : Igor Pavlov : Public domain */ + +#ifndef __7Z_EXTRACT_H +#define __7Z_EXTRACT_H + +#include "7zIn.h" + +#ifdef __cplusplus + extern "C" { +#endif + +/* + SzExtract extracts file from archive + + *outBuffer must be 0 before first call for each new archive. + + Extracting cache: + If you need to decompress more than one file, you can send + these values from previous call: + *blockIndex, + *outBuffer, + *outBufferSize + You can consider "*outBuffer" as cache of solid block. If your archive is solid, + it will increase decompression speed. + + If you use external function, you can declare these 3 cache variables + (blockIndex, outBuffer, outBufferSize) as static in that external function. + + Free *outBuffer and set *outBuffer to 0, if you want to flush cache. +*/ + +SRes SzAr_Extract( + const CSzArEx *db, + ILookInStream *inStream, + UInt32 fileIndex, /* index of file */ + UInt32 *blockIndex, /* index of solid block */ + Byte **outBuffer, /* pointer to pointer to output buffer (allocated with allocMain) */ + size_t *outBufferSize, /* buffer size for output buffer */ + size_t *offset, /* offset of stream for required file in *outBuffer */ + size_t *outSizeProcessed, /* size of file in *outBuffer */ + ISzAlloc *allocMain, + ISzAlloc *allocTemp); + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/snesreader/7z_C/7zHeader.c b/snesreader/7z_C/7zHeader.c new file mode 100644 index 00000000..e48faa48 --- /dev/null +++ b/snesreader/7z_C/7zHeader.c @@ -0,0 +1,6 @@ +/* 7zHeader.c -- 7z Headers +2008-10-04 : Igor Pavlov : Public domain */ + +#include "7zHeader.h" + +Byte k7zSignature[k7zSignatureSize] = {'7', 'z', 0xBC, 0xAF, 0x27, 0x1C}; diff --git a/snesreader/7z_C/7zHeader.h b/snesreader/7z_C/7zHeader.h new file mode 100644 index 00000000..ad095df4 --- /dev/null +++ b/snesreader/7z_C/7zHeader.h @@ -0,0 +1,57 @@ +/* 7zHeader.h -- 7z Headers +2008-10-04 : Igor Pavlov : Public domain */ + +#ifndef __7Z_HEADER_H +#define __7Z_HEADER_H + +#include "Types.h" + +#define k7zSignatureSize 6 +extern Byte k7zSignature[k7zSignatureSize]; + +#define k7zMajorVersion 0 + +#define k7zStartHeaderSize 0x20 + +enum EIdEnum +{ + k7zIdEnd, + + k7zIdHeader, + + k7zIdArchiveProperties, + + k7zIdAdditionalStreamsInfo, + k7zIdMainStreamsInfo, + k7zIdFilesInfo, + + k7zIdPackInfo, + k7zIdUnpackInfo, + k7zIdSubStreamsInfo, + + k7zIdSize, + k7zIdCRC, + + k7zIdFolder, + + k7zIdCodersUnpackSize, + k7zIdNumUnpackStream, + + k7zIdEmptyStream, + k7zIdEmptyFile, + k7zIdAnti, + + k7zIdName, + k7zIdCTime, + k7zIdATime, + k7zIdMTime, + k7zIdWinAttributes, + k7zIdComment, + + k7zIdEncodedHeader, + + k7zIdStartPos, + k7zIdDummy +}; + +#endif diff --git a/snesreader/7z_C/7zIn.c b/snesreader/7z_C/7zIn.c new file mode 100644 index 00000000..e594b7de --- /dev/null +++ b/snesreader/7z_C/7zIn.c @@ -0,0 +1,1204 @@ +/* 7zIn.c -- 7z Input functions +2008-12-31 : Igor Pavlov : Public domain */ + +#include "7zCrc.h" +#include "CpuArch.h" + +#include "7zDecode.h" +#include "7zIn.h" + +#define RINOM(x) { if ((x) == 0) return SZ_ERROR_MEM; } + +#define NUM_FOLDER_CODERS_MAX 32 +#define NUM_CODER_STREAMS_MAX 32 + +void SzArEx_Init(CSzArEx *p) +{ + SzAr_Init(&p->db); + p->FolderStartPackStreamIndex = 0; + p->PackStreamStartPositions = 0; + p->FolderStartFileIndex = 0; + p->FileIndexToFolderIndexMap = 0; +} + +void SzArEx_Free(CSzArEx *p, ISzAlloc *alloc) +{ + IAlloc_Free(alloc, p->FolderStartPackStreamIndex); + IAlloc_Free(alloc, p->PackStreamStartPositions); + IAlloc_Free(alloc, p->FolderStartFileIndex); + IAlloc_Free(alloc, p->FileIndexToFolderIndexMap); + SzAr_Free(&p->db, alloc); + SzArEx_Init(p); +} + +/* +UInt64 GetFolderPackStreamSize(int folderIndex, int streamIndex) const +{ + return PackSizes[FolderStartPackStreamIndex[folderIndex] + streamIndex]; +} + +UInt64 GetFilePackSize(int fileIndex) const +{ + int folderIndex = FileIndexToFolderIndexMap[fileIndex]; + if (folderIndex >= 0) + { + const CSzFolder &folderInfo = Folders[folderIndex]; + if (FolderStartFileIndex[folderIndex] == fileIndex) + return GetFolderFullPackSize(folderIndex); + } + return 0; +} +*/ + +#define MY_ALLOC(T, p, size, alloc) { if ((size) == 0) p = 0; else \ + if ((p = (T *)IAlloc_Alloc(alloc, (size) * sizeof(T))) == 0) return SZ_ERROR_MEM; } + +static SRes SzArEx_Fill(CSzArEx *p, ISzAlloc *alloc) +{ + UInt32 startPos = 0; + UInt64 startPosSize = 0; + UInt32 i; + UInt32 folderIndex = 0; + UInt32 indexInFolder = 0; + MY_ALLOC(UInt32, p->FolderStartPackStreamIndex, p->db.NumFolders, alloc); + for (i = 0; i < p->db.NumFolders; i++) + { + p->FolderStartPackStreamIndex[i] = startPos; + startPos += p->db.Folders[i].NumPackStreams; + } + + MY_ALLOC(UInt64, p->PackStreamStartPositions, p->db.NumPackStreams, alloc); + + for (i = 0; i < p->db.NumPackStreams; i++) + { + p->PackStreamStartPositions[i] = startPosSize; + startPosSize += p->db.PackSizes[i]; + } + + MY_ALLOC(UInt32, p->FolderStartFileIndex, p->db.NumFolders, alloc); + MY_ALLOC(UInt32, p->FileIndexToFolderIndexMap, p->db.NumFiles, alloc); + + for (i = 0; i < p->db.NumFiles; i++) + { + CSzFileItem *file = p->db.Files + i; + int emptyStream = !file->HasStream; + if (emptyStream && indexInFolder == 0) + { + p->FileIndexToFolderIndexMap[i] = (UInt32)-1; + continue; + } + if (indexInFolder == 0) + { + /* + v3.13 incorrectly worked with empty folders + v4.07: Loop for skipping empty folders + */ + for (;;) + { + if (folderIndex >= p->db.NumFolders) + return SZ_ERROR_ARCHIVE; + p->FolderStartFileIndex[folderIndex] = i; + if (p->db.Folders[folderIndex].NumUnpackStreams != 0) + break; + folderIndex++; + } + } + p->FileIndexToFolderIndexMap[i] = folderIndex; + if (emptyStream) + continue; + indexInFolder++; + if (indexInFolder >= p->db.Folders[folderIndex].NumUnpackStreams) + { + folderIndex++; + indexInFolder = 0; + } + } + return SZ_OK; +} + + +UInt64 SzArEx_GetFolderStreamPos(const CSzArEx *p, UInt32 folderIndex, UInt32 indexInFolder) +{ + return p->dataPos + + p->PackStreamStartPositions[p->FolderStartPackStreamIndex[folderIndex] + indexInFolder]; +} + +int SzArEx_GetFolderFullPackSize(const CSzArEx *p, UInt32 folderIndex, UInt64 *resSize) +{ + UInt32 packStreamIndex = p->FolderStartPackStreamIndex[folderIndex]; + CSzFolder *folder = p->db.Folders + folderIndex; + UInt64 size = 0; + UInt32 i; + for (i = 0; i < folder->NumPackStreams; i++) + { + UInt64 t = size + p->db.PackSizes[packStreamIndex + i]; + if (t < size) /* check it */ + return SZ_ERROR_FAIL; + size = t; + } + *resSize = size; + return SZ_OK; +} + + +/* +SRes SzReadTime(const CObjectVector &dataVector, + CObjectVector &files, UInt64 type) +{ + CBoolVector boolVector; + RINOK(ReadBoolVector2(files.Size(), boolVector)) + + CStreamSwitch streamSwitch; + RINOK(streamSwitch.Set(this, &dataVector)); + + for (int i = 0; i < files.Size(); i++) + { + CSzFileItem &file = files[i]; + CArchiveFileTime fileTime; + bool defined = boolVector[i]; + if (defined) + { + UInt32 low, high; + RINOK(SzReadUInt32(low)); + RINOK(SzReadUInt32(high)); + fileTime.dwLowDateTime = low; + fileTime.dwHighDateTime = high; + } + switch(type) + { + case k7zIdCTime: file.IsCTimeDefined = defined; if (defined) file.CTime = fileTime; break; + case k7zIdATime: file.IsATimeDefined = defined; if (defined) file.ATime = fileTime; break; + case k7zIdMTime: file.IsMTimeDefined = defined; if (defined) file.MTime = fileTime; break; + } + } + return SZ_OK; +} +*/ + +static int TestSignatureCandidate(Byte *testBytes) +{ + size_t i; + for (i = 0; i < k7zSignatureSize; i++) + if (testBytes[i] != k7zSignature[i]) + return 0; + return 1; +} + +typedef struct _CSzState +{ + Byte *Data; + size_t Size; +}CSzData; + +static SRes SzReadByte(CSzData *sd, Byte *b) +{ + if (sd->Size == 0) + return SZ_ERROR_ARCHIVE; + sd->Size--; + *b = *sd->Data++; + return SZ_OK; +} + +static SRes SzReadBytes(CSzData *sd, Byte *data, size_t size) +{ + size_t i; + for (i = 0; i < size; i++) + { + RINOK(SzReadByte(sd, data + i)); + } + return SZ_OK; +} + +static SRes SzReadUInt32(CSzData *sd, UInt32 *value) +{ + int i; + *value = 0; + for (i = 0; i < 4; i++) + { + Byte b; + RINOK(SzReadByte(sd, &b)); + *value |= ((UInt32)(b) << (8 * i)); + } + return SZ_OK; +} + +static SRes SzReadNumber(CSzData *sd, UInt64 *value) +{ + Byte firstByte; + Byte mask = 0x80; + int i; + RINOK(SzReadByte(sd, &firstByte)); + *value = 0; + for (i = 0; i < 8; i++) + { + Byte b; + if ((firstByte & mask) == 0) + { + UInt64 highPart = firstByte & (mask - 1); + *value += (highPart << (8 * i)); + return SZ_OK; + } + RINOK(SzReadByte(sd, &b)); + *value |= ((UInt64)b << (8 * i)); + mask >>= 1; + } + return SZ_OK; +} + +static SRes SzReadNumber32(CSzData *sd, UInt32 *value) +{ + UInt64 value64; + RINOK(SzReadNumber(sd, &value64)); + if (value64 >= 0x80000000) + return SZ_ERROR_UNSUPPORTED; + if (value64 >= ((UInt64)(1) << ((sizeof(size_t) - 1) * 8 + 2))) + return SZ_ERROR_UNSUPPORTED; + *value = (UInt32)value64; + return SZ_OK; +} + +static SRes SzReadID(CSzData *sd, UInt64 *value) +{ + return SzReadNumber(sd, value); +} + +static SRes SzSkeepDataSize(CSzData *sd, UInt64 size) +{ + if (size > sd->Size) + return SZ_ERROR_ARCHIVE; + sd->Size -= (size_t)size; + sd->Data += (size_t)size; + return SZ_OK; +} + +static SRes SzSkeepData(CSzData *sd) +{ + UInt64 size; + RINOK(SzReadNumber(sd, &size)); + return SzSkeepDataSize(sd, size); +} + +static SRes SzReadArchiveProperties(CSzData *sd) +{ + for (;;) + { + UInt64 type; + RINOK(SzReadID(sd, &type)); + if (type == k7zIdEnd) + break; + SzSkeepData(sd); + } + return SZ_OK; +} + +static SRes SzWaitAttribute(CSzData *sd, UInt64 attribute) +{ + for (;;) + { + UInt64 type; + RINOK(SzReadID(sd, &type)); + if (type == attribute) + return SZ_OK; + if (type == k7zIdEnd) + return SZ_ERROR_ARCHIVE; + RINOK(SzSkeepData(sd)); + } +} + +static SRes SzReadBoolVector(CSzData *sd, size_t numItems, Byte **v, ISzAlloc *alloc) +{ + Byte b = 0; + Byte mask = 0; + size_t i; + MY_ALLOC(Byte, *v, numItems, alloc); + for (i = 0; i < numItems; i++) + { + if (mask == 0) + { + RINOK(SzReadByte(sd, &b)); + mask = 0x80; + } + (*v)[i] = (Byte)(((b & mask) != 0) ? 1 : 0); + mask >>= 1; + } + return SZ_OK; +} + +static SRes SzReadBoolVector2(CSzData *sd, size_t numItems, Byte **v, ISzAlloc *alloc) +{ + Byte allAreDefined; + size_t i; + RINOK(SzReadByte(sd, &allAreDefined)); + if (allAreDefined == 0) + return SzReadBoolVector(sd, numItems, v, alloc); + MY_ALLOC(Byte, *v, numItems, alloc); + for (i = 0; i < numItems; i++) + (*v)[i] = 1; + return SZ_OK; +} + +static SRes SzReadHashDigests( + CSzData *sd, + size_t numItems, + Byte **digestsDefined, + UInt32 **digests, + ISzAlloc *alloc) +{ + size_t i; + RINOK(SzReadBoolVector2(sd, numItems, digestsDefined, alloc)); + MY_ALLOC(UInt32, *digests, numItems, alloc); + for (i = 0; i < numItems; i++) + if ((*digestsDefined)[i]) + { + RINOK(SzReadUInt32(sd, (*digests) + i)); + } + return SZ_OK; +} + +static SRes SzReadPackInfo( + CSzData *sd, + UInt64 *dataOffset, + UInt32 *numPackStreams, + UInt64 **packSizes, + Byte **packCRCsDefined, + UInt32 **packCRCs, + ISzAlloc *alloc) +{ + UInt32 i; + RINOK(SzReadNumber(sd, dataOffset)); + RINOK(SzReadNumber32(sd, numPackStreams)); + + RINOK(SzWaitAttribute(sd, k7zIdSize)); + + MY_ALLOC(UInt64, *packSizes, (size_t)*numPackStreams, alloc); + + for (i = 0; i < *numPackStreams; i++) + { + RINOK(SzReadNumber(sd, (*packSizes) + i)); + } + + for (;;) + { + UInt64 type; + RINOK(SzReadID(sd, &type)); + if (type == k7zIdEnd) + break; + if (type == k7zIdCRC) + { + RINOK(SzReadHashDigests(sd, (size_t)*numPackStreams, packCRCsDefined, packCRCs, alloc)); + continue; + } + RINOK(SzSkeepData(sd)); + } + if (*packCRCsDefined == 0) + { + MY_ALLOC(Byte, *packCRCsDefined, (size_t)*numPackStreams, alloc); + MY_ALLOC(UInt32, *packCRCs, (size_t)*numPackStreams, alloc); + for (i = 0; i < *numPackStreams; i++) + { + (*packCRCsDefined)[i] = 0; + (*packCRCs)[i] = 0; + } + } + return SZ_OK; +} + +static SRes SzReadSwitch(CSzData *sd) +{ + Byte external; + RINOK(SzReadByte(sd, &external)); + return (external == 0) ? SZ_OK: SZ_ERROR_UNSUPPORTED; +} + +static SRes SzGetNextFolderItem(CSzData *sd, CSzFolder *folder, ISzAlloc *alloc) +{ + UInt32 numCoders, numBindPairs, numPackStreams, i; + UInt32 numInStreams = 0, numOutStreams = 0; + + RINOK(SzReadNumber32(sd, &numCoders)); + if (numCoders > NUM_FOLDER_CODERS_MAX) + return SZ_ERROR_UNSUPPORTED; + folder->NumCoders = numCoders; + + MY_ALLOC(CSzCoderInfo, folder->Coders, (size_t)numCoders, alloc); + + for (i = 0; i < numCoders; i++) + SzCoderInfo_Init(folder->Coders + i); + + for (i = 0; i < numCoders; i++) + { + Byte mainByte; + CSzCoderInfo *coder = folder->Coders + i; + { + unsigned idSize, j; + Byte longID[15]; + RINOK(SzReadByte(sd, &mainByte)); + idSize = (unsigned)(mainByte & 0xF); + RINOK(SzReadBytes(sd, longID, idSize)); + if (idSize > sizeof(coder->MethodID)) + return SZ_ERROR_UNSUPPORTED; + coder->MethodID = 0; + for (j = 0; j < idSize; j++) + coder->MethodID |= (UInt64)longID[idSize - 1 - j] << (8 * j); + + if ((mainByte & 0x10) != 0) + { + RINOK(SzReadNumber32(sd, &coder->NumInStreams)); + RINOK(SzReadNumber32(sd, &coder->NumOutStreams)); + if (coder->NumInStreams > NUM_CODER_STREAMS_MAX || + coder->NumOutStreams > NUM_CODER_STREAMS_MAX) + return SZ_ERROR_UNSUPPORTED; + } + else + { + coder->NumInStreams = 1; + coder->NumOutStreams = 1; + } + if ((mainByte & 0x20) != 0) + { + UInt64 propertiesSize = 0; + RINOK(SzReadNumber(sd, &propertiesSize)); + if (!Buf_Create(&coder->Props, (size_t)propertiesSize, alloc)) + return SZ_ERROR_MEM; + RINOK(SzReadBytes(sd, coder->Props.data, (size_t)propertiesSize)); + } + } + while ((mainByte & 0x80) != 0) + { + RINOK(SzReadByte(sd, &mainByte)); + RINOK(SzSkeepDataSize(sd, (mainByte & 0xF))); + if ((mainByte & 0x10) != 0) + { + UInt32 n; + RINOK(SzReadNumber32(sd, &n)); + RINOK(SzReadNumber32(sd, &n)); + } + if ((mainByte & 0x20) != 0) + { + UInt64 propertiesSize = 0; + RINOK(SzReadNumber(sd, &propertiesSize)); + RINOK(SzSkeepDataSize(sd, propertiesSize)); + } + } + numInStreams += coder->NumInStreams; + numOutStreams += coder->NumOutStreams; + } + + if (numOutStreams == 0) + return SZ_ERROR_UNSUPPORTED; + + folder->NumBindPairs = numBindPairs = numOutStreams - 1; + MY_ALLOC(CBindPair, folder->BindPairs, (size_t)numBindPairs, alloc); + + for (i = 0; i < numBindPairs; i++) + { + CBindPair *bp = folder->BindPairs + i; + RINOK(SzReadNumber32(sd, &bp->InIndex)); + RINOK(SzReadNumber32(sd, &bp->OutIndex)); + } + + if (numInStreams < numBindPairs) + return SZ_ERROR_UNSUPPORTED; + + folder->NumPackStreams = numPackStreams = numInStreams - numBindPairs; + MY_ALLOC(UInt32, folder->PackStreams, (size_t)numPackStreams, alloc); + + if (numPackStreams == 1) + { + for (i = 0; i < numInStreams ; i++) + if (SzFolder_FindBindPairForInStream(folder, i) < 0) + break; + if (i == numInStreams) + return SZ_ERROR_UNSUPPORTED; + folder->PackStreams[0] = i; + } + else + for (i = 0; i < numPackStreams; i++) + { + RINOK(SzReadNumber32(sd, folder->PackStreams + i)); + } + return SZ_OK; +} + +static SRes SzReadUnpackInfo( + CSzData *sd, + UInt32 *numFolders, + CSzFolder **folders, /* for alloc */ + ISzAlloc *alloc, + ISzAlloc *allocTemp) +{ + UInt32 i; + RINOK(SzWaitAttribute(sd, k7zIdFolder)); + RINOK(SzReadNumber32(sd, numFolders)); + { + RINOK(SzReadSwitch(sd)); + + MY_ALLOC(CSzFolder, *folders, (size_t)*numFolders, alloc); + + for (i = 0; i < *numFolders; i++) + SzFolder_Init((*folders) + i); + + for (i = 0; i < *numFolders; i++) + { + RINOK(SzGetNextFolderItem(sd, (*folders) + i, alloc)); + } + } + + RINOK(SzWaitAttribute(sd, k7zIdCodersUnpackSize)); + + for (i = 0; i < *numFolders; i++) + { + UInt32 j; + CSzFolder *folder = (*folders) + i; + UInt32 numOutStreams = SzFolder_GetNumOutStreams(folder); + + MY_ALLOC(UInt64, folder->UnpackSizes, (size_t)numOutStreams, alloc); + + for (j = 0; j < numOutStreams; j++) + { + RINOK(SzReadNumber(sd, folder->UnpackSizes + j)); + } + } + + for (;;) + { + UInt64 type; + RINOK(SzReadID(sd, &type)); + if (type == k7zIdEnd) + return SZ_OK; + if (type == k7zIdCRC) + { + SRes res; + Byte *crcsDefined = 0; + UInt32 *crcs = 0; + res = SzReadHashDigests(sd, *numFolders, &crcsDefined, &crcs, allocTemp); + if (res == SZ_OK) + { + for (i = 0; i < *numFolders; i++) + { + CSzFolder *folder = (*folders) + i; + folder->UnpackCRCDefined = crcsDefined[i]; + folder->UnpackCRC = crcs[i]; + } + } + IAlloc_Free(allocTemp, crcs); + IAlloc_Free(allocTemp, crcsDefined); + RINOK(res); + continue; + } + RINOK(SzSkeepData(sd)); + } +} + +static SRes SzReadSubStreamsInfo( + CSzData *sd, + UInt32 numFolders, + CSzFolder *folders, + UInt32 *numUnpackStreams, + UInt64 **unpackSizes, + Byte **digestsDefined, + UInt32 **digests, + ISzAlloc *allocTemp) +{ + UInt64 type = 0; + UInt32 i; + UInt32 si = 0; + UInt32 numDigests = 0; + + for (i = 0; i < numFolders; i++) + folders[i].NumUnpackStreams = 1; + *numUnpackStreams = numFolders; + + for (;;) + { + RINOK(SzReadID(sd, &type)); + if (type == k7zIdNumUnpackStream) + { + *numUnpackStreams = 0; + for (i = 0; i < numFolders; i++) + { + UInt32 numStreams; + RINOK(SzReadNumber32(sd, &numStreams)); + folders[i].NumUnpackStreams = numStreams; + *numUnpackStreams += numStreams; + } + continue; + } + if (type == k7zIdCRC || type == k7zIdSize) + break; + if (type == k7zIdEnd) + break; + RINOK(SzSkeepData(sd)); + } + + if (*numUnpackStreams == 0) + { + *unpackSizes = 0; + *digestsDefined = 0; + *digests = 0; + } + else + { + *unpackSizes = (UInt64 *)IAlloc_Alloc(allocTemp, (size_t)*numUnpackStreams * sizeof(UInt64)); + RINOM(*unpackSizes); + *digestsDefined = (Byte *)IAlloc_Alloc(allocTemp, (size_t)*numUnpackStreams * sizeof(Byte)); + RINOM(*digestsDefined); + *digests = (UInt32 *)IAlloc_Alloc(allocTemp, (size_t)*numUnpackStreams * sizeof(UInt32)); + RINOM(*digests); + } + + for (i = 0; i < numFolders; i++) + { + /* + v3.13 incorrectly worked with empty folders + v4.07: we check that folder is empty + */ + UInt64 sum = 0; + UInt32 j; + UInt32 numSubstreams = folders[i].NumUnpackStreams; + if (numSubstreams == 0) + continue; + if (type == k7zIdSize) + for (j = 1; j < numSubstreams; j++) + { + UInt64 size; + RINOK(SzReadNumber(sd, &size)); + (*unpackSizes)[si++] = size; + sum += size; + } + (*unpackSizes)[si++] = SzFolder_GetUnpackSize(folders + i) - sum; + } + if (type == k7zIdSize) + { + RINOK(SzReadID(sd, &type)); + } + + for (i = 0; i < *numUnpackStreams; i++) + { + (*digestsDefined)[i] = 0; + (*digests)[i] = 0; + } + + + for (i = 0; i < numFolders; i++) + { + UInt32 numSubstreams = folders[i].NumUnpackStreams; + if (numSubstreams != 1 || !folders[i].UnpackCRCDefined) + numDigests += numSubstreams; + } + + + si = 0; + for (;;) + { + if (type == k7zIdCRC) + { + int digestIndex = 0; + Byte *digestsDefined2 = 0; + UInt32 *digests2 = 0; + SRes res = SzReadHashDigests(sd, numDigests, &digestsDefined2, &digests2, allocTemp); + if (res == SZ_OK) + { + for (i = 0; i < numFolders; i++) + { + CSzFolder *folder = folders + i; + UInt32 numSubstreams = folder->NumUnpackStreams; + if (numSubstreams == 1 && folder->UnpackCRCDefined) + { + (*digestsDefined)[si] = 1; + (*digests)[si] = folder->UnpackCRC; + si++; + } + else + { + UInt32 j; + for (j = 0; j < numSubstreams; j++, digestIndex++) + { + (*digestsDefined)[si] = digestsDefined2[digestIndex]; + (*digests)[si] = digests2[digestIndex]; + si++; + } + } + } + } + IAlloc_Free(allocTemp, digestsDefined2); + IAlloc_Free(allocTemp, digests2); + RINOK(res); + } + else if (type == k7zIdEnd) + return SZ_OK; + else + { + RINOK(SzSkeepData(sd)); + } + RINOK(SzReadID(sd, &type)); + } +} + + +static SRes SzReadStreamsInfo( + CSzData *sd, + UInt64 *dataOffset, + CSzAr *p, + UInt32 *numUnpackStreams, + UInt64 **unpackSizes, /* allocTemp */ + Byte **digestsDefined, /* allocTemp */ + UInt32 **digests, /* allocTemp */ + ISzAlloc *alloc, + ISzAlloc *allocTemp) +{ + for (;;) + { + UInt64 type; + RINOK(SzReadID(sd, &type)); + if ((UInt64)(int)type != type) + return SZ_ERROR_UNSUPPORTED; + switch((int)type) + { + case k7zIdEnd: + return SZ_OK; + case k7zIdPackInfo: + { + RINOK(SzReadPackInfo(sd, dataOffset, &p->NumPackStreams, + &p->PackSizes, &p->PackCRCsDefined, &p->PackCRCs, alloc)); + break; + } + case k7zIdUnpackInfo: + { + RINOK(SzReadUnpackInfo(sd, &p->NumFolders, &p->Folders, alloc, allocTemp)); + break; + } + case k7zIdSubStreamsInfo: + { + RINOK(SzReadSubStreamsInfo(sd, p->NumFolders, p->Folders, + numUnpackStreams, unpackSizes, digestsDefined, digests, allocTemp)); + break; + } + default: + return SZ_ERROR_UNSUPPORTED; + } + } +} + +Byte kUtf8Limits[5] = { 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; + +static SRes SzReadFileNames(CSzData *sd, UInt32 numFiles, CSzFileItem *files, ISzAlloc *alloc) +{ + UInt32 i; + for (i = 0; i < numFiles; i++) + { + UInt32 len = 0; + UInt32 pos = 0; + CSzFileItem *file = files + i; + while (pos + 2 <= sd->Size) + { + int numAdds; + UInt32 value = (UInt32)(sd->Data[pos] | (((UInt32)sd->Data[pos + 1]) << 8)); + pos += 2; + len++; + if (value == 0) + break; + if (value < 0x80) + continue; + if (value >= 0xD800 && value < 0xE000) + { + UInt32 c2; + if (value >= 0xDC00) + return SZ_ERROR_ARCHIVE; + if (pos + 2 > sd->Size) + return SZ_ERROR_ARCHIVE; + c2 = (UInt32)(sd->Data[pos] | (((UInt32)sd->Data[pos + 1]) << 8)); + pos += 2; + if (c2 < 0xDC00 || c2 >= 0xE000) + return SZ_ERROR_ARCHIVE; + value = ((value - 0xD800) << 10) | (c2 - 0xDC00); + } + for (numAdds = 1; numAdds < 5; numAdds++) + if (value < (((UInt32)1) << (numAdds * 5 + 6))) + break; + len += numAdds; + } + + MY_ALLOC(char, file->Name, (size_t)len, alloc); + + len = 0; + while (2 <= sd->Size) + { + int numAdds; + UInt32 value = (UInt32)(sd->Data[0] | (((UInt32)sd->Data[1]) << 8)); + SzSkeepDataSize(sd, 2); + if (value < 0x80) + { + file->Name[len++] = (char)value; + if (value == 0) + break; + continue; + } + if (value >= 0xD800 && value < 0xE000) + { + UInt32 c2 = (UInt32)(sd->Data[0] | (((UInt32)sd->Data[1]) << 8)); + SzSkeepDataSize(sd, 2); + value = ((value - 0xD800) << 10) | (c2 - 0xDC00); + } + for (numAdds = 1; numAdds < 5; numAdds++) + if (value < (((UInt32)1) << (numAdds * 5 + 6))) + break; + file->Name[len++] = (char)(kUtf8Limits[numAdds - 1] + (value >> (6 * numAdds))); + do + { + numAdds--; + file->Name[len++] = (char)(0x80 + ((value >> (6 * numAdds)) & 0x3F)); + } + while (numAdds > 0); + + len += numAdds; + } + } + return SZ_OK; +} + +static SRes SzReadHeader2( + CSzArEx *p, /* allocMain */ + CSzData *sd, + UInt64 **unpackSizes, /* allocTemp */ + Byte **digestsDefined, /* allocTemp */ + UInt32 **digests, /* allocTemp */ + Byte **emptyStreamVector, /* allocTemp */ + Byte **emptyFileVector, /* allocTemp */ + Byte **lwtVector, /* allocTemp */ + ISzAlloc *allocMain, + ISzAlloc *allocTemp) +{ + UInt64 htype; + UInt32 numUnpackStreams = 0; + UInt32 numFiles = 0; + CSzFileItem *files = 0; + UInt32 numEmptyStreams = 0; + UInt32 i; + + RINOK(SzReadID(sd, &htype)); + + if (htype == k7zIdArchiveProperties) + { + RINOK(SzReadArchiveProperties(sd)); + RINOK(SzReadID(sd, &htype)); + } + + + if (htype == k7zIdMainStreamsInfo) + { + RINOK(SzReadStreamsInfo(sd, + &p->dataPos, + &p->db, + &numUnpackStreams, + unpackSizes, + digestsDefined, + digests, allocMain, allocTemp)); + p->dataPos += p->startPosAfterHeader; + RINOK(SzReadID(sd, &htype)); + } + + if (htype == k7zIdEnd) + return SZ_OK; + if (htype != k7zIdFilesInfo) + return SZ_ERROR_ARCHIVE; + + RINOK(SzReadNumber32(sd, &numFiles)); + p->db.NumFiles = numFiles; + + MY_ALLOC(CSzFileItem, files, (size_t)numFiles, allocMain); + + p->db.Files = files; + for (i = 0; i < numFiles; i++) + SzFile_Init(files + i); + + for (;;) + { + UInt64 type; + UInt64 size; + RINOK(SzReadID(sd, &type)); + if (type == k7zIdEnd) + break; + RINOK(SzReadNumber(sd, &size)); + + if ((UInt64)(int)type != type) + { + RINOK(SzSkeepDataSize(sd, size)); + } + else + switch((int)type) + { + case k7zIdName: + { + RINOK(SzReadSwitch(sd)); + RINOK(SzReadFileNames(sd, numFiles, files, allocMain)) + break; + } + case k7zIdEmptyStream: + { + RINOK(SzReadBoolVector(sd, numFiles, emptyStreamVector, allocTemp)); + numEmptyStreams = 0; + for (i = 0; i < numFiles; i++) + if ((*emptyStreamVector)[i]) + numEmptyStreams++; + break; + } + case k7zIdEmptyFile: + { + RINOK(SzReadBoolVector(sd, numEmptyStreams, emptyFileVector, allocTemp)); + break; + } + case k7zIdMTime: + { + RINOK(SzReadBoolVector2(sd, numFiles, lwtVector, allocTemp)); + RINOK(SzReadSwitch(sd)); + for (i = 0; i < numFiles; i++) + { + CSzFileItem *f = &files[i]; + Byte defined = (*lwtVector)[i]; + f->MTimeDefined = defined; + f->MTime.Low = f->MTime.High = 0; + if (defined) + { + RINOK(SzReadUInt32(sd, &f->MTime.Low)); + RINOK(SzReadUInt32(sd, &f->MTime.High)); + } + } + break; + } + default: + { + RINOK(SzSkeepDataSize(sd, size)); + } + } + } + + { + UInt32 emptyFileIndex = 0; + UInt32 sizeIndex = 0; + for (i = 0; i < numFiles; i++) + { + CSzFileItem *file = files + i; + file->IsAnti = 0; + if (*emptyStreamVector == 0) + file->HasStream = 1; + else + file->HasStream = (Byte)((*emptyStreamVector)[i] ? 0 : 1); + if (file->HasStream) + { + file->IsDir = 0; + file->Size = (*unpackSizes)[sizeIndex]; + file->FileCRC = (*digests)[sizeIndex]; + file->FileCRCDefined = (Byte)(*digestsDefined)[sizeIndex]; + sizeIndex++; + } + else + { + if (*emptyFileVector == 0) + file->IsDir = 1; + else + file->IsDir = (Byte)((*emptyFileVector)[emptyFileIndex] ? 0 : 1); + emptyFileIndex++; + file->Size = 0; + file->FileCRCDefined = 0; + } + } + } + return SzArEx_Fill(p, allocMain); +} + +static SRes SzReadHeader( + CSzArEx *p, + CSzData *sd, + ISzAlloc *allocMain, + ISzAlloc *allocTemp) +{ + UInt64 *unpackSizes = 0; + Byte *digestsDefined = 0; + UInt32 *digests = 0; + Byte *emptyStreamVector = 0; + Byte *emptyFileVector = 0; + Byte *lwtVector = 0; + SRes res = SzReadHeader2(p, sd, + &unpackSizes, &digestsDefined, &digests, + &emptyStreamVector, &emptyFileVector, &lwtVector, + allocMain, allocTemp); + IAlloc_Free(allocTemp, unpackSizes); + IAlloc_Free(allocTemp, digestsDefined); + IAlloc_Free(allocTemp, digests); + IAlloc_Free(allocTemp, emptyStreamVector); + IAlloc_Free(allocTemp, emptyFileVector); + IAlloc_Free(allocTemp, lwtVector); + return res; +} + +static SRes SzReadAndDecodePackedStreams2( + ILookInStream *inStream, + CSzData *sd, + CBuf *outBuffer, + UInt64 baseOffset, + CSzAr *p, + UInt64 **unpackSizes, + Byte **digestsDefined, + UInt32 **digests, + ISzAlloc *allocTemp) +{ + + UInt32 numUnpackStreams = 0; + UInt64 dataStartPos; + CSzFolder *folder; + UInt64 unpackSize; + SRes res; + + RINOK(SzReadStreamsInfo(sd, &dataStartPos, p, + &numUnpackStreams, unpackSizes, digestsDefined, digests, + allocTemp, allocTemp)); + + dataStartPos += baseOffset; + if (p->NumFolders != 1) + return SZ_ERROR_ARCHIVE; + + folder = p->Folders; + unpackSize = SzFolder_GetUnpackSize(folder); + + RINOK(LookInStream_SeekTo(inStream, dataStartPos)); + + if (!Buf_Create(outBuffer, (size_t)unpackSize, allocTemp)) + return SZ_ERROR_MEM; + + res = SzDecode(p->PackSizes, folder, + inStream, dataStartPos, + outBuffer->data, (size_t)unpackSize, allocTemp); + RINOK(res); + if (folder->UnpackCRCDefined) + if (CrcCalc(outBuffer->data, (size_t)unpackSize) != folder->UnpackCRC) + return SZ_ERROR_CRC; + return SZ_OK; +} + +static SRes SzReadAndDecodePackedStreams( + ILookInStream *inStream, + CSzData *sd, + CBuf *outBuffer, + UInt64 baseOffset, + ISzAlloc *allocTemp) +{ + CSzAr p; + UInt64 *unpackSizes = 0; + Byte *digestsDefined = 0; + UInt32 *digests = 0; + SRes res; + SzAr_Init(&p); + res = SzReadAndDecodePackedStreams2(inStream, sd, outBuffer, baseOffset, + &p, &unpackSizes, &digestsDefined, &digests, + allocTemp); + SzAr_Free(&p, allocTemp); + IAlloc_Free(allocTemp, unpackSizes); + IAlloc_Free(allocTemp, digestsDefined); + IAlloc_Free(allocTemp, digests); + return res; +} + +static SRes SzArEx_Open2( + CSzArEx *p, + ILookInStream *inStream, + ISzAlloc *allocMain, + ISzAlloc *allocTemp) +{ + Byte header[k7zStartHeaderSize]; + UInt64 nextHeaderOffset, nextHeaderSize; + size_t nextHeaderSizeT; + UInt32 nextHeaderCRC; + CBuf buffer; + SRes res; + + RINOK(LookInStream_Read2(inStream, header, k7zStartHeaderSize, SZ_ERROR_NO_ARCHIVE)); + + if (!TestSignatureCandidate(header)) + return SZ_ERROR_NO_ARCHIVE; + if (header[6] != k7zMajorVersion) + return SZ_ERROR_UNSUPPORTED; + + nextHeaderOffset = GetUi64(header + 12); + nextHeaderSize = GetUi64(header + 20); + nextHeaderCRC = GetUi32(header + 28); + + p->startPosAfterHeader = k7zStartHeaderSize; + + if (CrcCalc(header + 12, 20) != GetUi32(header + 8)) + return SZ_ERROR_CRC; + + nextHeaderSizeT = (size_t)nextHeaderSize; + if (nextHeaderSizeT != nextHeaderSize) + return SZ_ERROR_MEM; + if (nextHeaderSizeT == 0) + return SZ_OK; + if (nextHeaderOffset > nextHeaderOffset + nextHeaderSize || + nextHeaderOffset > nextHeaderOffset + nextHeaderSize + k7zStartHeaderSize) + return SZ_ERROR_NO_ARCHIVE; + + { + Int64 pos = 0; + RINOK(inStream->Seek(inStream, &pos, SZ_SEEK_END)); + if ((UInt64)pos < nextHeaderOffset || + (UInt64)pos < k7zStartHeaderSize + nextHeaderOffset || + (UInt64)pos < k7zStartHeaderSize + nextHeaderOffset + nextHeaderSize) + return SZ_ERROR_INPUT_EOF; + } + + RINOK(LookInStream_SeekTo(inStream, k7zStartHeaderSize + nextHeaderOffset)); + + if (!Buf_Create(&buffer, nextHeaderSizeT, allocTemp)) + return SZ_ERROR_MEM; + + res = LookInStream_Read(inStream, buffer.data, nextHeaderSizeT); + if (res == SZ_OK) + { + res = SZ_ERROR_ARCHIVE; + if (CrcCalc(buffer.data, nextHeaderSizeT) == nextHeaderCRC) + { + CSzData sd; + UInt64 type; + sd.Data = buffer.data; + sd.Size = buffer.size; + res = SzReadID(&sd, &type); + if (res == SZ_OK) + { + if (type == k7zIdEncodedHeader) + { + CBuf outBuffer; + Buf_Init(&outBuffer); + res = SzReadAndDecodePackedStreams(inStream, &sd, &outBuffer, p->startPosAfterHeader, allocTemp); + if (res != SZ_OK) + Buf_Free(&outBuffer, allocTemp); + else + { + Buf_Free(&buffer, allocTemp); + buffer.data = outBuffer.data; + buffer.size = outBuffer.size; + sd.Data = buffer.data; + sd.Size = buffer.size; + res = SzReadID(&sd, &type); + } + } + } + if (res == SZ_OK) + { + if (type == k7zIdHeader) + res = SzReadHeader(p, &sd, allocMain, allocTemp); + else + res = SZ_ERROR_UNSUPPORTED; + } + } + } + Buf_Free(&buffer, allocTemp); + return res; +} + +SRes SzArEx_Open(CSzArEx *p, ILookInStream *inStream, ISzAlloc *allocMain, ISzAlloc *allocTemp) +{ + SRes res = SzArEx_Open2(p, inStream, allocMain, allocTemp); + if (res != SZ_OK) + SzArEx_Free(p, allocMain); + return res; +} diff --git a/snesreader/7z_C/7zIn.h b/snesreader/7z_C/7zIn.h new file mode 100644 index 00000000..89e0fb85 --- /dev/null +++ b/snesreader/7z_C/7zIn.h @@ -0,0 +1,49 @@ +/* 7zIn.h -- 7z Input functions +2008-11-23 : Igor Pavlov : Public domain */ + +#ifndef __7Z_IN_H +#define __7Z_IN_H + +#include "7zHeader.h" +#include "7zItem.h" + +#ifdef __cplusplus + extern "C" { +#endif + +typedef struct +{ + CSzAr db; + + UInt64 startPosAfterHeader; + UInt64 dataPos; + + UInt32 *FolderStartPackStreamIndex; + UInt64 *PackStreamStartPositions; + UInt32 *FolderStartFileIndex; + UInt32 *FileIndexToFolderIndexMap; +} CSzArEx; + +void SzArEx_Init(CSzArEx *p); +void SzArEx_Free(CSzArEx *p, ISzAlloc *alloc); +UInt64 SzArEx_GetFolderStreamPos(const CSzArEx *p, UInt32 folderIndex, UInt32 indexInFolder); +int SzArEx_GetFolderFullPackSize(const CSzArEx *p, UInt32 folderIndex, UInt64 *resSize); + +/* +Errors: +SZ_ERROR_NO_ARCHIVE +SZ_ERROR_ARCHIVE +SZ_ERROR_UNSUPPORTED +SZ_ERROR_MEM +SZ_ERROR_CRC +SZ_ERROR_INPUT_EOF +SZ_ERROR_FAIL +*/ + +SRes SzArEx_Open(CSzArEx *p, ILookInStream *inStream, ISzAlloc *allocMain, ISzAlloc *allocTemp); + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/snesreader/7z_C/7zItem.c b/snesreader/7z_C/7zItem.c new file mode 100644 index 00000000..4a092614 --- /dev/null +++ b/snesreader/7z_C/7zItem.c @@ -0,0 +1,129 @@ +/* 7zItem.c -- 7z Items +2008-10-04 : Igor Pavlov : Public domain */ + +#include "7zItem.h" + +void SzCoderInfo_Init(CSzCoderInfo *p) +{ + Buf_Init(&p->Props); +} + +void SzCoderInfo_Free(CSzCoderInfo *p, ISzAlloc *alloc) +{ + Buf_Free(&p->Props, alloc); + SzCoderInfo_Init(p); +} + +void SzFolder_Init(CSzFolder *p) +{ + p->Coders = 0; + p->BindPairs = 0; + p->PackStreams = 0; + p->UnpackSizes = 0; + p->NumCoders = 0; + p->NumBindPairs = 0; + p->NumPackStreams = 0; + p->UnpackCRCDefined = 0; + p->UnpackCRC = 0; + p->NumUnpackStreams = 0; +} + +static +void SzFolder_Free(CSzFolder *p, ISzAlloc *alloc) +{ + UInt32 i; + if (p->Coders) + for (i = 0; i < p->NumCoders; i++) + SzCoderInfo_Free(&p->Coders[i], alloc); + IAlloc_Free(alloc, p->Coders); + IAlloc_Free(alloc, p->BindPairs); + IAlloc_Free(alloc, p->PackStreams); + IAlloc_Free(alloc, p->UnpackSizes); + SzFolder_Init(p); +} + +UInt32 SzFolder_GetNumOutStreams(CSzFolder *p) +{ + UInt32 result = 0; + UInt32 i; + for (i = 0; i < p->NumCoders; i++) + result += p->Coders[i].NumOutStreams; + return result; +} + +int SzFolder_FindBindPairForInStream(CSzFolder *p, UInt32 inStreamIndex) +{ + UInt32 i; + for (i = 0; i < p->NumBindPairs; i++) + if (p->BindPairs[i].InIndex == inStreamIndex) + return i; + return -1; +} + + +static +int SzFolder_FindBindPairForOutStream(CSzFolder *p, UInt32 outStreamIndex) +{ + UInt32 i; + for (i = 0; i < p->NumBindPairs; i++) + if (p->BindPairs[i].OutIndex == outStreamIndex) + return i; + return -1; +} + +UInt64 SzFolder_GetUnpackSize(CSzFolder *p) +{ + int i = (int)SzFolder_GetNumOutStreams(p); + if (i == 0) + return 0; + for (i--; i >= 0; i--) + if (SzFolder_FindBindPairForOutStream(p, i) < 0) + return p->UnpackSizes[i]; + /* throw 1; */ + return 0; +} + +void SzFile_Init(CSzFileItem *p) +{ + p->HasStream = 1; + p->IsDir = 0; + p->IsAnti = 0; + p->FileCRCDefined = 0; + p->MTimeDefined = 0; + p->Name = 0; +} + +static void SzFile_Free(CSzFileItem *p, ISzAlloc *alloc) +{ + IAlloc_Free(alloc, p->Name); + SzFile_Init(p); +} + +void SzAr_Init(CSzAr *p) +{ + p->PackSizes = 0; + p->PackCRCsDefined = 0; + p->PackCRCs = 0; + p->Folders = 0; + p->Files = 0; + p->NumPackStreams = 0; + p->NumFolders = 0; + p->NumFiles = 0; +} + +void SzAr_Free(CSzAr *p, ISzAlloc *alloc) +{ + UInt32 i; + if (p->Folders) + for (i = 0; i < p->NumFolders; i++) + SzFolder_Free(&p->Folders[i], alloc); + if (p->Files) + for (i = 0; i < p->NumFiles; i++) + SzFile_Free(&p->Files[i], alloc); + IAlloc_Free(alloc, p->PackSizes); + IAlloc_Free(alloc, p->PackCRCsDefined); + IAlloc_Free(alloc, p->PackCRCs); + IAlloc_Free(alloc, p->Folders); + IAlloc_Free(alloc, p->Files); + SzAr_Init(p); +} diff --git a/snesreader/7z_C/7zItem.h b/snesreader/7z_C/7zItem.h new file mode 100644 index 00000000..7ef24731 --- /dev/null +++ b/snesreader/7z_C/7zItem.h @@ -0,0 +1,83 @@ +/* 7zItem.h -- 7z Items +2008-10-04 : Igor Pavlov : Public domain */ + +#ifndef __7Z_ITEM_H +#define __7Z_ITEM_H + +#include "7zBuf.h" + +typedef struct +{ + UInt32 NumInStreams; + UInt32 NumOutStreams; + UInt64 MethodID; + CBuf Props; +} CSzCoderInfo; + +void SzCoderInfo_Init(CSzCoderInfo *p); +void SzCoderInfo_Free(CSzCoderInfo *p, ISzAlloc *alloc); + +typedef struct +{ + UInt32 InIndex; + UInt32 OutIndex; +} CBindPair; + +typedef struct +{ + CSzCoderInfo *Coders; + CBindPair *BindPairs; + UInt32 *PackStreams; + UInt64 *UnpackSizes; + UInt32 NumCoders; + UInt32 NumBindPairs; + UInt32 NumPackStreams; + int UnpackCRCDefined; + UInt32 UnpackCRC; + + UInt32 NumUnpackStreams; +} CSzFolder; + +void SzFolder_Init(CSzFolder *p); +UInt64 SzFolder_GetUnpackSize(CSzFolder *p); +int SzFolder_FindBindPairForInStream(CSzFolder *p, UInt32 inStreamIndex); +UInt32 SzFolder_GetNumOutStreams(CSzFolder *p); + +typedef struct +{ + UInt32 Low; + UInt32 High; +} CNtfsFileTime; + +typedef struct +{ + CNtfsFileTime MTime; + UInt64 Size; + char *Name; + UInt32 FileCRC; + + Byte HasStream; + Byte IsDir; + Byte IsAnti; + Byte FileCRCDefined; + Byte MTimeDefined; +} CSzFileItem; + +void SzFile_Init(CSzFileItem *p); + +typedef struct +{ + UInt64 *PackSizes; + Byte *PackCRCsDefined; + UInt32 *PackCRCs; + CSzFolder *Folders; + CSzFileItem *Files; + UInt32 NumPackStreams; + UInt32 NumFolders; + UInt32 NumFiles; +} CSzAr; + +void SzAr_Init(CSzAr *p); +void SzAr_Free(CSzAr *p, ISzAlloc *alloc); + +#endif diff --git a/snesreader/7z_C/7zStream.c b/snesreader/7z_C/7zStream.c new file mode 100644 index 00000000..6dc333ef --- /dev/null +++ b/snesreader/7z_C/7zStream.c @@ -0,0 +1,184 @@ +/* 7zStream.c -- 7z Stream functions +2008-11-23 : Igor Pavlov : Public domain */ + +#include + +#include "Types.h" + +#if NEVER_CALLED +SRes SeqInStream_Read2(ISeqInStream *stream, void *buf, size_t size, SRes errorType) +{ + while (size != 0) + { + size_t processed = size; + RINOK(stream->Read(stream, buf, &processed)); + if (processed == 0) + return errorType; + buf = (void *)((Byte *)buf + processed); + size -= processed; + } + return SZ_OK; +} + +SRes SeqInStream_Read(ISeqInStream *stream, void *buf, size_t size) +{ + return SeqInStream_Read2(stream, buf, size, SZ_ERROR_INPUT_EOF); +} + +SRes SeqInStream_ReadByte(ISeqInStream *stream, Byte *buf) +{ + size_t processed = 1; + RINOK(stream->Read(stream, buf, &processed)); + return (processed == 1) ? SZ_OK : SZ_ERROR_INPUT_EOF; +} +#endif + +SRes LookInStream_SeekTo(ILookInStream *stream, UInt64 offset) +{ + Int64 t = offset; + return stream->Seek(stream, &t, SZ_SEEK_SET); +} + +#if NEVER_CALLED +SRes LookInStream_LookRead(ILookInStream *stream, void *buf, size_t *size) +{ + void *lookBuf; + if (*size == 0) + return SZ_OK; + RINOK(stream->Look(stream, &lookBuf, size)); + memcpy(buf, lookBuf, *size); + return stream->Skip(stream, *size); +} +#endif + +SRes LookInStream_Read2(ILookInStream *stream, void *buf, size_t size, SRes errorType) +{ + while (size != 0) + { + size_t processed = size; + RINOK(stream->Read(stream, buf, &processed)); + if (processed == 0) + return errorType; + buf = (void *)((Byte *)buf + processed); + size -= processed; + } + return SZ_OK; +} + +SRes LookInStream_Read(ILookInStream *stream, void *buf, size_t size) +{ + return LookInStream_Read2(stream, buf, size, SZ_ERROR_INPUT_EOF); +} + +static SRes LookToRead_Look_Lookahead(void *pp, void **buf, size_t *size) +{ + SRes res = SZ_OK; +#if !NEVER_CALLED + (void)pp; + (void)buf; + (void)size; +#else + CLookToRead *p = (CLookToRead *)pp; + size_t size2 = p->size - p->pos; + if (size2 == 0 && *size > 0) + { + p->pos = 0; + size2 = LookToRead_BUF_SIZE; + res = p->realStream->Read(p->realStream, p->buf, &size2); + p->size = size2; + } + if (size2 < *size) + *size = size2; + *buf = p->buf + p->pos; +#endif + return res; +} + +static SRes LookToRead_Look_Exact(void *pp, void **buf, size_t *size) +{ + SRes res = SZ_OK; + CLookToRead *p = (CLookToRead *)pp; + size_t size2 = p->size - p->pos; + if (size2 == 0 && *size > 0) + { + p->pos = 0; + if (*size > LookToRead_BUF_SIZE) + *size = LookToRead_BUF_SIZE; + res = p->realStream->Read(p->realStream, p->buf, size); + size2 = p->size = *size; + } + if (size2 < *size) + *size = size2; + *buf = p->buf + p->pos; + return res; +} + +static SRes LookToRead_Skip(void *pp, size_t offset) +{ + CLookToRead *p = (CLookToRead *)pp; + p->pos += offset; + return SZ_OK; +} + +static SRes LookToRead_Read(void *pp, void *buf, size_t *size) +{ + CLookToRead *p = (CLookToRead *)pp; + size_t rem = p->size - p->pos; + if (rem == 0) + return p->realStream->Read(p->realStream, buf, size); + if (rem > *size) + rem = *size; + memcpy(buf, p->buf + p->pos, rem); + p->pos += rem; + *size = rem; + return SZ_OK; +} + +static SRes LookToRead_Seek(void *pp, Int64 *pos, ESzSeek origin) +{ + CLookToRead *p = (CLookToRead *)pp; + p->pos = p->size = 0; + return p->realStream->Seek(p->realStream, pos, origin); +} + +void LookToRead_CreateVTable(CLookToRead *p, int lookahead) +{ +#if !NEVER_CALLED + lookahead = 0; +#endif + p->s.Look = lookahead ? + LookToRead_Look_Lookahead : + LookToRead_Look_Exact; + p->s.Skip = LookToRead_Skip; + p->s.Read = LookToRead_Read; + p->s.Seek = LookToRead_Seek; +} + +void LookToRead_Init(CLookToRead *p) +{ + p->pos = p->size = 0; +} + +#if NEVER_CALLED +static SRes SecToLook_Read(void *pp, void *buf, size_t *size) +{ + CSecToLook *p = (CSecToLook *)pp; + return LookInStream_LookRead(p->realStream, buf, size); +} + +void SecToLook_CreateVTable(CSecToLook *p) +{ + p->s.Read = SecToLook_Read; +} + +static SRes SecToRead_Read(void *pp, void *buf, size_t *size) +{ + CSecToRead *p = (CSecToRead *)pp; + return p->realStream->Read(p->realStream, buf, size); +} + +void SecToRead_CreateVTable(CSecToRead *p) +{ + p->s.Read = SecToRead_Read; +} +#endif diff --git a/snesreader/7z_C/Bcj2.c b/snesreader/7z_C/Bcj2.c new file mode 100644 index 00000000..bc3dae92 --- /dev/null +++ b/snesreader/7z_C/Bcj2.c @@ -0,0 +1,132 @@ +/* Bcj2.c -- Converter for x86 code (BCJ2) +2008-10-04 : Igor Pavlov : Public domain */ + +#include "Bcj2.h" + +#ifdef _LZMA_PROB32 +#define CProb UInt32 +#else +#define CProb UInt16 +#endif + +#define IsJcc(b0, b1) ((b0) == 0x0F && ((b1) & 0xF0) == 0x80) +#define IsJ(b0, b1) ((b1 & 0xFE) == 0xE8 || IsJcc(b0, b1)) + +#define kNumTopBits 24 +#define kTopValue ((UInt32)1 << kNumTopBits) + +#define kNumBitModelTotalBits 11 +#define kBitModelTotal (1 << kNumBitModelTotalBits) +#define kNumMoveBits 5 + +#define RC_READ_BYTE (*buffer++) +#define RC_TEST { if (buffer == bufferLim) return SZ_ERROR_DATA; } +#define RC_INIT2 code = 0; range = 0xFFFFFFFF; \ + { int i; for (i = 0; i < 5; i++) { RC_TEST; code = (code << 8) | RC_READ_BYTE; }} + +#define NORMALIZE if (range < kTopValue) { RC_TEST; range <<= 8; code = (code << 8) | RC_READ_BYTE; } + +#define IF_BIT_0(p) ttt = *(p); bound = (range >> kNumBitModelTotalBits) * ttt; if (code < bound) +#define UPDATE_0(p) range = bound; *(p) = (CProb)(ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)); NORMALIZE; +#define UPDATE_1(p) range -= bound; code -= bound; *(p) = (CProb)(ttt - (ttt >> kNumMoveBits)); NORMALIZE; + +int Bcj2_Decode( + const Byte *buf0, SizeT size0, + const Byte *buf1, SizeT size1, + const Byte *buf2, SizeT size2, + const Byte *buf3, SizeT size3, + Byte *outBuf, SizeT outSize) +{ + CProb p[256 + 2]; + SizeT inPos = 0, outPos = 0; + + const Byte *buffer, *bufferLim; + UInt32 range, code; + Byte prevByte = 0; + { + unsigned int i; + for (i = 0; i < sizeof(p) / sizeof(p[0]); i++) + p[i] = kBitModelTotal >> 1; + } + buffer = buf3; + bufferLim = buffer + size3; + RC_INIT2 + + if (outSize == 0) + return SZ_OK; + + for (;;) + { + Byte b; + CProb *prob; + UInt32 bound; + UInt32 ttt; + + SizeT limit = size0 - inPos; + if (outSize - outPos < limit) + limit = outSize - outPos; + while (limit != 0) + { + Byte bb = buf0[inPos]; + outBuf[outPos++] = bb; + if (IsJ(prevByte, bb)) + break; + inPos++; + prevByte = bb; + limit--; + } + + if (limit == 0 || outPos == outSize) + break; + + b = buf0[inPos++]; + + if (b == 0xE8) + prob = p + prevByte; + else if (b == 0xE9) + prob = p + 256; + else + prob = p + 257; + + IF_BIT_0(prob) + { + UPDATE_0(prob) + prevByte = b; + } + else + { + UInt32 dest; + const Byte *v; + UPDATE_1(prob) + if (b == 0xE8) + { + v = buf1; + if (size1 < 4) + return SZ_ERROR_DATA; + buf1 += 4; + size1 -= 4; + } + else + { + v = buf2; + if (size2 < 4) + return SZ_ERROR_DATA; + buf2 += 4; + size2 -= 4; + } + dest = (((UInt32)v[0] << 24) | ((UInt32)v[1] << 16) | + ((UInt32)v[2] << 8) | ((UInt32)v[3])) - ((UInt32)outPos + 4); + outBuf[outPos++] = (Byte)dest; + if (outPos == outSize) + break; + outBuf[outPos++] = (Byte)(dest >> 8); + if (outPos == outSize) + break; + outBuf[outPos++] = (Byte)(dest >> 16); + if (outPos == outSize) + break; + outBuf[outPos++] = prevByte = (Byte)(dest >> 24); + } + } + return (outPos == outSize) ? SZ_OK : SZ_ERROR_DATA; +} diff --git a/snesreader/7z_C/Bcj2.h b/snesreader/7z_C/Bcj2.h new file mode 100644 index 00000000..32d450b3 --- /dev/null +++ b/snesreader/7z_C/Bcj2.h @@ -0,0 +1,30 @@ +/* Bcj2.h -- Converter for x86 code (BCJ2) +2008-10-04 : Igor Pavlov : Public domain */ + +#ifndef __BCJ2_H +#define __BCJ2_H + +#include "Types.h" + +/* +Conditions: + outSize <= FullOutputSize, + where FullOutputSize is full size of output stream of x86_2 filter. + +If buf0 overlaps outBuf, there are two required conditions: + 1) (buf0 >= outBuf) + 2) (buf0 + size0 >= outBuf + FullOutputSize). + +Returns: + SZ_OK + SZ_ERROR_DATA - Data error +*/ + +int Bcj2_Decode( + const Byte *buf0, SizeT size0, + const Byte *buf1, SizeT size1, + const Byte *buf2, SizeT size2, + const Byte *buf3, SizeT size3, + Byte *outBuf, SizeT outSize); + +#endif diff --git a/snesreader/7z_C/Bra.h b/snesreader/7z_C/Bra.h new file mode 100644 index 00000000..45e231e8 --- /dev/null +++ b/snesreader/7z_C/Bra.h @@ -0,0 +1,60 @@ +/* Bra.h -- Branch converters for executables +2008-10-04 : Igor Pavlov : Public domain */ + +#ifndef __BRA_H +#define __BRA_H + +#include "Types.h" + +/* +These functions convert relative addresses to absolute addresses +in CALL instructions to increase the compression ratio. + + In: + data - data buffer + size - size of data + ip - current virtual Instruction Pinter (IP) value + state - state variable for x86 converter + encoding - 0 (for decoding), 1 (for encoding) + + Out: + state - state variable for x86 converter + + Returns: + The number of processed bytes. If you call these functions with multiple calls, + you must start next call with first byte after block of processed bytes. + + Type Endian Alignment LookAhead + + x86 little 1 4 + ARMT little 2 2 + ARM little 4 0 + PPC big 4 0 + SPARC big 4 0 + IA64 little 16 0 + + size must be >= Alignment + LookAhead, if it's not last block. + If (size < Alignment + LookAhead), converter returns 0. + + Example: + + UInt32 ip = 0; + for () + { + ; size must be >= Alignment + LookAhead, if it's not last block + SizeT processed = Convert(data, size, ip, 1); + data += processed; + size -= processed; + ip += processed; + } +*/ + +#define x86_Convert_Init(state) { state = 0; } +SizeT x86_Convert(Byte *data, SizeT size, UInt32 ip, UInt32 *state, int encoding); +SizeT ARM_Convert(Byte *data, SizeT size, UInt32 ip, int encoding); +SizeT ARMT_Convert(Byte *data, SizeT size, UInt32 ip, int encoding); +SizeT PPC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding); +SizeT SPARC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding); +SizeT IA64_Convert(Byte *data, SizeT size, UInt32 ip, int encoding); + +#endif diff --git a/snesreader/7z_C/Bra86.c b/snesreader/7z_C/Bra86.c new file mode 100644 index 00000000..1ee0e709 --- /dev/null +++ b/snesreader/7z_C/Bra86.c @@ -0,0 +1,85 @@ +/* Bra86.c -- Converter for x86 code (BCJ) +2008-10-04 : Igor Pavlov : Public domain */ + +#include "Bra.h" + +#define Test86MSByte(b) ((b) == 0 || (b) == 0xFF) + +const Byte kMaskToAllowedStatus[8] = {1, 1, 1, 0, 1, 0, 0, 0}; +const Byte kMaskToBitNumber[8] = {0, 1, 2, 2, 3, 3, 3, 3}; + +SizeT x86_Convert(Byte *data, SizeT size, UInt32 ip, UInt32 *state, int encoding) +{ + SizeT bufferPos = 0, prevPosT; + UInt32 prevMask = *state & 0x7; + if (size < 5) + return 0; + ip += 5; + prevPosT = (SizeT)0 - 1; + + for (;;) + { + Byte *p = data + bufferPos; + Byte *limit = data + size - 4; + for (; p < limit; p++) + if ((*p & 0xFE) == 0xE8) + break; + bufferPos = (SizeT)(p - data); + if (p >= limit) + break; + prevPosT = bufferPos - prevPosT; + if (prevPosT > 3) + prevMask = 0; + else + { + prevMask = (prevMask << ((int)prevPosT - 1)) & 0x7; + if (prevMask != 0) + { + Byte b = p[4 - kMaskToBitNumber[prevMask]]; + if (!kMaskToAllowedStatus[prevMask] || Test86MSByte(b)) + { + prevPosT = bufferPos; + prevMask = ((prevMask << 1) & 0x7) | 1; + bufferPos++; + continue; + } + } + } + prevPosT = bufferPos; + + if (Test86MSByte(p[4])) + { + UInt32 src = ((UInt32)p[4] << 24) | ((UInt32)p[3] << 16) | ((UInt32)p[2] << 8) | ((UInt32)p[1]); + UInt32 dest; + for (;;) + { + Byte b; + int index; + if (encoding) + dest = (ip + (UInt32)bufferPos) + src; + else + dest = src - (ip + (UInt32)bufferPos); + if (prevMask == 0) + break; + index = kMaskToBitNumber[prevMask] * 8; + b = (Byte)(dest >> (24 - index)); + if (!Test86MSByte(b)) + break; + src = dest ^ ((1 << (32 - index)) - 1); + } + p[4] = (Byte)(~(((dest >> 24) & 1) - 1)); + p[3] = (Byte)(dest >> 16); + p[2] = (Byte)(dest >> 8); + p[1] = (Byte)dest; + bufferPos += 5; + } + else + { + prevMask = ((prevMask << 1) & 0x7) | 1; + bufferPos++; + } + } + prevPosT = bufferPos - prevPosT; + *state = ((prevPosT > 3) ? 0 : ((prevMask << ((int)prevPosT - 1)) & 0x7)); + return bufferPos; +} diff --git a/snesreader/7z_C/CpuArch.h b/snesreader/7z_C/CpuArch.h new file mode 100644 index 00000000..7384b0c3 --- /dev/null +++ b/snesreader/7z_C/CpuArch.h @@ -0,0 +1,69 @@ +/* CpuArch.h +2008-08-05 +Igor Pavlov +Public domain */ + +#ifndef __CPUARCH_H +#define __CPUARCH_H + +/* +LITTLE_ENDIAN_UNALIGN means: + 1) CPU is LITTLE_ENDIAN + 2) it's allowed to make unaligned memory accesses +if LITTLE_ENDIAN_UNALIGN is not defined, it means that we don't know +about these properties of platform. +*/ + +#if defined(_M_IX86) || defined(_M_X64) || defined(_M_AMD64) || defined(__i386__) || defined(__x86_64__) +#define LITTLE_ENDIAN_UNALIGN +#endif + +#ifdef LITTLE_ENDIAN_UNALIGN + +#define GetUi16(p) (*(const UInt16 *)(p)) +#define GetUi32(p) (*(const UInt32 *)(p)) +#define GetUi64(p) (*(const UInt64 *)(p)) +#define SetUi32(p, d) *(UInt32 *)(p) = (d); + +#else + +#define GetUi16(p) (((const Byte *)(p))[0] | ((UInt16)((const Byte *)(p))[1] << 8)) + +#define GetUi32(p) ( \ + ((const Byte *)(p))[0] | \ + ((UInt32)((const Byte *)(p))[1] << 8) | \ + ((UInt32)((const Byte *)(p))[2] << 16) | \ + ((UInt32)((const Byte *)(p))[3] << 24)) + +#define GetUi64(p) (GetUi32(p) | ((UInt64)GetUi32(((const Byte *)(p)) + 4) << 32)) + +#define SetUi32(p, d) { UInt32 _x_ = (d); \ + ((Byte *)(p))[0] = (Byte)_x_; \ + ((Byte *)(p))[1] = (Byte)(_x_ >> 8); \ + ((Byte *)(p))[2] = (Byte)(_x_ >> 16); \ + ((Byte *)(p))[3] = (Byte)(_x_ >> 24); } + +#endif + +#if defined(LITTLE_ENDIAN_UNALIGN) && defined(_WIN64) && (_MSC_VER >= 1300) + +#pragma intrinsic(_byteswap_ulong) +#pragma intrinsic(_byteswap_uint64) +#define GetBe32(p) _byteswap_ulong(*(const UInt32 *)(const Byte *)(p)) +#define GetBe64(p) _byteswap_uint64(*(const UInt64 *)(const Byte *)(p)) + +#else + +#define GetBe32(p) ( \ + ((UInt32)((const Byte *)(p))[0] << 24) | \ + ((UInt32)((const Byte *)(p))[1] << 16) | \ + ((UInt32)((const Byte *)(p))[2] << 8) | \ + ((const Byte *)(p))[3] ) + +#define GetBe64(p) (((UInt64)GetBe32(p) << 32) | GetBe32(((const Byte *)(p)) + 4)) + +#endif + +#define GetBe16(p) (((UInt16)((const Byte *)(p))[0] << 8) | ((const Byte *)(p))[1]) + +#endif diff --git a/snesreader/7z_C/LzmaDec.c b/snesreader/7z_C/LzmaDec.c new file mode 100644 index 00000000..fb08e786 --- /dev/null +++ b/snesreader/7z_C/LzmaDec.c @@ -0,0 +1,1010 @@ +/* LzmaDec.c -- LZMA Decoder +2008-11-06 : Igor Pavlov : Public domain */ + +#include "LzmaDec.h" + +#include + +#define kNumTopBits 24 +#define kTopValue ((UInt32)1 << kNumTopBits) + +#define kNumBitModelTotalBits 11 +#define kBitModelTotal (1 << kNumBitModelTotalBits) +#define kNumMoveBits 5 + +#define RC_INIT_SIZE 5 + +#define NORMALIZE if (range < kTopValue) { range <<= 8; code = (code << 8) | (*buf++); } + +#define IF_BIT_0(p) ttt = *(p); NORMALIZE; bound = (range >> kNumBitModelTotalBits) * ttt; if (code < bound) +#define UPDATE_0(p) range = bound; *(p) = (CLzmaProb)(ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)); +#define UPDATE_1(p) range -= bound; code -= bound; *(p) = (CLzmaProb)(ttt - (ttt >> kNumMoveBits)); +#define GET_BIT2(p, i, A0, A1) IF_BIT_0(p) \ + { UPDATE_0(p); i = (i + i); A0; } else \ + { UPDATE_1(p); i = (i + i) + 1; A1; } +#define GET_BIT(p, i) GET_BIT2(p, i, ; , ;) + +#define TREE_GET_BIT(probs, i) { GET_BIT((probs + i), i); } +#define TREE_DECODE(probs, limit, i) \ + { i = 1; do { TREE_GET_BIT(probs, i); } while (i < limit); i -= limit; } + +/* #define _LZMA_SIZE_OPT */ + +#ifdef _LZMA_SIZE_OPT +#define TREE_6_DECODE(probs, i) TREE_DECODE(probs, (1 << 6), i) +#else +#define TREE_6_DECODE(probs, i) \ + { i = 1; \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + i -= 0x40; } +#endif + +#define NORMALIZE_CHECK if (range < kTopValue) { if (buf >= bufLimit) return DUMMY_ERROR; range <<= 8; code = (code << 8) | (*buf++); } + +#define IF_BIT_0_CHECK(p) ttt = *(p); NORMALIZE_CHECK; bound = (range >> kNumBitModelTotalBits) * ttt; if (code < bound) +#define UPDATE_0_CHECK range = bound; +#define UPDATE_1_CHECK range -= bound; code -= bound; +#define GET_BIT2_CHECK(p, i, A0, A1) IF_BIT_0_CHECK(p) \ + { UPDATE_0_CHECK; i = (i + i); A0; } else \ + { UPDATE_1_CHECK; i = (i + i) + 1; A1; } +#define GET_BIT_CHECK(p, i) GET_BIT2_CHECK(p, i, ; , ;) +#define TREE_DECODE_CHECK(probs, limit, i) \ + { i = 1; do { GET_BIT_CHECK(probs + i, i) } while (i < limit); i -= limit; } + + +#define kNumPosBitsMax 4 +#define kNumPosStatesMax (1 << kNumPosBitsMax) + +#define kLenNumLowBits 3 +#define kLenNumLowSymbols (1 << kLenNumLowBits) +#define kLenNumMidBits 3 +#define kLenNumMidSymbols (1 << kLenNumMidBits) +#define kLenNumHighBits 8 +#define kLenNumHighSymbols (1 << kLenNumHighBits) + +#define LenChoice 0 +#define LenChoice2 (LenChoice + 1) +#define LenLow (LenChoice2 + 1) +#define LenMid (LenLow + (kNumPosStatesMax << kLenNumLowBits)) +#define LenHigh (LenMid + (kNumPosStatesMax << kLenNumMidBits)) +#define kNumLenProbs (LenHigh + kLenNumHighSymbols) + + +#define kNumStates 12 +#define kNumLitStates 7 + +#define kStartPosModelIndex 4 +#define kEndPosModelIndex 14 +#define kNumFullDistances (1 << (kEndPosModelIndex >> 1)) + +#define kNumPosSlotBits 6 +#define kNumLenToPosStates 4 + +#define kNumAlignBits 4 +#define kAlignTableSize (1 << kNumAlignBits) + +#define kMatchMinLen 2 +#define kMatchSpecLenStart (kMatchMinLen + kLenNumLowSymbols + kLenNumMidSymbols + kLenNumHighSymbols) + +#define IsMatch 0 +#define IsRep (IsMatch + (kNumStates << kNumPosBitsMax)) +#define IsRepG0 (IsRep + kNumStates) +#define IsRepG1 (IsRepG0 + kNumStates) +#define IsRepG2 (IsRepG1 + kNumStates) +#define IsRep0Long (IsRepG2 + kNumStates) +#define PosSlot (IsRep0Long + (kNumStates << kNumPosBitsMax)) +#define SpecPos (PosSlot + (kNumLenToPosStates << kNumPosSlotBits)) +#define Align (SpecPos + kNumFullDistances - kEndPosModelIndex) +#define LenCoder (Align + kAlignTableSize) +#define RepLenCoder (LenCoder + kNumLenProbs) +#define Literal (RepLenCoder + kNumLenProbs) + +#define LZMA_BASE_SIZE 1846 +#define LZMA_LIT_SIZE 768 + +#define LzmaProps_GetNumProbs(p) ((UInt32)LZMA_BASE_SIZE + (LZMA_LIT_SIZE << ((p)->lc + (p)->lp))) + +#if Literal != LZMA_BASE_SIZE +StopCompilingDueBUG +#endif + +static const Byte kLiteralNextStates[kNumStates * 2] = +{ + 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 4, 5, + 7, 7, 7, 7, 7, 7, 7, 10, 10, 10, 10, 10 +}; + +#define LZMA_DIC_MIN (1 << 12) + +/* First LZMA-symbol is always decoded. +And it decodes new LZMA-symbols while (buf < bufLimit), but "buf" is without last normalization +Out: + Result: + SZ_OK - OK + SZ_ERROR_DATA - Error + p->remainLen: + < kMatchSpecLenStart : normal remain + = kMatchSpecLenStart : finished + = kMatchSpecLenStart + 1 : Flush marker + = kMatchSpecLenStart + 2 : State Init Marker +*/ + +static int MY_FAST_CALL LzmaDec_DecodeReal(CLzmaDec *p, SizeT limit, const Byte *bufLimit) +{ + CLzmaProb *probs = p->probs; + + unsigned state = p->state; + UInt32 rep0 = p->reps[0], rep1 = p->reps[1], rep2 = p->reps[2], rep3 = p->reps[3]; + unsigned pbMask = ((unsigned)1 << (p->prop.pb)) - 1; + unsigned lpMask = ((unsigned)1 << (p->prop.lp)) - 1; + unsigned lc = p->prop.lc; + + Byte *dic = p->dic; + SizeT dicBufSize = p->dicBufSize; + SizeT dicPos = p->dicPos; + + UInt32 processedPos = p->processedPos; + UInt32 checkDicSize = p->checkDicSize; + unsigned len = 0; + + const Byte *buf = p->buf; + UInt32 range = p->range; + UInt32 code = p->code; + + do + { + CLzmaProb *prob; + UInt32 bound; + unsigned ttt; + unsigned posState = processedPos & pbMask; + + prob = probs + IsMatch + (state << kNumPosBitsMax) + posState; + IF_BIT_0(prob) + { + unsigned symbol; + UPDATE_0(prob); + prob = probs + Literal; + if (checkDicSize != 0 || processedPos != 0) + prob += (LZMA_LIT_SIZE * (((processedPos & lpMask) << lc) + + (dic[(dicPos == 0 ? dicBufSize : dicPos) - 1] >> (8 - lc)))); + + if (state < kNumLitStates) + { + symbol = 1; + do { GET_BIT(prob + symbol, symbol) } while (symbol < 0x100); + } + else + { + unsigned matchByte = p->dic[(dicPos - rep0) + ((dicPos < rep0) ? dicBufSize : 0)]; + unsigned offs = 0x100; + symbol = 1; + do + { + unsigned bit; + CLzmaProb *probLit; + matchByte <<= 1; + bit = (matchByte & offs); + probLit = prob + offs + bit + symbol; + GET_BIT2(probLit, symbol, offs &= ~bit, offs &= bit) + } + while (symbol < 0x100); + } + dic[dicPos++] = (Byte)symbol; + processedPos++; + + state = kLiteralNextStates[state]; + /* if (state < 4) state = 0; else if (state < 10) state -= 3; else state -= 6; */ + continue; + } + else + { + UPDATE_1(prob); + prob = probs + IsRep + state; + IF_BIT_0(prob) + { + UPDATE_0(prob); + state += kNumStates; + prob = probs + LenCoder; + } + else + { + UPDATE_1(prob); + if (checkDicSize == 0 && processedPos == 0) + return SZ_ERROR_DATA; + prob = probs + IsRepG0 + state; + IF_BIT_0(prob) + { + UPDATE_0(prob); + prob = probs + IsRep0Long + (state << kNumPosBitsMax) + posState; + IF_BIT_0(prob) + { + UPDATE_0(prob); + dic[dicPos] = dic[(dicPos - rep0) + ((dicPos < rep0) ? dicBufSize : 0)]; + dicPos++; + processedPos++; + state = state < kNumLitStates ? 9 : 11; + continue; + } + UPDATE_1(prob); + } + else + { + UInt32 distance; + UPDATE_1(prob); + prob = probs + IsRepG1 + state; + IF_BIT_0(prob) + { + UPDATE_0(prob); + distance = rep1; + } + else + { + UPDATE_1(prob); + prob = probs + IsRepG2 + state; + IF_BIT_0(prob) + { + UPDATE_0(prob); + distance = rep2; + } + else + { + UPDATE_1(prob); + distance = rep3; + rep3 = rep2; + } + rep2 = rep1; + } + rep1 = rep0; + rep0 = distance; + } + state = state < kNumLitStates ? 8 : 11; + prob = probs + RepLenCoder; + } + { + unsigned limit2, offset; + CLzmaProb *probLen = prob + LenChoice; + IF_BIT_0(probLen) + { + UPDATE_0(probLen); + probLen = prob + LenLow + (posState << kLenNumLowBits); + offset = 0; + limit2 = (1 << kLenNumLowBits); + } + else + { + UPDATE_1(probLen); + probLen = prob + LenChoice2; + IF_BIT_0(probLen) + { + UPDATE_0(probLen); + probLen = prob + LenMid + (posState << kLenNumMidBits); + offset = kLenNumLowSymbols; + limit2 = (1 << kLenNumMidBits); + } + else + { + UPDATE_1(probLen); + probLen = prob + LenHigh; + offset = kLenNumLowSymbols + kLenNumMidSymbols; + limit2 = (1 << kLenNumHighBits); + } + } + TREE_DECODE(probLen, limit2, len); + len += offset; + } + + if (state >= kNumStates) + { + UInt32 distance; + prob = probs + PosSlot + + ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << kNumPosSlotBits); + TREE_6_DECODE(prob, distance); + if (distance >= kStartPosModelIndex) + { + unsigned posSlot = (unsigned)distance; + int numDirectBits = (int)(((distance >> 1) - 1)); + distance = (2 | (distance & 1)); + if (posSlot < kEndPosModelIndex) + { + distance <<= numDirectBits; + prob = probs + SpecPos + distance - posSlot - 1; + { + UInt32 mask = 1; + unsigned i = 1; + do + { + GET_BIT2(prob + i, i, ; , distance |= mask); + mask <<= 1; + } + while (--numDirectBits != 0); + } + } + else + { + numDirectBits -= kNumAlignBits; + do + { + NORMALIZE + range >>= 1; + + { + UInt32 t; + code -= range; + t = (0 - ((UInt32)code >> 31)); /* (UInt32)((Int32)code >> 31) */ + distance = (distance << 1) + (t + 1); + code += range & t; + } + /* + distance <<= 1; + if (code >= range) + { + code -= range; + distance |= 1; + } + */ + } + while (--numDirectBits != 0); + prob = probs + Align; + distance <<= kNumAlignBits; + { + unsigned i = 1; + GET_BIT2(prob + i, i, ; , distance |= 1); + GET_BIT2(prob + i, i, ; , distance |= 2); + GET_BIT2(prob + i, i, ; , distance |= 4); + GET_BIT2(prob + i, i, ; , distance |= 8); + } + if (distance == (UInt32)0xFFFFFFFF) + { + len += kMatchSpecLenStart; + state -= kNumStates; + break; + } + } + } + rep3 = rep2; + rep2 = rep1; + rep1 = rep0; + rep0 = distance + 1; + if (checkDicSize == 0) + { + if (distance >= processedPos) + return SZ_ERROR_DATA; + } + else if (distance >= checkDicSize) + return SZ_ERROR_DATA; + state = (state < kNumStates + kNumLitStates) ? kNumLitStates : kNumLitStates + 3; + /* state = kLiteralNextStates[state]; */ + } + + len += kMatchMinLen; + + if (limit == dicPos) + return SZ_ERROR_DATA; + { + SizeT rem = limit - dicPos; + unsigned curLen = ((rem < len) ? (unsigned)rem : len); + SizeT pos = (dicPos - rep0) + ((dicPos < rep0) ? dicBufSize : 0); + + processedPos += curLen; + + len -= curLen; + if (pos + curLen <= dicBufSize) + { + Byte *dest = dic + dicPos; + ptrdiff_t src = (ptrdiff_t)pos - (ptrdiff_t)dicPos; + const Byte *lim = dest + curLen; + dicPos += curLen; + do + *(dest) = (Byte)*(dest + src); + while (++dest != lim); + } + else + { + do + { + dic[dicPos++] = dic[pos]; + if (++pos == dicBufSize) + pos = 0; + } + while (--curLen != 0); + } + } + } + } + while (dicPos < limit && buf < bufLimit); + NORMALIZE; + p->buf = buf; + p->range = range; + p->code = code; + p->remainLen = len; + p->dicPos = dicPos; + p->processedPos = processedPos; + p->reps[0] = rep0; + p->reps[1] = rep1; + p->reps[2] = rep2; + p->reps[3] = rep3; + p->state = state; + + return SZ_OK; +} + +static void MY_FAST_CALL LzmaDec_WriteRem(CLzmaDec *p, SizeT limit) +{ + if (p->remainLen != 0 && p->remainLen < kMatchSpecLenStart) + { + Byte *dic = p->dic; + SizeT dicPos = p->dicPos; + SizeT dicBufSize = p->dicBufSize; + unsigned len = p->remainLen; + UInt32 rep0 = p->reps[0]; + if (limit - dicPos < len) + len = (unsigned)(limit - dicPos); + + if (p->checkDicSize == 0 && p->prop.dicSize - p->processedPos <= len) + p->checkDicSize = p->prop.dicSize; + + p->processedPos += len; + p->remainLen -= len; + while (len-- != 0) + { + dic[dicPos] = dic[(dicPos - rep0) + ((dicPos < rep0) ? dicBufSize : 0)]; + dicPos++; + } + p->dicPos = dicPos; + } +} + +static int MY_FAST_CALL LzmaDec_DecodeReal2(CLzmaDec *p, SizeT limit, const Byte *bufLimit) +{ + do + { + SizeT limit2 = limit; + if (p->checkDicSize == 0) + { + UInt32 rem = p->prop.dicSize - p->processedPos; + if (limit - p->dicPos > rem) + limit2 = p->dicPos + rem; + } + RINOK(LzmaDec_DecodeReal(p, limit2, bufLimit)); + if (p->processedPos >= p->prop.dicSize) + p->checkDicSize = p->prop.dicSize; + LzmaDec_WriteRem(p, limit); + } + while (p->dicPos < limit && p->buf < bufLimit && p->remainLen < kMatchSpecLenStart); + + if (p->remainLen > kMatchSpecLenStart) + { + p->remainLen = kMatchSpecLenStart; + } + return 0; +} + +typedef enum +{ + DUMMY_ERROR, /* unexpected end of input stream */ + DUMMY_LIT, + DUMMY_MATCH, + DUMMY_REP +} ELzmaDummy; + +static ELzmaDummy LzmaDec_TryDummy(const CLzmaDec *p, const Byte *buf, SizeT inSize) +{ + UInt32 range = p->range; + UInt32 code = p->code; + const Byte *bufLimit = buf + inSize; + CLzmaProb *probs = p->probs; + unsigned state = p->state; + ELzmaDummy res; + + { + CLzmaProb *prob; + UInt32 bound; + unsigned ttt; + unsigned posState = (p->processedPos) & ((1 << p->prop.pb) - 1); + + prob = probs + IsMatch + (state << kNumPosBitsMax) + posState; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK + + /* if (bufLimit - buf >= 7) return DUMMY_LIT; */ + + prob = probs + Literal; + if (p->checkDicSize != 0 || p->processedPos != 0) + prob += (LZMA_LIT_SIZE * + ((((p->processedPos) & ((1 << (p->prop.lp)) - 1)) << p->prop.lc) + + (p->dic[(p->dicPos == 0 ? p->dicBufSize : p->dicPos) - 1] >> (8 - p->prop.lc)))); + + if (state < kNumLitStates) + { + unsigned symbol = 1; + do { GET_BIT_CHECK(prob + symbol, symbol) } while (symbol < 0x100); + } + else + { + unsigned matchByte = p->dic[p->dicPos - p->reps[0] + + ((p->dicPos < p->reps[0]) ? p->dicBufSize : 0)]; + unsigned offs = 0x100; + unsigned symbol = 1; + do + { + unsigned bit; + CLzmaProb *probLit; + matchByte <<= 1; + bit = (matchByte & offs); + probLit = prob + offs + bit + symbol; + GET_BIT2_CHECK(probLit, symbol, offs &= ~bit, offs &= bit) + } + while (symbol < 0x100); + } + res = DUMMY_LIT; + } + else + { + unsigned len; + UPDATE_1_CHECK; + + prob = probs + IsRep + state; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + state = 0; + prob = probs + LenCoder; + res = DUMMY_MATCH; + } + else + { + UPDATE_1_CHECK; + res = DUMMY_REP; + prob = probs + IsRepG0 + state; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + prob = probs + IsRep0Long + (state << kNumPosBitsMax) + posState; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + NORMALIZE_CHECK; + return DUMMY_REP; + } + else + { + UPDATE_1_CHECK; + } + } + else + { + UPDATE_1_CHECK; + prob = probs + IsRepG1 + state; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + } + else + { + UPDATE_1_CHECK; + prob = probs + IsRepG2 + state; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + } + else + { + UPDATE_1_CHECK; + } + } + } + state = kNumStates; + prob = probs + RepLenCoder; + } + { + unsigned limit, offset; + CLzmaProb *probLen = prob + LenChoice; + IF_BIT_0_CHECK(probLen) + { + UPDATE_0_CHECK; + probLen = prob + LenLow + (posState << kLenNumLowBits); + offset = 0; + limit = 1 << kLenNumLowBits; + } + else + { + UPDATE_1_CHECK; + probLen = prob + LenChoice2; + IF_BIT_0_CHECK(probLen) + { + UPDATE_0_CHECK; + probLen = prob + LenMid + (posState << kLenNumMidBits); + offset = kLenNumLowSymbols; + limit = 1 << kLenNumMidBits; + } + else + { + UPDATE_1_CHECK; + probLen = prob + LenHigh; + offset = kLenNumLowSymbols + kLenNumMidSymbols; + limit = 1 << kLenNumHighBits; + } + } + TREE_DECODE_CHECK(probLen, limit, len); + len += offset; + } + + if (state < 4) + { + unsigned posSlot; + prob = probs + PosSlot + + ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << + kNumPosSlotBits); + TREE_DECODE_CHECK(prob, 1 << kNumPosSlotBits, posSlot); + if (posSlot >= kStartPosModelIndex) + { + int numDirectBits = ((posSlot >> 1) - 1); + + /* if (bufLimit - buf >= 8) return DUMMY_MATCH; */ + + if (posSlot < kEndPosModelIndex) + { + prob = probs + SpecPos + ((2 | (posSlot & 1)) << numDirectBits) - posSlot - 1; + } + else + { + numDirectBits -= kNumAlignBits; + do + { + NORMALIZE_CHECK + range >>= 1; + code -= range & (((code - range) >> 31) - 1); + /* if (code >= range) code -= range; */ + } + while (--numDirectBits != 0); + prob = probs + Align; + numDirectBits = kNumAlignBits; + } + { + unsigned i = 1; + do + { + GET_BIT_CHECK(prob + i, i); + } + while (--numDirectBits != 0); + } + } + } + } + } + NORMALIZE_CHECK; + return res; +} + + +static void LzmaDec_InitRc(CLzmaDec *p, const Byte *data) +{ + p->code = ((UInt32)data[1] << 24) | ((UInt32)data[2] << 16) | ((UInt32)data[3] << 8) | ((UInt32)data[4]); + p->range = 0xFFFFFFFF; + p->needFlush = 0; +} + +static +void LzmaDec_InitDicAndState(CLzmaDec *p, Bool initDic, Bool initState) +{ + p->needFlush = 1; + p->remainLen = 0; + p->tempBufSize = 0; + + if (initDic) + { + p->processedPos = 0; + p->checkDicSize = 0; + p->needInitState = 1; + } + if (initState) + p->needInitState = 1; +} + +void LzmaDec_Init(CLzmaDec *p) +{ + p->dicPos = 0; + LzmaDec_InitDicAndState(p, True, True); +} + +static void LzmaDec_InitStateReal(CLzmaDec *p) +{ + UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (p->prop.lc + p->prop.lp)); + UInt32 i; + CLzmaProb *probs = p->probs; + for (i = 0; i < numProbs; i++) + probs[i] = kBitModelTotal >> 1; + p->reps[0] = p->reps[1] = p->reps[2] = p->reps[3] = 1; + p->state = 0; + p->needInitState = 0; +} + +SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, const Byte *src, SizeT *srcLen, + ELzmaFinishMode finishMode, ELzmaStatus *status) +{ + SizeT inSize = *srcLen; + (*srcLen) = 0; + LzmaDec_WriteRem(p, dicLimit); + + *status = LZMA_STATUS_NOT_SPECIFIED; + + while (p->remainLen != kMatchSpecLenStart) + { + int checkEndMarkNow; + + if (p->needFlush != 0) + { + for (; inSize > 0 && p->tempBufSize < RC_INIT_SIZE; (*srcLen)++, inSize--) + p->tempBuf[p->tempBufSize++] = *src++; + if (p->tempBufSize < RC_INIT_SIZE) + { + *status = LZMA_STATUS_NEEDS_MORE_INPUT; + return SZ_OK; + } + if (p->tempBuf[0] != 0) + return SZ_ERROR_DATA; + + LzmaDec_InitRc(p, p->tempBuf); + p->tempBufSize = 0; + } + + checkEndMarkNow = 0; + if (p->dicPos >= dicLimit) + { + if (p->remainLen == 0 && p->code == 0) + { + *status = LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK; + return SZ_OK; + } + if (finishMode == LZMA_FINISH_ANY) + { + *status = LZMA_STATUS_NOT_FINISHED; + return SZ_OK; + } + if (p->remainLen != 0) + { + *status = LZMA_STATUS_NOT_FINISHED; + return SZ_ERROR_DATA; + } + checkEndMarkNow = 1; + } + + if (p->needInitState) + LzmaDec_InitStateReal(p); + + if (p->tempBufSize == 0) + { + SizeT processed; + const Byte *bufLimit; + if (inSize < LZMA_REQUIRED_INPUT_MAX || checkEndMarkNow) + { + int dummyRes = LzmaDec_TryDummy(p, src, inSize); + if (dummyRes == DUMMY_ERROR) + { + memcpy(p->tempBuf, src, inSize); + p->tempBufSize = (unsigned)inSize; + (*srcLen) += inSize; + *status = LZMA_STATUS_NEEDS_MORE_INPUT; + return SZ_OK; + } + if (checkEndMarkNow && dummyRes != DUMMY_MATCH) + { + *status = LZMA_STATUS_NOT_FINISHED; + return SZ_ERROR_DATA; + } + bufLimit = src; + } + else + bufLimit = src + inSize - LZMA_REQUIRED_INPUT_MAX; + p->buf = src; + if (LzmaDec_DecodeReal2(p, dicLimit, bufLimit) != 0) + return SZ_ERROR_DATA; + processed = (SizeT)(p->buf - src); + (*srcLen) += processed; + src += processed; + inSize -= processed; + } + else + { + unsigned rem = p->tempBufSize, lookAhead = 0; + while (rem < LZMA_REQUIRED_INPUT_MAX && lookAhead < inSize) + p->tempBuf[rem++] = src[lookAhead++]; + p->tempBufSize = rem; + if (rem < LZMA_REQUIRED_INPUT_MAX || checkEndMarkNow) + { + int dummyRes = LzmaDec_TryDummy(p, p->tempBuf, rem); + if (dummyRes == DUMMY_ERROR) + { + (*srcLen) += lookAhead; + *status = LZMA_STATUS_NEEDS_MORE_INPUT; + return SZ_OK; + } + if (checkEndMarkNow && dummyRes != DUMMY_MATCH) + { + *status = LZMA_STATUS_NOT_FINISHED; + return SZ_ERROR_DATA; + } + } + p->buf = p->tempBuf; + if (LzmaDec_DecodeReal2(p, dicLimit, p->buf) != 0) + return SZ_ERROR_DATA; + lookAhead -= (rem - (unsigned)(p->buf - p->tempBuf)); + (*srcLen) += lookAhead; + src += lookAhead; + inSize -= lookAhead; + p->tempBufSize = 0; + } + } + if (p->code == 0) + *status = LZMA_STATUS_FINISHED_WITH_MARK; + return (p->code == 0) ? SZ_OK : SZ_ERROR_DATA; +} + +#if NEVER_CALLED +SRes LzmaDec_DecodeToBuf(CLzmaDec *p, Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status) +{ + SizeT outSize = *destLen; + SizeT inSize = *srcLen; + *srcLen = *destLen = 0; + for (;;) + { + SizeT inSizeCur = inSize, outSizeCur, dicPos; + ELzmaFinishMode curFinishMode; + SRes res; + if (p->dicPos == p->dicBufSize) + p->dicPos = 0; + dicPos = p->dicPos; + if (outSize > p->dicBufSize - dicPos) + { + outSizeCur = p->dicBufSize; + curFinishMode = LZMA_FINISH_ANY; + } + else + { + outSizeCur = dicPos + outSize; + curFinishMode = finishMode; + } + + res = LzmaDec_DecodeToDic(p, outSizeCur, src, &inSizeCur, curFinishMode, status); + src += inSizeCur; + inSize -= inSizeCur; + *srcLen += inSizeCur; + outSizeCur = p->dicPos - dicPos; + memcpy(dest, p->dic + dicPos, outSizeCur); + dest += outSizeCur; + outSize -= outSizeCur; + *destLen += outSizeCur; + if (res != 0) + return res; + if (outSizeCur == 0 || outSize == 0) + return SZ_OK; + } +} +#endif + +void LzmaDec_FreeProbs(CLzmaDec *p, ISzAlloc *alloc) +{ + alloc->Free(alloc, p->probs); + p->probs = 0; +} + +static void LzmaDec_FreeDict(CLzmaDec *p, ISzAlloc *alloc) +{ + alloc->Free(alloc, p->dic); + p->dic = 0; +} + +void LzmaDec_Free(CLzmaDec *p, ISzAlloc *alloc) +{ + LzmaDec_FreeProbs(p, alloc); + LzmaDec_FreeDict(p, alloc); +} + +SRes LzmaProps_Decode(CLzmaProps *p, const Byte *data, unsigned size) +{ + UInt32 dicSize; + Byte d; + + if (size < LZMA_PROPS_SIZE) + return SZ_ERROR_UNSUPPORTED; + else + dicSize = data[1] | ((UInt32)data[2] << 8) | ((UInt32)data[3] << 16) | ((UInt32)data[4] << 24); + + if (dicSize < LZMA_DIC_MIN) + dicSize = LZMA_DIC_MIN; + p->dicSize = dicSize; + + d = data[0]; + if (d >= (9 * 5 * 5)) + return SZ_ERROR_UNSUPPORTED; + + p->lc = d % 9; + d /= 9; + p->pb = d / 5; + p->lp = d % 5; + + return SZ_OK; +} + +static SRes LzmaDec_AllocateProbs2(CLzmaDec *p, const CLzmaProps *propNew, ISzAlloc *alloc) +{ + UInt32 numProbs = LzmaProps_GetNumProbs(propNew); + if (p->probs == 0 || numProbs != p->numProbs) + { + LzmaDec_FreeProbs(p, alloc); + p->probs = (CLzmaProb *)alloc->Alloc(alloc, numProbs * sizeof(CLzmaProb)); + p->numProbs = numProbs; + if (p->probs == 0) + return SZ_ERROR_MEM; + } + return SZ_OK; +} + +SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAlloc *alloc) +{ + CLzmaProps propNew; + RINOK(LzmaProps_Decode(&propNew, props, propsSize)); + RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc)); + p->prop = propNew; + return SZ_OK; +} + +SRes LzmaDec_Allocate(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAlloc *alloc) +{ + CLzmaProps propNew; + SizeT dicBufSize; + RINOK(LzmaProps_Decode(&propNew, props, propsSize)); + RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc)); + dicBufSize = propNew.dicSize; + if (p->dic == 0 || dicBufSize != p->dicBufSize) + { + LzmaDec_FreeDict(p, alloc); + p->dic = (Byte *)alloc->Alloc(alloc, dicBufSize); + if (p->dic == 0) + { + LzmaDec_FreeProbs(p, alloc); + return SZ_ERROR_MEM; + } + } + p->dicBufSize = dicBufSize; + p->prop = propNew; + return SZ_OK; +} + +SRes LzmaDecode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, + const Byte *propData, unsigned propSize, ELzmaFinishMode finishMode, + ELzmaStatus *status, ISzAlloc *alloc) +{ + CLzmaDec p; + SRes res; + SizeT inSize = *srcLen; + SizeT outSize = *destLen; + *srcLen = *destLen = 0; + if (inSize < RC_INIT_SIZE) + return SZ_ERROR_INPUT_EOF; + + LzmaDec_Construct(&p); + res = LzmaDec_AllocateProbs(&p, propData, propSize, alloc); + if (res != 0) + return res; + p.dic = dest; + p.dicBufSize = outSize; + + LzmaDec_Init(&p); + + *srcLen = inSize; + res = LzmaDec_DecodeToDic(&p, outSize, src, srcLen, finishMode, status); + + if (res == SZ_OK && *status == LZMA_STATUS_NEEDS_MORE_INPUT) + res = SZ_ERROR_INPUT_EOF; + + (*destLen) = p.dicPos; + LzmaDec_FreeProbs(&p, alloc); + return res; +} diff --git a/snesreader/7z_C/LzmaDec.h b/snesreader/7z_C/LzmaDec.h new file mode 100644 index 00000000..98cdbe94 --- /dev/null +++ b/snesreader/7z_C/LzmaDec.h @@ -0,0 +1,223 @@ +/* LzmaDec.h -- LZMA Decoder +2008-10-04 : Igor Pavlov : Public domain */ + +#ifndef __LZMADEC_H +#define __LZMADEC_H + +#include "Types.h" + +/* #define _LZMA_PROB32 */ +/* _LZMA_PROB32 can increase the speed on some CPUs, + but memory usage for CLzmaDec::probs will be doubled in that case */ + +#ifdef _LZMA_PROB32 +#define CLzmaProb UInt32 +#else +#define CLzmaProb UInt16 +#endif + + +/* ---------- LZMA Properties ---------- */ + +#define LZMA_PROPS_SIZE 5 + +typedef struct _CLzmaProps +{ + unsigned lc, lp, pb; + UInt32 dicSize; +} CLzmaProps; + +/* LzmaProps_Decode - decodes properties +Returns: + SZ_OK + SZ_ERROR_UNSUPPORTED - Unsupported properties +*/ + +SRes LzmaProps_Decode(CLzmaProps *p, const Byte *data, unsigned size); + + +/* ---------- LZMA Decoder state ---------- */ + +/* LZMA_REQUIRED_INPUT_MAX = number of required input bytes for worst case. + Num bits = log2((2^11 / 31) ^ 22) + 26 < 134 + 26 = 160; */ + +#define LZMA_REQUIRED_INPUT_MAX 20 + +typedef struct +{ + CLzmaProps prop; + CLzmaProb *probs; + Byte *dic; + const Byte *buf; + UInt32 range, code; + SizeT dicPos; + SizeT dicBufSize; + UInt32 processedPos; + UInt32 checkDicSize; + unsigned state; + UInt32 reps[4]; + unsigned remainLen; + int needFlush; + int needInitState; + UInt32 numProbs; + unsigned tempBufSize; + Byte tempBuf[LZMA_REQUIRED_INPUT_MAX]; +} CLzmaDec; + +#define LzmaDec_Construct(p) { (p)->dic = 0; (p)->probs = 0; } + +void LzmaDec_Init(CLzmaDec *p); + +/* There are two types of LZMA streams: + 0) Stream with end mark. That end mark adds about 6 bytes to compressed size. + 1) Stream without end mark. You must know exact uncompressed size to decompress such stream. */ + +typedef enum +{ + LZMA_FINISH_ANY, /* finish at any point */ + LZMA_FINISH_END /* block must be finished at the end */ +} ELzmaFinishMode; + +/* ELzmaFinishMode has meaning only if the decoding reaches output limit !!! + + You must use LZMA_FINISH_END, when you know that current output buffer + covers last bytes of block. In other cases you must use LZMA_FINISH_ANY. + + If LZMA decoder sees end marker before reaching output limit, it returns SZ_OK, + and output value of destLen will be less than output buffer size limit. + You can check status result also. + + You can use multiple checks to test data integrity after full decompression: + 1) Check Result and "status" variable. + 2) Check that output(destLen) = uncompressedSize, if you know real uncompressedSize. + 3) Check that output(srcLen) = compressedSize, if you know real compressedSize. + You must use correct finish mode in that case. */ + +typedef enum +{ + LZMA_STATUS_NOT_SPECIFIED, /* use main error code instead */ + LZMA_STATUS_FINISHED_WITH_MARK, /* stream was finished with end mark. */ + LZMA_STATUS_NOT_FINISHED, /* stream was not finished */ + LZMA_STATUS_NEEDS_MORE_INPUT, /* you must provide more input bytes */ + LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK /* there is probability that stream was finished without end mark */ +} ELzmaStatus; + +/* ELzmaStatus is used only as output value for function call */ + + +/* ---------- Interfaces ---------- */ + +/* There are 3 levels of interfaces: + 1) Dictionary Interface + 2) Buffer Interface + 3) One Call Interface + You can select any of these interfaces, but don't mix functions from different + groups for same object. */ + + +/* There are two variants to allocate state for Dictionary Interface: + 1) LzmaDec_Allocate / LzmaDec_Free + 2) LzmaDec_AllocateProbs / LzmaDec_FreeProbs + You can use variant 2, if you set dictionary buffer manually. + For Buffer Interface you must always use variant 1. + +LzmaDec_Allocate* can return: + SZ_OK + SZ_ERROR_MEM - Memory allocation error + SZ_ERROR_UNSUPPORTED - Unsupported properties +*/ + +SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAlloc *alloc); +void LzmaDec_FreeProbs(CLzmaDec *p, ISzAlloc *alloc); + +SRes LzmaDec_Allocate(CLzmaDec *state, const Byte *prop, unsigned propsSize, ISzAlloc *alloc); +void LzmaDec_Free(CLzmaDec *state, ISzAlloc *alloc); + +/* ---------- Dictionary Interface ---------- */ + +/* You can use it, if you want to eliminate the overhead for data copying from + dictionary to some other external buffer. + You must work with CLzmaDec variables directly in this interface. + + STEPS: + LzmaDec_Constr() + LzmaDec_Allocate() + for (each new stream) + { + LzmaDec_Init() + while (it needs more decompression) + { + LzmaDec_DecodeToDic() + use data from CLzmaDec::dic and update CLzmaDec::dicPos + } + } + LzmaDec_Free() +*/ + +/* LzmaDec_DecodeToDic + + The decoding to internal dictionary buffer (CLzmaDec::dic). + You must manually update CLzmaDec::dicPos, if it reaches CLzmaDec::dicBufSize !!! + +finishMode: + It has meaning only if the decoding reaches output limit (dicLimit). + LZMA_FINISH_ANY - Decode just dicLimit bytes. + LZMA_FINISH_END - Stream must be finished after dicLimit. + +Returns: + SZ_OK + status: + LZMA_STATUS_FINISHED_WITH_MARK + LZMA_STATUS_NOT_FINISHED + LZMA_STATUS_NEEDS_MORE_INPUT + LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK + SZ_ERROR_DATA - Data error +*/ + +SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, + const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status); + + +/* ---------- Buffer Interface ---------- */ + +/* It's zlib-like interface. + See LzmaDec_DecodeToDic description for information about STEPS and return results, + but you must use LzmaDec_DecodeToBuf instead of LzmaDec_DecodeToDic and you don't need + to work with CLzmaDec variables manually. + +finishMode: + It has meaning only if the decoding reaches output limit (*destLen). + LZMA_FINISH_ANY - Decode just destLen bytes. + LZMA_FINISH_END - Stream must be finished after (*destLen). +*/ + +SRes LzmaDec_DecodeToBuf(CLzmaDec *p, Byte *dest, SizeT *destLen, + const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status); + + +/* ---------- One Call Interface ---------- */ + +/* LzmaDecode + +finishMode: + It has meaning only if the decoding reaches output limit (*destLen). + LZMA_FINISH_ANY - Decode just destLen bytes. + LZMA_FINISH_END - Stream must be finished after (*destLen). + +Returns: + SZ_OK + status: + LZMA_STATUS_FINISHED_WITH_MARK + LZMA_STATUS_NOT_FINISHED + LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK + SZ_ERROR_DATA - Data error + SZ_ERROR_MEM - Memory allocation error + SZ_ERROR_UNSUPPORTED - Unsupported properties + SZ_ERROR_INPUT_EOF - It needs more bytes in input buffer (src). +*/ + +SRes LzmaDecode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, + const Byte *propData, unsigned propSize, ELzmaFinishMode finishMode, + ELzmaStatus *status, ISzAlloc *alloc); + +#endif diff --git a/snesreader/7z_C/Types.h b/snesreader/7z_C/Types.h new file mode 100644 index 00000000..286ce83b --- /dev/null +++ b/snesreader/7z_C/Types.h @@ -0,0 +1,206 @@ +/* Types.h -- Basic types +2008-11-23 : Igor Pavlov : Public domain */ + +#ifndef __7Z_TYPES_H +#define __7Z_TYPES_H + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +#define SZ_OK 0 + +#define SZ_ERROR_DATA 1 +#define SZ_ERROR_MEM 2 +#define SZ_ERROR_CRC 3 +#define SZ_ERROR_UNSUPPORTED 4 +#define SZ_ERROR_PARAM 5 +#define SZ_ERROR_INPUT_EOF 6 +#define SZ_ERROR_OUTPUT_EOF 7 +#define SZ_ERROR_READ 8 +#define SZ_ERROR_WRITE 9 +#define SZ_ERROR_PROGRESS 10 +#define SZ_ERROR_FAIL 11 +#define SZ_ERROR_THREAD 12 + +#define SZ_ERROR_ARCHIVE 16 +#define SZ_ERROR_NO_ARCHIVE 17 + +typedef int SRes; + +#ifndef RINOK +#define RINOK(x) { int __result__ = (x); if (__result__ != 0) return __result__; } +#endif + +typedef unsigned char Byte; +typedef short Int16; +typedef unsigned short UInt16; + +#ifdef _LZMA_UINT32_IS_ULONG +typedef long Int32; +typedef unsigned long UInt32; +#else +typedef int Int32; +typedef unsigned int UInt32; +#endif + +#ifdef _SZ_NO_INT_64 + +/* define _SZ_NO_INT_64, if your compiler doesn't support 64-bit integers. + NOTES: Some code will work incorrectly in that case! */ + +typedef long Int64; +typedef unsigned long UInt64; + +#else + +#if defined(_MSC_VER) || defined(__BORLANDC__) +typedef __int64 Int64; +typedef unsigned __int64 UInt64; +#else +typedef long long int Int64; +typedef unsigned long long int UInt64; +#endif + +#endif + +#ifdef _LZMA_NO_SYSTEM_SIZE_T +typedef UInt32 SizeT; +#else +typedef size_t SizeT; +#endif + +typedef int Bool; +#define True 1 +#define False 0 + + +#ifdef _MSC_VER + +#if _MSC_VER >= 1300 +#define MY_NO_INLINE __declspec(noinline) +#else +#define MY_NO_INLINE +#endif + +#define MY_CDECL __cdecl +#define MY_STD_CALL __stdcall +#define MY_FAST_CALL MY_NO_INLINE __fastcall + +#else + +#define MY_CDECL +#define MY_STD_CALL +#define MY_FAST_CALL + +#endif + + +/* The following interfaces use first parameter as pointer to structure */ + +typedef struct +{ + SRes (*Read)(void *p, void *buf, size_t *size); + /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream. + (output(*size) < input(*size)) is allowed */ +} ISeqInStream; + +/* it can return SZ_ERROR_INPUT_EOF */ +SRes SeqInStream_Read(ISeqInStream *stream, void *buf, size_t size); +SRes SeqInStream_Read2(ISeqInStream *stream, void *buf, size_t size, SRes errorType); +SRes SeqInStream_ReadByte(ISeqInStream *stream, Byte *buf); + +typedef struct +{ + size_t (*Write)(void *p, const void *buf, size_t size); + /* Returns: result - the number of actually written bytes. + (result < size) means error */ +} ISeqOutStream; + +typedef enum +{ + SZ_SEEK_SET = 0, + SZ_SEEK_CUR = 1, + SZ_SEEK_END = 2 +} ESzSeek; + +typedef struct +{ + SRes (*Read)(void *p, void *buf, size_t *size); /* same as ISeqInStream::Read */ + SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin); +} ISeekInStream; + +typedef struct +{ + SRes (*Look)(void *p, void **buf, size_t *size); + /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream. + (output(*size) > input(*size)) is not allowed + (output(*size) < input(*size)) is allowed */ + SRes (*Skip)(void *p, size_t offset); + /* offset must be <= output(*size) of Look */ + + SRes (*Read)(void *p, void *buf, size_t *size); + /* reads directly (without buffer). It's same as ISeqInStream::Read */ + SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin); +} ILookInStream; + +SRes LookInStream_LookRead(ILookInStream *stream, void *buf, size_t *size); +SRes LookInStream_SeekTo(ILookInStream *stream, UInt64 offset); + +/* reads via ILookInStream::Read */ +SRes LookInStream_Read2(ILookInStream *stream, void *buf, size_t size, SRes errorType); +SRes LookInStream_Read(ILookInStream *stream, void *buf, size_t size); + +#define LookToRead_BUF_SIZE (1 << 14) + +typedef struct +{ + ILookInStream s; + ISeekInStream *realStream; + size_t pos; + size_t size; + Byte buf[LookToRead_BUF_SIZE]; +} CLookToRead; + +void LookToRead_CreateVTable(CLookToRead *p, int lookahead); +void LookToRead_Init(CLookToRead *p); + +typedef struct +{ + ISeqInStream s; + ILookInStream *realStream; +} CSecToLook; + +void SecToLook_CreateVTable(CSecToLook *p); + +typedef struct +{ + ISeqInStream s; + ILookInStream *realStream; +} CSecToRead; + +void SecToRead_CreateVTable(CSecToRead *p); + +typedef struct +{ + SRes (*Progress)(void *p, UInt64 inSize, UInt64 outSize); + /* Returns: result. (result != SZ_OK) means break. + Value (UInt64)(Int64)-1 for size means unknown value. */ +} ICompressProgress; + +typedef struct +{ + void *(*Alloc)(void *p, size_t size); + void (*Free)(void *p, void *address); /* address can be 0 */ +} ISzAlloc; + +#define IAlloc_Alloc(p, size) (p)->Alloc((p), size) +#define IAlloc_Free(p, a) (p)->Free((p), a) + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/snesreader/7z_C/lzma.txt b/snesreader/7z_C/lzma.txt new file mode 100644 index 00000000..d4f4af92 --- /dev/null +++ b/snesreader/7z_C/lzma.txt @@ -0,0 +1,594 @@ +LZMA SDK 4.65 +------------- + +LZMA SDK provides the documentation, samples, header files, libraries, +and tools you need to develop applications that use LZMA compression. + +LZMA is default and general compression method of 7z format +in 7-Zip compression program (www.7-zip.org). LZMA provides high +compression ratio and very fast decompression. + +LZMA is an improved version of famous LZ77 compression algorithm. +It was improved in way of maximum increasing of compression ratio, +keeping high decompression speed and low memory requirements for +decompressing. + + + +LICENSE +------- + +LZMA SDK is written and placed in the public domain by Igor Pavlov. + + +LZMA SDK Contents +----------------- + +LZMA SDK includes: + + - ANSI-C/C++/C#/Java source code for LZMA compressing and decompressing + - Compiled file->file LZMA compressing/decompressing program for Windows system + + +UNIX/Linux version +------------------ +To compile C++ version of file->file LZMA encoding, go to directory +C++/7zip/Compress/LZMA_Alone +and call make to recompile it: + make -f makefile.gcc clean all + +In some UNIX/Linux versions you must compile LZMA with static libraries. +To compile with static libraries, you can use +LIB = -lm -static + + +Files +--------------------- +lzma.txt - LZMA SDK description (this file) +7zFormat.txt - 7z Format description +7zC.txt - 7z ANSI-C Decoder description +methods.txt - Compression method IDs for .7z +lzma.exe - Compiled file->file LZMA encoder/decoder for Windows +history.txt - history of the LZMA SDK + + +Source code structure +--------------------- + +C/ - C files + 7zCrc*.* - CRC code + Alloc.* - Memory allocation functions + Bra*.* - Filters for x86, IA-64, ARM, ARM-Thumb, PowerPC and SPARC code + LzFind.* - Match finder for LZ (LZMA) encoders + LzFindMt.* - Match finder for LZ (LZMA) encoders for multithreading encoding + LzHash.h - Additional file for LZ match finder + LzmaDec.* - LZMA decoding + LzmaEnc.* - LZMA encoding + LzmaLib.* - LZMA Library for DLL calling + Types.h - Basic types for another .c files + Threads.* - The code for multithreading. + + LzmaLib - LZMA Library (.DLL for Windows) + + LzmaUtil - LZMA Utility (file->file LZMA encoder/decoder). + + Archive - files related to archiving + 7z - 7z ANSI-C Decoder + +CPP/ -- CPP files + + Common - common files for C++ projects + Windows - common files for Windows related code + + 7zip - files related to 7-Zip Project + + Common - common files for 7-Zip + + Compress - files related to compression/decompression + + Copy - Copy coder + RangeCoder - Range Coder (special code of compression/decompression) + LZMA - LZMA compression/decompression on C++ + LZMA_Alone - file->file LZMA compression/decompression + Branch - Filters for x86, IA-64, ARM, ARM-Thumb, PowerPC and SPARC code + + Archive - files related to archiving + + Common - common files for archive handling + 7z - 7z C++ Encoder/Decoder + + Bundles - Modules that are bundles of other modules + + Alone7z - 7zr.exe: Standalone version of 7z.exe that supports only 7z/LZMA/BCJ/BCJ2 + Format7zR - 7zr.dll: Reduced version of 7za.dll: extracting/compressing to 7z/LZMA/BCJ/BCJ2 + Format7zExtractR - 7zxr.dll: Reduced version of 7zxa.dll: extracting from 7z/LZMA/BCJ/BCJ2. + + UI - User Interface files + + Client7z - Test application for 7za.dll, 7zr.dll, 7zxr.dll + Common - Common UI files + Console - Code for console archiver + + + +CS/ - C# files + 7zip + Common - some common files for 7-Zip + Compress - files related to compression/decompression + LZ - files related to LZ (Lempel-Ziv) compression algorithm + LZMA - LZMA compression/decompression + LzmaAlone - file->file LZMA compression/decompression + RangeCoder - Range Coder (special code of compression/decompression) + +Java/ - Java files + SevenZip + Compression - files related to compression/decompression + LZ - files related to LZ (Lempel-Ziv) compression algorithm + LZMA - LZMA compression/decompression + RangeCoder - Range Coder (special code of compression/decompression) + + +C/C++ source code of LZMA SDK is part of 7-Zip project. +7-Zip source code can be downloaded from 7-Zip's SourceForge page: + + http://sourceforge.net/projects/sevenzip/ + + + +LZMA features +------------- + - Variable dictionary size (up to 1 GB) + - Estimated compressing speed: about 2 MB/s on 2 GHz CPU + - Estimated decompressing speed: + - 20-30 MB/s on 2 GHz Core 2 or AMD Athlon 64 + - 1-2 MB/s on 200 MHz ARM, MIPS, PowerPC or other simple RISC + - Small memory requirements for decompressing (16 KB + DictionarySize) + - Small code size for decompressing: 5-8 KB + +LZMA decoder uses only integer operations and can be +implemented in any modern 32-bit CPU (or on 16-bit CPU with some conditions). + +Some critical operations that affect the speed of LZMA decompression: + 1) 32*16 bit integer multiply + 2) Misspredicted branches (penalty mostly depends from pipeline length) + 3) 32-bit shift and arithmetic operations + +The speed of LZMA decompressing mostly depends from CPU speed. +Memory speed has no big meaning. But if your CPU has small data cache, +overall weight of memory speed will slightly increase. + + +How To Use +---------- + +Using LZMA encoder/decoder executable +-------------------------------------- + +Usage: LZMA inputFile outputFile [...] + + e: encode file + + d: decode file + + b: Benchmark. There are two tests: compressing and decompressing + with LZMA method. Benchmark shows rating in MIPS (million + instructions per second). Rating value is calculated from + measured speed and it is normalized with Intel's Core 2 results. + Also Benchmark checks possible hardware errors (RAM + errors in most cases). Benchmark uses these settings: + (-a1, -d21, -fb32, -mfbt4). You can change only -d parameter. + Also you can change the number of iterations. Example for 30 iterations: + LZMA b 30 + Default number of iterations is 10. + + + + + -a{N}: set compression mode 0 = fast, 1 = normal + default: 1 (normal) + + d{N}: Sets Dictionary size - [0, 30], default: 23 (8MB) + The maximum value for dictionary size is 1 GB = 2^30 bytes. + Dictionary size is calculated as DictionarySize = 2^N bytes. + For decompressing file compressed by LZMA method with dictionary + size D = 2^N you need about D bytes of memory (RAM). + + -fb{N}: set number of fast bytes - [5, 273], default: 128 + Usually big number gives a little bit better compression ratio + and slower compression process. + + -lc{N}: set number of literal context bits - [0, 8], default: 3 + Sometimes lc=4 gives gain for big files. + + -lp{N}: set number of literal pos bits - [0, 4], default: 0 + lp switch is intended for periodical data when period is + equal 2^N. For example, for 32-bit (4 bytes) + periodical data you can use lp=2. Often it's better to set lc0, + if you change lp switch. + + -pb{N}: set number of pos bits - [0, 4], default: 2 + pb switch is intended for periodical data + when period is equal 2^N. + + -mf{MF_ID}: set Match Finder. Default: bt4. + Algorithms from hc* group doesn't provide good compression + ratio, but they often works pretty fast in combination with + fast mode (-a0). + + Memory requirements depend from dictionary size + (parameter "d" in table below). + + MF_ID Memory Description + + bt2 d * 9.5 + 4MB Binary Tree with 2 bytes hashing. + bt3 d * 11.5 + 4MB Binary Tree with 3 bytes hashing. + bt4 d * 11.5 + 4MB Binary Tree with 4 bytes hashing. + hc4 d * 7.5 + 4MB Hash Chain with 4 bytes hashing. + + -eos: write End Of Stream marker. By default LZMA doesn't write + eos marker, since LZMA decoder knows uncompressed size + stored in .lzma file header. + + -si: Read data from stdin (it will write End Of Stream marker). + -so: Write data to stdout + + +Examples: + +1) LZMA e file.bin file.lzma -d16 -lc0 + +compresses file.bin to file.lzma with 64 KB dictionary (2^16=64K) +and 0 literal context bits. -lc0 allows to reduce memory requirements +for decompression. + + +2) LZMA e file.bin file.lzma -lc0 -lp2 + +compresses file.bin to file.lzma with settings suitable +for 32-bit periodical data (for example, ARM or MIPS code). + +3) LZMA d file.lzma file.bin + +decompresses file.lzma to file.bin. + + +Compression ratio hints +----------------------- + +Recommendations +--------------- + +To increase the compression ratio for LZMA compressing it's desirable +to have aligned data (if it's possible) and also it's desirable to locate +data in such order, where code is grouped in one place and data is +grouped in other place (it's better than such mixing: code, data, code, +data, ...). + + +Filters +------- +You can increase the compression ratio for some data types, using +special filters before compressing. For example, it's possible to +increase the compression ratio on 5-10% for code for those CPU ISAs: +x86, IA-64, ARM, ARM-Thumb, PowerPC, SPARC. + +You can find C source code of such filters in C/Bra*.* files + +You can check the compression ratio gain of these filters with such +7-Zip commands (example for ARM code): +No filter: + 7z a a1.7z a.bin -m0=lzma + +With filter for little-endian ARM code: + 7z a a2.7z a.bin -m0=arm -m1=lzma + +It works in such manner: +Compressing = Filter_encoding + LZMA_encoding +Decompressing = LZMA_decoding + Filter_decoding + +Compressing and decompressing speed of such filters is very high, +so it will not increase decompressing time too much. +Moreover, it reduces decompression time for LZMA_decoding, +since compression ratio with filtering is higher. + +These filters convert CALL (calling procedure) instructions +from relative offsets to absolute addresses, so such data becomes more +compressible. + +For some ISAs (for example, for MIPS) it's impossible to get gain from such filter. + + +LZMA compressed file format +--------------------------- +Offset Size Description + 0 1 Special LZMA properties (lc,lp, pb in encoded form) + 1 4 Dictionary size (little endian) + 5 8 Uncompressed size (little endian). -1 means unknown size + 13 Compressed data + + +ANSI-C LZMA Decoder +~~~~~~~~~~~~~~~~~~~ + +Please note that interfaces for ANSI-C code were changed in LZMA SDK 4.58. +If you want to use old interfaces you can download previous version of LZMA SDK +from sourceforge.net site. + +To use ANSI-C LZMA Decoder you need the following files: +1) LzmaDec.h + LzmaDec.c + Types.h +LzmaUtil/LzmaUtil.c is example application that uses these files. + + +Memory requirements for LZMA decoding +------------------------------------- + +Stack usage of LZMA decoding function for local variables is not +larger than 200-400 bytes. + +LZMA Decoder uses dictionary buffer and internal state structure. +Internal state structure consumes + state_size = (4 + (1.5 << (lc + lp))) KB +by default (lc=3, lp=0), state_size = 16 KB. + + +How To decompress data +---------------------- + +LZMA Decoder (ANSI-C version) now supports 2 interfaces: +1) Single-call Decompressing +2) Multi-call State Decompressing (zlib-like interface) + +You must use external allocator: +Example: +void *SzAlloc(void *p, size_t size) { p = p; return malloc(size); } +void SzFree(void *p, void *address) { p = p; free(address); } +ISzAlloc alloc = { SzAlloc, SzFree }; + +You can use p = p; operator to disable compiler warnings. + + +Single-call Decompressing +------------------------- +When to use: RAM->RAM decompressing +Compile files: LzmaDec.h + LzmaDec.c + Types.h +Compile defines: no defines +Memory Requirements: + - Input buffer: compressed size + - Output buffer: uncompressed size + - LZMA Internal Structures: state_size (16 KB for default settings) + +Interface: + int LzmaDecode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, + const Byte *propData, unsigned propSize, ELzmaFinishMode finishMode, + ELzmaStatus *status, ISzAlloc *alloc); + In: + dest - output data + destLen - output data size + src - input data + srcLen - input data size + propData - LZMA properties (5 bytes) + propSize - size of propData buffer (5 bytes) + finishMode - It has meaning only if the decoding reaches output limit (*destLen). + LZMA_FINISH_ANY - Decode just destLen bytes. + LZMA_FINISH_END - Stream must be finished after (*destLen). + You can use LZMA_FINISH_END, when you know that + current output buffer covers last bytes of stream. + alloc - Memory allocator. + + Out: + destLen - processed output size + srcLen - processed input size + + Output: + SZ_OK + status: + LZMA_STATUS_FINISHED_WITH_MARK + LZMA_STATUS_NOT_FINISHED + LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK + SZ_ERROR_DATA - Data error + SZ_ERROR_MEM - Memory allocation error + SZ_ERROR_UNSUPPORTED - Unsupported properties + SZ_ERROR_INPUT_EOF - It needs more bytes in input buffer (src). + + If LZMA decoder sees end_marker before reaching output limit, it returns OK result, + and output value of destLen will be less than output buffer size limit. + + You can use multiple checks to test data integrity after full decompression: + 1) Check Result and "status" variable. + 2) Check that output(destLen) = uncompressedSize, if you know real uncompressedSize. + 3) Check that output(srcLen) = compressedSize, if you know real compressedSize. + You must use correct finish mode in that case. */ + + +Multi-call State Decompressing (zlib-like interface) +---------------------------------------------------- + +When to use: file->file decompressing +Compile files: LzmaDec.h + LzmaDec.c + Types.h + +Memory Requirements: + - Buffer for input stream: any size (for example, 16 KB) + - Buffer for output stream: any size (for example, 16 KB) + - LZMA Internal Structures: state_size (16 KB for default settings) + - LZMA dictionary (dictionary size is encoded in LZMA properties header) + +1) read LZMA properties (5 bytes) and uncompressed size (8 bytes, little-endian) to header: + unsigned char header[LZMA_PROPS_SIZE + 8]; + ReadFile(inFile, header, sizeof(header) + +2) Allocate CLzmaDec structures (state + dictionary) using LZMA properties + + CLzmaDec state; + LzmaDec_Constr(&state); + res = LzmaDec_Allocate(&state, header, LZMA_PROPS_SIZE, &g_Alloc); + if (res != SZ_OK) + return res; + +3) Init LzmaDec structure before any new LZMA stream. And call LzmaDec_DecodeToBuf in loop + + LzmaDec_Init(&state); + for (;;) + { + ... + int res = LzmaDec_DecodeToBuf(CLzmaDec *p, Byte *dest, SizeT *destLen, + const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode); + ... + } + + +4) Free all allocated structures + LzmaDec_Free(&state, &g_Alloc); + +For full code example, look at C/LzmaUtil/LzmaUtil.c code. + + +How To compress data +-------------------- + +Compile files: LzmaEnc.h + LzmaEnc.c + Types.h + +LzFind.c + LzFind.h + LzFindMt.c + LzFindMt.h + LzHash.h + +Memory Requirements: + - (dictSize * 11.5 + 6 MB) + state_size + +Lzma Encoder can use two memory allocators: +1) alloc - for small arrays. +2) allocBig - for big arrays. + +For example, you can use Large RAM Pages (2 MB) in allocBig allocator for +better compression speed. Note that Windows has bad implementation for +Large RAM Pages. +It's OK to use same allocator for alloc and allocBig. + + +Single-call Compression with callbacks +-------------------------------------- + +Check C/LzmaUtil/LzmaUtil.c as example, + +When to use: file->file decompressing + +1) you must implement callback structures for interfaces: +ISeqInStream +ISeqOutStream +ICompressProgress +ISzAlloc + +static void *SzAlloc(void *p, size_t size) { p = p; return MyAlloc(size); } +static void SzFree(void *p, void *address) { p = p; MyFree(address); } +static ISzAlloc g_Alloc = { SzAlloc, SzFree }; + + CFileSeqInStream inStream; + CFileSeqOutStream outStream; + + inStream.funcTable.Read = MyRead; + inStream.file = inFile; + outStream.funcTable.Write = MyWrite; + outStream.file = outFile; + + +2) Create CLzmaEncHandle object; + + CLzmaEncHandle enc; + + enc = LzmaEnc_Create(&g_Alloc); + if (enc == 0) + return SZ_ERROR_MEM; + + +3) initialize CLzmaEncProps properties; + + LzmaEncProps_Init(&props); + + Then you can change some properties in that structure. + +4) Send LZMA properties to LZMA Encoder + + res = LzmaEnc_SetProps(enc, &props); + +5) Write encoded properties to header + + Byte header[LZMA_PROPS_SIZE + 8]; + size_t headerSize = LZMA_PROPS_SIZE; + UInt64 fileSize; + int i; + + res = LzmaEnc_WriteProperties(enc, header, &headerSize); + fileSize = MyGetFileLength(inFile); + for (i = 0; i < 8; i++) + header[headerSize++] = (Byte)(fileSize >> (8 * i)); + MyWriteFileAndCheck(outFile, header, headerSize) + +6) Call encoding function: + res = LzmaEnc_Encode(enc, &outStream.funcTable, &inStream.funcTable, + NULL, &g_Alloc, &g_Alloc); + +7) Destroy LZMA Encoder Object + LzmaEnc_Destroy(enc, &g_Alloc, &g_Alloc); + + +If callback function return some error code, LzmaEnc_Encode also returns that code. + + +Single-call RAM->RAM Compression +-------------------------------- + +Single-call RAM->RAM Compression is similar to Compression with callbacks, +but you provide pointers to buffers instead of pointers to stream callbacks: + +HRes LzmaEncode(Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen, + CLzmaEncProps *props, Byte *propsEncoded, SizeT *propsSize, int writeEndMark, + ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig); + +Return code: + SZ_OK - OK + SZ_ERROR_MEM - Memory allocation error + SZ_ERROR_PARAM - Incorrect paramater + SZ_ERROR_OUTPUT_EOF - output buffer overflow + SZ_ERROR_THREAD - errors in multithreading functions (only for Mt version) + + + +LZMA Defines +------------ + +_LZMA_SIZE_OPT - Enable some optimizations in LZMA Decoder to get smaller executable code. + +_LZMA_PROB32 - It can increase the speed on some 32-bit CPUs, but memory usage for + some structures will be doubled in that case. + +_LZMA_UINT32_IS_ULONG - Define it if int is 16-bit on your compiler and long is 32-bit. + +_LZMA_NO_SYSTEM_SIZE_T - Define it if you don't want to use size_t type. + + +C++ LZMA Encoder/Decoder +~~~~~~~~~~~~~~~~~~~~~~~~ +C++ LZMA code use COM-like interfaces. So if you want to use it, +you can study basics of COM/OLE. +C++ LZMA code is just wrapper over ANSI-C code. + + +C++ Notes +~~~~~~~~~~~~~~~~~~~~~~~~ +If you use some C++ code folders in 7-Zip (for example, C++ code for .7z handling), +you must check that you correctly work with "new" operator. +7-Zip can be compiled with MSVC 6.0 that doesn't throw "exception" from "new" operator. +So 7-Zip uses "CPP\Common\NewHandler.cpp" that redefines "new" operator: +operator new(size_t size) +{ + void *p = ::malloc(size); + if (p == 0) + throw CNewException(); + return p; +} +If you use MSCV that throws exception for "new" operator, you can compile without +"NewHandler.cpp". So standard exception will be used. Actually some code of +7-Zip catches any exception in internal code and converts it to HRESULT code. +So you don't need to catch CNewException, if you call COM interfaces of 7-Zip. + +--- + +http://www.7-zip.org +http://www.7-zip.org/sdk.html +http://www.7-zip.org/support.html diff --git a/snesreader/7z_C/readme.txt b/snesreader/7z_C/readme.txt new file mode 100644 index 00000000..a07f1fcc --- /dev/null +++ b/snesreader/7z_C/readme.txt @@ -0,0 +1,19 @@ +Modified LZMA 4.65 +------------------ +This is just the ANSI C 7-zip extraction code from the LZMA 4.65 source +code release, with unnecessary files removed. I've made minor changes to +allow the code to compile with almost all warnings enabled in GCC. + +* Made relevant functions extern "C" so that they can be called from +C++. + +* Put all files in same directory and removed "../../" from #includes. + +* Made private (unprototyped) functions static. + +* #if'd out code that is never called. + +* Removed a couple of Windows references. + +-- +Shay Green diff --git a/snesreader/Makefile b/snesreader/Makefile new file mode 100644 index 00000000..73d19abd --- /dev/null +++ b/snesreader/Makefile @@ -0,0 +1,186 @@ +include nall/Makefile +include nall/Makefile-qt + +c := $(compiler) +cpp := $(subst cc,++,$(compiler)) +flags := -O3 -I. -Iobj -fomit-frame-pointer +link := + +ifeq ($(platform),x) + flags := -fPIC $(flags) + link += -s +else ifeq ($(platform),osx) + flags := -fPIC $(flags) +endif + +objects := snesreader + +# fex +objects += Binary_Extractor blargg_common blargg_errors Data_Reader fex File_Extractor Gzip_Extractor Gzip_Reader Rar_Extractor Zip7_Extractor Zip_Extractor Zlib_Inflater +# zlib +objects += adler32 crc32 inffast inflate inftrees zutil +# 7-zip +objects += 7zAlloc 7zBuf 7zCrc 7zDecode 7zExtract 7zHeader 7zIn 7zItem 7zStream Bcj2 Bra86 LzmaDec +# unrar +objects += archive arcread coder crc encname extract getbits model rarvm rarvmtbl rawread suballoc unicode unpack unpack15 unpack20 unrar unrar_misc unrar_open +# micro-bunzip +objects += micro-bunzip +# jma +objects += jma jcrc32 lzmadecode 7zlzma iiostrm inbyte lzma winout + +compile = \ + $(strip \ + $(if $(filter %.c,$<), \ + $(c) $(flags) $1 -c $< -o $@, \ + $(if $(filter %.cpp,$<), \ + $(cpp) $(flags) $1 -c $< -o $@ \ + ) \ + ) \ + ) + +%.o: $<; $(call compile) + +all: build; + +objects := $(patsubst %,obj/%.o,$(objects)) +moc_headers := $(call rwildcard,./,%.moc.hpp) +moc_objects := $(foreach f,$(moc_headers),obj/$(notdir $(patsubst %.moc.hpp,%.moc,$f))) + +# automatically run moc on all .moc.hpp (MOC header) files +%.moc: $<; $(moc) -i $< -o $@ + +# automatically generate %.moc build rules +__list = $(moc_headers) +$(foreach f,$(moc_objects), \ + $(eval __file = $(word 1,$(__list))) \ + $(eval __list = $(wordlist 2,$(words $(__list)),$(__list))) \ + $(eval $f: $(__file)) \ +) + + +################## +### snesreader ### +################## + +obj/snesreader.o: snesreader.cpp * + $(call compile,$(qtinc)) + +########### +### fex ### +########### + +obj/Binary_Extractor.o: fex/Binary_Extractor.cpp fex/* +obj/blargg_common.o : fex/blargg_common.cpp fex/* +obj/blargg_errors.o : fex/blargg_errors.cpp fex/* +obj/Data_Reader.o : fex/Data_Reader.cpp fex/* +obj/fex.o : fex/fex.cpp fex/* +obj/File_Extractor.o : fex/File_Extractor.cpp fex/* +obj/Gzip_Extractor.o : fex/Gzip_Extractor.cpp fex/* +obj/Gzip_Reader.o : fex/Gzip_Reader.cpp fex/* +obj/Rar_Extractor.o : fex/Rar_Extractor.cpp fex/* +obj/Zip7_Extractor.o : fex/Zip7_Extractor.cpp fex/* +obj/Zip_Extractor.o : fex/Zip_Extractor.cpp fex/* +obj/Zlib_Inflater.o : fex/Zlib_Inflater.cpp fex/* + +############ +### zlib ### +############ + +obj/adler32.o : zlib/adler32.c zlib/* +obj/crc32.o : zlib/crc32.c zlib/* +obj/inffast.o : zlib/inffast.c zlib/* +obj/inflate.o : zlib/inflate.c zlib/* +obj/inftrees.o: zlib/inftrees.c zlib/* +obj/zutil.o : zlib/zutil.c zlib/* + +############# +### 7-zip ### +############# + +obj/7zAlloc.o : 7z_C/7zAlloc.c 7z_C/* +obj/7zBuf.o : 7z_C/7zBuf.c 7z_C/* +obj/7zCrc.o : 7z_C/7zCrc.c 7z_C/* +obj/7zDecode.o : 7z_C/7zDecode.c 7z_C/* +obj/7zExtract.o: 7z_C/7zExtract.c 7z_C/* +obj/7zHeader.o : 7z_C/7zHeader.c 7z_C/* +obj/7zIn.o : 7z_C/7zIn.c 7z_C/* +obj/7zItem.o : 7z_C/7zItem.c 7z_C/* +obj/7zStream.o : 7z_C/7zStream.c 7z_C/* +obj/Bcj2.o : 7z_C/Bcj2.c 7z_C/* +obj/Bra86.o : 7z_C/Bra86.c 7z_C/* +obj/LzmaDec.o : 7z_C/LzmaDec.c 7z_C/* + +#################### +### micro-bunzip ### +#################### + +obj/micro-bunzip.o: micro-bunzip/micro-bunzip.c micro-bunzip/* + +############# +### unrar ### +############# + +obj/archive.o : unrar/archive.cpp unrar/* +obj/arcread.o : unrar/arcread.cpp unrar/* +obj/coder.o : unrar/coder.cpp unrar/* +obj/crc.o : unrar/crc.cpp unrar/* +obj/encname.o : unrar/encname.cpp unrar/* +obj/extract.o : unrar/extract.cpp unrar/* +obj/getbits.o : unrar/getbits.cpp unrar/* +obj/model.o : unrar/model.cpp unrar/* +obj/rarvm.o : unrar/rarvm.cpp unrar/* +obj/rarvmtbl.o : unrar/rarvmtbl.cpp unrar/* +obj/rawread.o : unrar/rawread.cpp unrar/* +obj/suballoc.o : unrar/suballoc.cpp unrar/* +obj/unicode.o : unrar/unicode.cpp unrar/* +obj/unpack.o : unrar/unpack.cpp unrar/* +obj/unpack15.o : unrar/unpack15.cpp unrar/* +obj/unpack20.o : unrar/unpack20.cpp unrar/* +obj/unrar.o : unrar/unrar.cpp unrar/* +obj/unrar_misc.o: unrar/unrar_misc.cpp unrar/* +obj/unrar_open.o: unrar/unrar_open.cpp unrar/* + +############## +### libjma ### +############## + +obj/jma.o : libjma/jma.cpp libjma/* +obj/jcrc32.o : libjma/jcrc32.cpp libjma/* +obj/lzmadecode.o: libjma/lzmadecode.cpp libjma/* +obj/7zlzma.o : libjma/7zlzma.cpp libjma/* +obj/iiostrm.o : libjma/iiostrm.cpp libjma/* +obj/inbyte.o : libjma/inbyte.cpp libjma/* +obj/lzma.o : libjma/lzma.cpp libjma/* +obj/winout.o : libjma/winout.cpp libjma/* + +############### +### targets ### +############### + +build: $(moc_objects) $(objects) +ifeq ($(platform),x) + ar rcs libsnesreader.a $(objects) + $(cpp) $(link) -o libsnesreader.so -shared -Wl,-soname,libsnesreader.so.1 $(objects) $(qtlib) +else ifeq ($(platform),osx) + ar rcs libsnesreader.a $(objects) + $(cpp) $(link) -o libsnesreader.dylib -shared -dynamiclib $(objects) $(qtlib) +else ifeq ($(platform),win) + $(cpp) $(link) -o snesreader.dll -shared -Wl,--out-implib,libsnesreader.a $(objects) $(qtlib) +endif + +install: +ifeq ($(platform),x) + install -D -m 755 libsnesreader.a $(DESTDIR)$(prefix)/lib + install -D -m 755 libsnesreader.so $(DESTDIR)$(prefix)/lib + ldconfig -n $(DESTDIR)$(prefix)/lib +else ifeq ($(platform),osx) + cp libsnesreader.dylib /usr/local/lib/libsnesreader.dylib +endif + +clean: + -@$(call delete,obj/*.o) + -@$(call delete,obj/*.moc) + -@$(call delete,libsnesreader.a) + -@$(call delete,libsnesreader.so) + -@$(call delete,libsnesreader.dylib) + -@$(call delete,snesreader.dll) diff --git a/snesreader/cc.bat b/snesreader/cc.bat new file mode 100644 index 00000000..8359a530 --- /dev/null +++ b/snesreader/cc.bat @@ -0,0 +1,2 @@ +@mingw32-make +@pause \ No newline at end of file diff --git a/snesreader/clean.bat b/snesreader/clean.bat new file mode 100644 index 00000000..d8bb7e0b --- /dev/null +++ b/snesreader/clean.bat @@ -0,0 +1 @@ +@mingw32-make clean diff --git a/snesreader/fex/Binary_Extractor.cpp b/snesreader/fex/Binary_Extractor.cpp new file mode 100644 index 00000000..8c85b992 --- /dev/null +++ b/snesreader/fex/Binary_Extractor.cpp @@ -0,0 +1,77 @@ +// File_Extractor 1.0.0. http://www.slack.net/~ant/ + +#include "Binary_Extractor.h" + +/* Copyright (C) 2005-2009 Shay Green. This module is free software; you +can redistribute it and/or modify it under the terms of the GNU Lesser +General Public License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. This +module is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +details. You should have received a copy of the GNU Lesser General Public +License along with this module; if not, write to the Free Software Foundation, +Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ + +#include "blargg_source.h" + +// TODO: could close file once data has been read into memory + +static File_Extractor* new_binary() +{ + return BLARGG_NEW Binary_Extractor; +} + +fex_type_t_ const fex_bin_type [1] = {{ + "", + &new_binary, + "file", + NULL +}}; + +Binary_Extractor::Binary_Extractor() : + File_Extractor( fex_bin_type ) +{ } + +Binary_Extractor::~Binary_Extractor() +{ + close(); +} + +blargg_err_t Binary_Extractor::open_path_v() +{ + set_name( arc_path() ); + return blargg_ok; +} + +blargg_err_t Binary_Extractor::open_v() +{ + set_name( arc_path() ); + set_info( arc().remain(), 0, 0 ); + return blargg_ok; +} + +void Binary_Extractor::close_v() +{ } + +blargg_err_t Binary_Extractor::next_v() +{ + return blargg_ok; +} + +blargg_err_t Binary_Extractor::rewind_v() +{ + return open_path_v(); +} + +blargg_err_t Binary_Extractor::stat_v() +{ + RETURN_ERR( open_arc_file() ); + RETURN_ERR( arc().seek( 0 ) ); + return open_v(); +} + +blargg_err_t Binary_Extractor::extract_v( void* p, int n ) +{ + return arc().read( p, n ); +} diff --git a/snesreader/fex/Binary_Extractor.h b/snesreader/fex/Binary_Extractor.h new file mode 100644 index 00000000..339a0873 --- /dev/null +++ b/snesreader/fex/Binary_Extractor.h @@ -0,0 +1,26 @@ +// Presents a single file as an "archive" of just that file. + +// File_Extractor 1.0.0 +#ifndef BINARY_EXTRACTOR_H +#define BINARY_EXTRACTOR_H + +#include "File_Extractor.h" + +class Binary_Extractor : public File_Extractor { +public: + Binary_Extractor(); + virtual ~Binary_Extractor(); + +protected: + virtual blargg_err_t open_path_v(); + virtual blargg_err_t open_v(); + virtual void close_v(); + + virtual blargg_err_t next_v(); + virtual blargg_err_t rewind_v(); + + virtual blargg_err_t stat_v(); + virtual blargg_err_t extract_v( void*, int ); +}; + +#endif diff --git a/snesreader/fex/Data_Reader.cpp b/snesreader/fex/Data_Reader.cpp new file mode 100644 index 00000000..cbea9f47 --- /dev/null +++ b/snesreader/fex/Data_Reader.cpp @@ -0,0 +1,551 @@ +// File_Extractor 1.0.0. http://www.slack.net/~ant/ + +#include "Data_Reader.h" + +#include "blargg_endian.h" +#include +#include + +#if BLARGG_UTF8_PATHS + #include +#endif + +/* Copyright (C) 2005-2009 Shay Green. This module is free software; you +can redistribute it and/or modify it under the terms of the GNU Lesser +General Public License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. This +module is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +details. You should have received a copy of the GNU Lesser General Public +License along with this module; if not, write to the Free Software Foundation, +Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ + +#include "blargg_source.h" + +// Data_Reader + +blargg_err_t Data_Reader::read( void* p, int n ) +{ + assert( n >= 0 ); + + if ( n < 0 ) + return blargg_err_caller; + + if ( n <= 0 ) + return blargg_ok; + + if ( n > remain() ) + return blargg_err_file_eof; + + blargg_err_t err = read_v( p, n ); + if ( !err ) + remain_ -= n; + + return err; +} + +blargg_err_t Data_Reader::read_avail( void* p, int* n_ ) +{ + assert( *n_ >= 0 ); + + int n = min( *n_, remain() ); + *n_ = 0; + + if ( n < 0 ) + return blargg_err_caller; + + if ( n <= 0 ) + return blargg_ok; + + blargg_err_t err = read_v( p, n ); + if ( !err ) + { + remain_ -= n; + *n_ = n; + } + + return err; +} + +blargg_err_t Data_Reader::read_avail( void* p, long* n ) +{ + int i = STATIC_CAST(int, *n); + blargg_err_t err = read_avail( p, &i ); + *n = i; + return err; +} + +blargg_err_t Data_Reader::skip_v( int count ) +{ + char buf [512]; + while ( count ) + { + int n = min( count, (int) sizeof buf ); + count -= n; + RETURN_ERR( read_v( buf, n ) ); + } + return blargg_ok; +} + +blargg_err_t Data_Reader::skip( int n ) +{ + assert( n >= 0 ); + + if ( n < 0 ) + return blargg_err_caller; + + if ( n <= 0 ) + return blargg_ok; + + if ( n > remain() ) + return blargg_err_file_eof; + + blargg_err_t err = skip_v( n ); + if ( !err ) + remain_ -= n; + + return err; +} + + +// File_Reader + +blargg_err_t File_Reader::seek( int n ) +{ + assert( n >= 0 ); + + if ( n < 0 ) + return blargg_err_caller; + + if ( n == tell() ) + return blargg_ok; + + if ( n > size() ) + return blargg_err_file_eof; + + blargg_err_t err = seek_v( n ); + if ( !err ) + set_tell( n ); + + return err; +} + +blargg_err_t File_Reader::skip_v( int n ) +{ + return seek_v( tell() + n ); +} + + +// Subset_Reader + +Subset_Reader::Subset_Reader( Data_Reader* dr, int size ) : + in( dr ) +{ + set_remain( min( size, dr->remain() ) ); +} + +blargg_err_t Subset_Reader::read_v( void* p, int s ) +{ + return in->read( p, s ); +} + + +// Remaining_Reader + +Remaining_Reader::Remaining_Reader( void const* h, int size, Data_Reader* r ) : + in( r ) +{ + header = h; + header_remain = size; + + set_remain( size + r->remain() ); +} + +blargg_err_t Remaining_Reader::read_v( void* out, int count ) +{ + int first = min( count, header_remain ); + if ( first ) + { + memcpy( out, header, first ); + header = STATIC_CAST(char const*, header) + first; + header_remain -= first; + } + + return in->read( STATIC_CAST(char*, out) + first, count - first ); +} + + +// Mem_File_Reader + +Mem_File_Reader::Mem_File_Reader( const void* p, long s ) : + begin( STATIC_CAST(const char*, p) ) +{ + set_size( s ); +} + +blargg_err_t Mem_File_Reader::read_v( void* p, int s ) +{ + memcpy( p, begin + tell(), s ); + return blargg_ok; +} + +blargg_err_t Mem_File_Reader::seek_v( int ) +{ + return blargg_ok; +} + + +// Callback_Reader + +Callback_Reader::Callback_Reader( callback_t c, long s, void* d ) : + callback( c ), + user_data( d ) +{ + set_remain( s ); +} + +blargg_err_t Callback_Reader::read_v( void* out, int count ) +{ + return callback( user_data, out, count ); +} + + +// Callback_File_Reader + +Callback_File_Reader::Callback_File_Reader( callback_t c, long s, void* d ) : + callback( c ), + user_data( d ) +{ + set_size( s ); +} + +blargg_err_t Callback_File_Reader::read_v( void* out, int count ) +{ + return callback( user_data, out, count, tell() ); +} + +blargg_err_t Callback_File_Reader::seek_v( int ) +{ + return blargg_ok; +} + + +// BLARGG_UTF8_PATHS + +#if BLARGG_UTF8_PATHS + +// Thanks to byuu for the idea for BLARGG_UTF8_PATHS and the implementations + +// Converts wide-character path to UTF-8. Free result with free(). Only supported on Windows. +char* blargg_to_utf8( const wchar_t* wpath ) +{ + if ( wpath == NULL ) + return NULL; + + int needed = WideCharToMultiByte( CP_UTF8, 0, wpath, -1, NULL, 0, NULL, NULL ); + if ( needed <= 0 ) + return NULL; + + char* path = (char*) malloc( needed ); + if ( path == NULL ) + return NULL; + + int actual = WideCharToMultiByte( CP_UTF8, 0, wpath, -1, path, needed, NULL, NULL ); + if ( actual == 0 ) + { + free( path ); + return NULL; + } + + assert( actual == needed ); + return path; +} + +// Converts UTF-8 path to wide-character. Free result with free() Only supported on Windows. +wchar_t* blargg_to_wide( const char* path ) +{ + if ( path == NULL ) + return NULL; + + int needed = MultiByteToWideChar( CP_UTF8, 0, path, -1, NULL, 0 ); + if ( needed <= 0 ) + return NULL; + + wchar_t* wpath = (wchar_t*) malloc( needed * sizeof *wpath ); + if ( wpath == NULL ) + return NULL; + + int actual = MultiByteToWideChar( CP_UTF8, 0, path, -1, wpath, needed ); + if ( actual == 0 ) + { + free( wpath ); + return NULL; + } + + assert( actual == needed ); + return wpath; +} + +static FILE* blargg_fopen( const char path [], const char mode [] ) +{ + FILE* file = NULL; + wchar_t* wmode = NULL; + wchar_t* wpath = NULL; + + wpath = blargg_to_wide( path ); + if ( wpath ) + { + wmode = blargg_to_wide( mode ); + if ( wmode ) + file = _wfopen( wpath, wmode ); + } + + // Save and restore errno in case free() clears it + int saved_errno = errno; + free( wmode ); + free( wpath ); + errno = saved_errno; + + return file; +} + +#else + +static inline FILE* blargg_fopen( const char path [], const char mode [] ) +{ + return fopen( path, mode ); +} + +#endif + + +// Std_File_Reader + +Std_File_Reader::Std_File_Reader() +{ + file_ = NULL; +} + +Std_File_Reader::~Std_File_Reader() +{ + close(); +} + +static blargg_err_t blargg_fopen( FILE** out, const char path [] ) +{ + errno = 0; + *out = blargg_fopen( path, "rb" ); + if ( !*out ) + { + #ifdef ENOENT + if ( errno == ENOENT ) + return blargg_err_file_missing; + #endif + #ifdef ENOMEM + if ( errno == ENOMEM ) + return blargg_err_memory; + #endif + return blargg_err_file_read; + } + + return blargg_ok; +} + +static blargg_err_t blargg_fsize( FILE* f, long* out ) +{ + if ( fseek( f, 0, SEEK_END ) ) + return blargg_err_file_io; + + *out = ftell( f ); + if ( *out < 0 ) + return blargg_err_file_io; + + if ( fseek( f, 0, SEEK_SET ) ) + return blargg_err_file_io; + + return blargg_ok; +} + +blargg_err_t Std_File_Reader::open( const char path [] ) +{ + close(); + + FILE* f; + RETURN_ERR( blargg_fopen( &f, path ) ); + + long s; + blargg_err_t err = blargg_fsize( f, &s ); + if ( err ) + { + fclose( f ); + return err; + } + + file_ = f; + set_size( s ); + + return blargg_ok; +} + +void Std_File_Reader::make_unbuffered() +{ + if ( setvbuf( STATIC_CAST(FILE*, file_), NULL, _IONBF, 0 ) ) + check( false ); // shouldn't fail, but OK if it does +} + +blargg_err_t Std_File_Reader::read_v( void* p, int s ) +{ + if ( (size_t) s != fread( p, 1, s, STATIC_CAST(FILE*, file_) ) ) + { + // Data_Reader's wrapper should prevent EOF + check( !feof( STATIC_CAST(FILE*, file_) ) ); + + return blargg_err_file_io; + } + + return blargg_ok; +} + +blargg_err_t Std_File_Reader::seek_v( int n ) +{ + if ( fseek( STATIC_CAST(FILE*, file_), n, SEEK_SET ) ) + { + // Data_Reader's wrapper should prevent EOF + check( !feof( STATIC_CAST(FILE*, file_) ) ); + + return blargg_err_file_io; + } + + return blargg_ok; +} + +void Std_File_Reader::close() +{ + if ( file_ ) + { + fclose( STATIC_CAST(FILE*, file_) ); + file_ = NULL; + } +} + + +// Gzip_File_Reader + +#ifdef HAVE_ZLIB_H + +#include "zlib.h" + +static const char* get_gzip_eof( const char path [], long* eof ) +{ + FILE* file; + RETURN_ERR( blargg_fopen( &file, path ) ); + + int const h_size = 4; + unsigned char h [h_size]; + + // read four bytes to ensure that we can seek to -4 later + if ( fread( h, 1, h_size, file ) != (size_t) h_size || h[0] != 0x1F || h[1] != 0x8B ) + { + // Not gzipped + if ( ferror( file ) ) + return blargg_err_file_io; + + if ( fseek( file, 0, SEEK_END ) ) + return blargg_err_file_io; + + *eof = ftell( file ); + if ( *eof < 0 ) + return blargg_err_file_io; + } + else + { + // Gzipped; get uncompressed size from end + if ( fseek( file, -h_size, SEEK_END ) ) + return blargg_err_file_io; + + if ( fread( h, 1, h_size, file ) != (size_t) h_size ) + return blargg_err_file_io; + + *eof = get_le32( h ); + } + + if ( fclose( file ) ) + check( false ); + + return blargg_ok; +} + +Gzip_File_Reader::Gzip_File_Reader() +{ + file_ = NULL; +} + +Gzip_File_Reader::~Gzip_File_Reader() +{ + close(); +} + +blargg_err_t Gzip_File_Reader::open( const char path [] ) +{ + close(); + + long s; + RETURN_ERR( get_gzip_eof( path, &s ) ); + + file_ = gzopen( path, "rb" ); + if ( !file_ ) + return blargg_err_file_read; + + set_size( s ); + return blargg_ok; +} + +static blargg_err_t convert_gz_error( gzFile file ) +{ + int err; + gzerror( file, &err ); + + switch ( err ) + { + case Z_STREAM_ERROR: break; + case Z_DATA_ERROR: return blargg_err_file_corrupt; + case Z_MEM_ERROR: return blargg_err_memory; + case Z_BUF_ERROR: break; + } + return blargg_err_internal; +} + +blargg_err_t Gzip_File_Reader::read_v( void* p, int s ) +{ + int result = gzread( file_, p, s ); + if ( result != s ) + { + if ( result < 0 ) + return convert_gz_error( file_ ); + + return blargg_err_file_corrupt; + } + + return blargg_ok; +} + +blargg_err_t Gzip_File_Reader::seek_v( int n ) +{ + if ( gzseek( file_, n, SEEK_SET ) < 0 ) + return convert_gz_error( file_ ); + + return blargg_ok; +} + +void Gzip_File_Reader::close() +{ + if ( file_ ) + { + if ( gzclose( file_ ) ) + check( false ); + file_ = NULL; + } +} + +#endif diff --git a/snesreader/fex/Data_Reader.h b/snesreader/fex/Data_Reader.h new file mode 100644 index 00000000..be206f7b --- /dev/null +++ b/snesreader/fex/Data_Reader.h @@ -0,0 +1,264 @@ +// Lightweight interface for reading data from byte stream + +// File_Extractor 1.0.0 +#ifndef DATA_READER_H +#define DATA_READER_H + +#include "blargg_common.h" + +/* Some functions accept a long instead of int for convenience where caller has +a long due to some other interface, and would otherwise have to get a warning, +or cast it (and verify that it wasn't outside the range of an int). + +To really support huge (>2GB) files, long isn't a solution, since there's no +guarantee it's more than 32 bits. We'd need to use long long (if available), or +something compiler-specific, and change all places file sizes or offsets are +used. */ + +// Supports reading and finding out how many bytes are remaining +class Data_Reader { +public: + + // Reads min(*n,remain()) bytes and sets *n to this number, thus trying to read more + // tham remain() bytes doesn't result in error, just *n being set to remain(). + blargg_err_t read_avail( void* p, int* n ); + blargg_err_t read_avail( void* p, long* n ); + + // Reads exactly n bytes, or returns error if they couldn't ALL be read. + // Reading past end of file results in blargg_err_file_eof. + blargg_err_t read( void* p, int n ); + + // Number of bytes remaining until end of file + int remain() const { return remain_; } + + // Reads and discards n bytes. Skipping past end of file results in blargg_err_file_eof. + blargg_err_t skip( int n ); + + virtual ~Data_Reader() { } + +private: + // noncopyable + Data_Reader( const Data_Reader& ); + Data_Reader& operator = ( const Data_Reader& ); + +// Derived interface +protected: + Data_Reader() : remain_( 0 ) { } + + // Sets remain + void set_remain( int n ) { assert( n >= 0 ); remain_ = n; } + + // Do same as read(). Guaranteed that 0 < n <= remain(). Value of remain() is updated + // AFTER this call succeeds, not before. set_remain() should NOT be called from this. + virtual blargg_err_t read_v( void*, int n ) BLARGG_PURE( { (void)n; return blargg_ok; } ) + + // Do same as skip(). Guaranteed that 0 < n <= remain(). Default just reads data + // and discards it. Value of remain() is updated AFTER this call succeeds, not + // before. set_remain() should NOT be called from this. + virtual blargg_err_t skip_v( int n ); + +// Implementation +public: + BLARGG_DISABLE_NOTHROW + +private: + int remain_; +}; + + +// Supports seeking in addition to Data_Reader operations +class File_Reader : public Data_Reader { +public: + + // Size of file + int size() const { return size_; } + + // Current position in file + int tell() const { return size_ - remain(); } + + // Goes to new position + blargg_err_t seek( int ); + +// Derived interface +protected: + // Sets size and resets position + void set_size( int n ) { size_ = n; Data_Reader::set_remain( n ); } + void set_size( long n ) { set_size( STATIC_CAST(int, n) ); } + + // Sets reported position + void set_tell( int i ) { assert( 0 <= i && i <= size_ ); Data_Reader::set_remain( size_ - i ); } + + // Do same as seek(). Guaranteed that 0 <= n <= size(). Value of tell() is updated + // AFTER this call succeeds, not before. set_* functions should NOT be called from this. + virtual blargg_err_t seek_v( int n ) BLARGG_PURE( { (void)n; return blargg_ok; } ) + +// Implementation +protected: + File_Reader() : size_( 0 ) { } + + virtual blargg_err_t skip_v( int ); + +private: + int size_; + + void set_remain(); // avoid accidental use of set_remain +}; + + +// Reads from file on disk +class Std_File_Reader : public File_Reader { +public: + + // Opens file + blargg_err_t open( const char path [] ); + + // Closes file if one was open + void close(); + + // Switches to unbuffered mode. Useful if buffering is already being + // done at a higher level. + void make_unbuffered(); + +// Implementation +public: + Std_File_Reader(); + virtual ~Std_File_Reader(); + +protected: + virtual blargg_err_t read_v( void*, int ); + virtual blargg_err_t seek_v( int ); + +private: + void* file_; +}; + + +// Treats range of memory as a file +class Mem_File_Reader : public File_Reader { +public: + + Mem_File_Reader( const void* begin, long size ); + +// Implementation +protected: + virtual blargg_err_t read_v( void*, int ); + virtual blargg_err_t seek_v( int ); + +private: + const char* const begin; +}; + + +// Allows only count bytes to be read from reader passed +class Subset_Reader : public Data_Reader { +public: + + Subset_Reader( Data_Reader*, int count ); + +// Implementation +protected: + virtual blargg_err_t read_v( void*, int ); + +private: + Data_Reader* const in; +}; + + +// Joins already-read header and remaining data into original file. +// Meant for cases where you've already read header and don't want +// to seek and re-read data (for efficiency). +class Remaining_Reader : public Data_Reader { +public: + + Remaining_Reader( void const* header, int header_size, Data_Reader* ); + +// Implementation +protected: + virtual blargg_err_t read_v( void*, int ); + +private: + Data_Reader* const in; + void const* header; + int header_remain; +}; + + +// Invokes callback function to read data +extern "C" { // necessary to be usable from C + typedef const char* (*callback_reader_func_t)( + void* user_data, // Same value passed to constructor + void* out, // Buffer to place data into + int count // Number of bytes to read + ); +} +class Callback_Reader : public Data_Reader { +public: + typedef callback_reader_func_t callback_t; + Callback_Reader( callback_t, long size, void* user_data ); + +// Implementation +protected: + virtual blargg_err_t read_v( void*, int ); + +private: + callback_t const callback; + void* const user_data; +}; + + +// Invokes callback function to read data +extern "C" { // necessary to be usable from C + typedef const char* (*callback_file_reader_func_t)( + void* user_data, // Same value passed to constructor + void* out, // Buffer to place data into + int count, // Number of bytes to read + int pos // Position in file to read from + ); +} +class Callback_File_Reader : public File_Reader { +public: + typedef callback_file_reader_func_t callback_t; + Callback_File_Reader( callback_t, long size, void* user_data ); + +// Implementation +protected: + virtual blargg_err_t read_v( void*, int ); + virtual blargg_err_t seek_v( int ); + +private: + callback_t const callback; + void* const user_data; +}; + + +#ifdef HAVE_ZLIB_H + +// Reads file compressed with gzip (or uncompressed) +class Gzip_File_Reader : public File_Reader { +public: + + // Opens possibly gzipped file + blargg_err_t open( const char path [] ); + + // Closes file if one was open + void close(); + +// Implementation +public: + Gzip_File_Reader(); + ~Gzip_File_Reader(); + +protected: + virtual blargg_err_t read_v( void*, int ); + virtual blargg_err_t seek_v( int ); + +private: + // void* so "zlib.h" doesn't have to be included here + void* file_; +}; +#endif + +char* blargg_to_utf8( const wchar_t* ); +wchar_t* blargg_to_wide( const char* ); + +#endif diff --git a/snesreader/fex/File_Extractor.cpp b/snesreader/fex/File_Extractor.cpp new file mode 100644 index 00000000..e060e095 --- /dev/null +++ b/snesreader/fex/File_Extractor.cpp @@ -0,0 +1,341 @@ +// File_Extractor 1.0.0. http://www.slack.net/~ant/ + +#include "File_Extractor.h" + +/* Copyright (C) 2005-2009 Shay Green. This module is free software; you +can redistribute it and/or modify it under the terms of the GNU Lesser +General Public License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. This +module is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +details. You should have received a copy of the GNU Lesser General Public +License along with this module; if not, write to the Free Software Foundation, +Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ + +#include "blargg_source.h" + +File_Extractor::fex_t( fex_type_t t ) : + type_( t ) +{ + own_file_ = NULL; + + close_(); +} + +// Open + +blargg_err_t File_Extractor::set_path( const char* path ) +{ + if ( !path ) + path = ""; + + RETURN_ERR( path_.resize( strlen( path ) + 1 ) ); + memcpy( path_.begin(), path, path_.size() ); + return blargg_ok; +} + +blargg_err_t File_Extractor::open( const char path [] ) +{ + close(); + + RETURN_ERR( set_path( path ) ); + + blargg_err_t err = open_path_v(); + if ( err ) + close(); + else + opened_ = true; + + return err; +} + +blargg_err_t File_Extractor::open_path_v() +{ + RETURN_ERR( open_arc_file() ); + + return open_v(); +} + +inline +static void make_unbuffered( Std_File_Reader* r ) +{ + r->make_unbuffered(); +} + +inline +static void make_unbuffered( void* ) +{ } + +blargg_err_t File_Extractor::open_arc_file( bool unbuffered ) +{ + if ( reader_ ) + return blargg_ok; + + FEX_FILE_READER* in = BLARGG_NEW FEX_FILE_READER; + CHECK_ALLOC( in ); + + blargg_err_t err = in->open( arc_path() ); + if ( err ) + { + delete in; + } + else + { + reader_ = in; + own_file(); + if ( unbuffered ) + make_unbuffered( in ); + } + + return err; +} + +blargg_err_t File_Extractor::open( File_Reader* input, const char* path ) +{ + close(); + + RETURN_ERR( set_path( path ) ); + + RETURN_ERR( input->seek( 0 ) ); + + reader_ = input; + blargg_err_t err = open_v(); + if ( err ) + close(); + else + opened_ = true; + + return err; +} + +// Close + +void File_Extractor::close() +{ + close_v(); + close_(); +} + +void File_Extractor::close_() +{ + delete own_file_; + own_file_ = NULL; + + tell_ = 0; + reader_ = NULL; + opened_ = false; + + path_.clear(); + clear_file(); +} + +File_Extractor::~fex_t() +{ + check( !opened() ); // fails if derived destructor didn't call close() + + delete own_file_; +} + +// Scanning + +void File_Extractor::clear_file() +{ + name_ = NULL; + wname_ = NULL; + done_ = true; + stat_called = false; + data_ptr_ = NULL; + + set_info( 0 ); + own_data_.clear(); + clear_file_v(); +} + +void File_Extractor::set_name( const char new_name [], const wchar_t* new_wname ) +{ + name_ = new_name; + wname_ = new_wname; + done_ = false; +} + +void File_Extractor::set_info( int new_size, unsigned date, unsigned crc ) +{ + size_ = new_size; + date_ = (date != 0xFFFFFFFF ? date : 0); + crc32_ = crc; + set_remain( new_size ); +} + +blargg_err_t File_Extractor::next_() +{ + tell_++; + clear_file(); + + blargg_err_t err = next_v(); + if ( err ) + clear_file(); + + return err; +} + +blargg_err_t File_Extractor::next() +{ + assert( !done() ); + return next_(); +} + +blargg_err_t File_Extractor::rewind() +{ + assert( opened() ); + + tell_ = 0; + clear_file(); + + blargg_err_t err = rewind_v(); + if ( err ) + clear_file(); + + return err; +} + +blargg_err_t File_Extractor::stat() +{ + assert( !done() ); + + if ( !stat_called ) + { + RETURN_ERR( stat_v() ); + stat_called = true; + } + return blargg_ok; +} + +// Tell/seek + +int const pos_offset = 1; + +fex_pos_t File_Extractor::tell_arc() const +{ + assert( opened() ); + + fex_pos_t pos = tell_arc_v(); + assert( pos >= 0 ); + + return pos + pos_offset; +} + +blargg_err_t File_Extractor::seek_arc( fex_pos_t pos ) +{ + assert( opened() ); + assert( pos != 0 ); + + clear_file(); + + blargg_err_t err = seek_arc_v( pos - pos_offset ); + if ( err ) + clear_file(); + + return err; +} + +fex_pos_t File_Extractor::tell_arc_v() const +{ + return tell_; +} + +blargg_err_t File_Extractor::seek_arc_v( fex_pos_t pos ) +{ + // >= because seeking to current file should always reset read pointer etc. + if ( tell_ >= pos ) + RETURN_ERR( rewind() ); + + while ( tell_ < pos ) + { + RETURN_ERR( next_() ); + + if ( done() ) + { + assert( false ); + return blargg_err_caller; + } + } + + assert( tell_ == pos ); + + return blargg_ok; +} + +// Extraction + +blargg_err_t File_Extractor::rewind_file() +{ + RETURN_ERR( stat() ); + + if ( tell() > 0 ) + { + if ( data_ptr_ ) + { + set_remain( size() ); + } + else + { + RETURN_ERR( seek_arc( tell_arc() ) ); + RETURN_ERR( stat() ); + } + } + + return blargg_ok; +} + +blargg_err_t File_Extractor::data( const void** data_out ) +{ + assert( !done() ); + + *data_out = NULL; + if ( !data_ptr_ ) + { + int old_tell = tell(); + + RETURN_ERR( rewind_file() ); + + void const* ptr; + RETURN_ERR( data_v( &ptr ) ); + data_ptr_ = ptr; + + // Now that data is in memory, we can seek by simply setting remain + set_remain( size() - old_tell ); + } + + *data_out = data_ptr_; + return blargg_ok; +} + +blargg_err_t File_Extractor::data_v( void const** out ) +{ + RETURN_ERR( own_data_.resize( size() ) ); + *out = own_data_.begin(); + + blargg_err_t err = extract_v( own_data_.begin(), own_data_.size() ); + if ( err ) + own_data_.clear(); + + return err; +} + +blargg_err_t File_Extractor::extract_v( void* out, int count ) +{ + void const* p; + RETURN_ERR( data( &p ) ); + memcpy( out, STATIC_CAST(char const*,p) + (size() - remain()), count ); + + return blargg_ok; +} + +blargg_err_t File_Extractor::read_v( void* out, int count ) +{ + if ( data_ptr_ ) + return File_Extractor::extract_v( out, count ); + + return extract_v( out, count ); +} diff --git a/snesreader/fex/File_Extractor.h b/snesreader/fex/File_Extractor.h new file mode 100644 index 00000000..ad25d5f8 --- /dev/null +++ b/snesreader/fex/File_Extractor.h @@ -0,0 +1,191 @@ +// Compressed file archive interface + +// File_Extractor 1.0.0 +#ifndef FILE_EXTRACTOR_H +#define FILE_EXTRACTOR_H + +#include "blargg_common.h" +#include "Data_Reader.h" +#include "fex.h" + +struct fex_t : private Data_Reader { +public: + virtual ~fex_t(); + +// Open/close + + // Opens archive from custom data source. Keeps pointer until close(). + blargg_err_t open( File_Reader* input, const char* path = NULL ); + + // Takes ownership of File_Reader* passed to open(), so that close() + // will delete it. + void own_file() { own_file_ = reader_; } + + // See fex.h + blargg_err_t open( const char path [] ); + fex_type_t type() const { return type_; } + void close(); + +// Scanning + + // See fex.h + bool done() const { return done_; } + blargg_err_t next(); + blargg_err_t rewind(); + fex_pos_t tell_arc() const; + blargg_err_t seek_arc( fex_pos_t ); + +// Info + + // See fex.h + const char* name() const { return name_; } + const wchar_t* wname() const { return wname_; } + blargg_err_t stat(); + int size() const { assert( stat_called ); return size_; } + unsigned int dos_date() const { return date_; } + unsigned int crc32() const { return crc32_; } + +// Extraction + + // Data_Reader to current file's data, so standard Data_Reader interface can + // be used, rather than having to treat archives specially. stat() must have + // been called. + Data_Reader& reader() { assert( stat_called ); return *this; } + + // See fex.h + blargg_err_t data( const void** data_out ); + int tell() const { return size_ - remain(); } + +// Derived interface +protected: + + // Sets type of object + fex_t( fex_type_t ); + + // Path to archive file, or "" if none supplied + const char* arc_path() const { return path_.begin(); } + + // Opens archive file if it's not already. If unbuffered is true, opens file + // without any buffering. + blargg_err_t open_arc_file( bool unbuffered = false ); + + // Archive file + File_Reader& arc() const { return *reader_; } + + // Sets current file name + void set_name( const char name [], const wchar_t* wname = NULL ); + + // Sets current file information + void set_info( int size, unsigned date = 0, unsigned crc = 0 ); + +// User overrides + + // Overrides must do indicated task. Non-pure functions have reasonable default + // implementation. Overrides should avoid calling public functions like + // next() and rewind(). + + // Open archive using file_path(). OK to delay actual file opening until later. + // Default just calls open_arc_file(), then open_v(). + virtual blargg_err_t open_path_v(); + + // Open archive using file() for source data. If unsupported, return error. + virtual blargg_err_t open_v() BLARGG_PURE( ; ) + + // Go to next file in archive and call set_name() and optionally set_info() + virtual blargg_err_t next_v() BLARGG_PURE( ; ) + + // Go back to first file in archive + virtual blargg_err_t rewind_v() BLARGG_PURE( ; ) + + // Close archive. Called even if open_path_v() or open_v() return unsuccessfully. + virtual void close_v() BLARGG_PURE( ; ) + + // Clear any fields related to current file + virtual void clear_file_v() { } + + // Call set_info() if not already called by next_v() + virtual blargg_err_t stat_v() { return blargg_ok; } + + // Return value that allows later return to this file. Result must be >= 0. + virtual fex_pos_t tell_arc_v() const; + + // Return to previously saved position + virtual blargg_err_t seek_arc_v( fex_pos_t ); + + // One or both of the following must be overridden + + // Provide pointer to data for current file in archive + virtual blargg_err_t data_v( const void** out ); + + // Extract next n bytes + virtual blargg_err_t extract_v( void* out, int n ); + +// Implementation +public: + BLARGG_DISABLE_NOTHROW + +private: + fex_type_t const type_; + + // Archive file + blargg_vector path_; + File_Reader* reader_; + File_Reader* own_file_; + bool opened_; + + // Position in archive + fex_pos_t tell_; // only used by default implementation of tell/seek + bool done_; + + // Info for current file in archive + const char* name_; + const wchar_t* wname_; + unsigned date_; + unsigned crc32_; + int size_; + bool stat_called; + + // Current file contents + void const* data_ptr_; // NULL if not read into memory + blargg_vector own_data_; + + bool opened() const { return opened_; } + void clear_file(); + void close_(); + blargg_err_t set_path( const char* path ); + blargg_err_t rewind_file(); + blargg_err_t next_(); + + // Data_Reader overrides + // TODO: override skip_v? + virtual blargg_err_t read_v( void* out, int n ); +}; + +struct fex_type_t_ +{ + const char* extension; + File_Extractor* (*new_fex)(); + const char* name; + blargg_err_t (*init)(); // Called by fex_init(). Can be NULL. +}; + +extern const fex_type_t_ + fex_7z_type [1], + fex_gz_type [1], + fex_rar_type [1], + fex_zip_type [1], + fex_bin_type [1]; + +inline blargg_err_t File_Extractor::open_v() { return blargg_ok; } +inline blargg_err_t File_Extractor::next_v() { return blargg_ok; } +inline blargg_err_t File_Extractor::rewind_v() { return blargg_ok; } +inline void File_Extractor::close_v() { } + +// Default to Std_File_Reader for archive access +#ifndef FEX_FILE_READER + #define FEX_FILE_READER Std_File_Reader +#elif defined (FEX_FILE_READER_INCLUDE) + #include FEX_FILE_READER_INCLUDE +#endif + +#endif diff --git a/snesreader/fex/Gzip_Extractor.cpp b/snesreader/fex/Gzip_Extractor.cpp new file mode 100644 index 00000000..f169fed9 --- /dev/null +++ b/snesreader/fex/Gzip_Extractor.cpp @@ -0,0 +1,98 @@ +// File_Extractor 1.0.0. http://www.slack.net/~ant/ + +#include "Gzip_Extractor.h" + +/* Copyright (C) 2005-2009 Shay Green. This module is free software; you +can redistribute it and/or modify it under the terms of the GNU Lesser +General Public License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. This +module is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +details. You should have received a copy of the GNU Lesser General Public +License along with this module; if not, write to the Free Software Foundation, +Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ + +#include "blargg_source.h" + +// TODO: could close file once data has been read into memory + +static blargg_err_t init_gzip_file() +{ + get_crc_table(); // initialize zlib's CRC-32 tables + return blargg_ok; +} + +static File_Extractor* new_gzip() +{ + return BLARGG_NEW Gzip_Extractor; +} + +fex_type_t_ const fex_gz_type [1] = {{ + ".gz", + &new_gzip, + "gzipped file", + &init_gzip_file +}}; + +Gzip_Extractor::Gzip_Extractor() : + File_Extractor( fex_gz_type ) +{ } + +Gzip_Extractor::~Gzip_Extractor() +{ + close(); +} + +blargg_err_t Gzip_Extractor::open_path_v() +{ + // skip opening file + return open_v(); +} + +blargg_err_t Gzip_Extractor::stat_v() +{ + RETURN_ERR( open_arc_file( true ) ); + if ( !gr.opened() || gr.tell() != 0 ) + RETURN_ERR( gr.open( &arc() ) ); + + set_info( gr.remain(), 0, gr.crc32() ); + return blargg_ok; +} + +blargg_err_t Gzip_Extractor::open_v() +{ + // Remove .gz suffix + size_t len = strlen( arc_path() ); + if ( fex_has_extension( arc_path(), ".gz" ) ) + len -= 3; + + RETURN_ERR( name.resize( len + 1 ) ); + memcpy( name.begin(), arc_path(), name.size() ); + name [name.size() - 1] = '\0'; + + set_name( name.begin() ); + return blargg_ok; +} + +void Gzip_Extractor::close_v() +{ + name.clear(); + gr.close(); +} + +blargg_err_t Gzip_Extractor::next_v() +{ + return blargg_ok; +} + +blargg_err_t Gzip_Extractor::rewind_v() +{ + set_name( name.begin() ); + return blargg_ok; +} + +blargg_err_t Gzip_Extractor::extract_v( void* p, int n ) +{ + return gr.read( p, n ); +} diff --git a/snesreader/fex/Gzip_Extractor.h b/snesreader/fex/Gzip_Extractor.h new file mode 100644 index 00000000..814dc9b3 --- /dev/null +++ b/snesreader/fex/Gzip_Extractor.h @@ -0,0 +1,34 @@ +// Presents a gzipped file as an "archive" of just that file. +// Also handles non-gzipped files. + +// File_Extractor 1.0.0 +#ifndef GZIP_EXTRACTOR_H +#define GZIP_EXTRACTOR_H + +#include "File_Extractor.h" +#include "Gzip_Reader.h" + +class Gzip_Extractor : public File_Extractor { +public: + Gzip_Extractor(); + virtual ~Gzip_Extractor(); + +protected: + virtual blargg_err_t open_path_v(); + virtual blargg_err_t open_v(); + virtual void close_v(); + + virtual blargg_err_t next_v(); + virtual blargg_err_t rewind_v(); + + virtual blargg_err_t stat_v(); + virtual blargg_err_t extract_v( void*, int ); + +private: + Gzip_Reader gr; + blargg_vector name; + + void set_info_(); +}; + +#endif diff --git a/snesreader/fex/Gzip_Reader.cpp b/snesreader/fex/Gzip_Reader.cpp new file mode 100644 index 00000000..2aad302c --- /dev/null +++ b/snesreader/fex/Gzip_Reader.cpp @@ -0,0 +1,85 @@ +// File_Extractor 1.0.0. http://www.slack.net/~ant/ + +#include "Gzip_Reader.h" + +#include "blargg_endian.h" + +/* Copyright (C) 2006-2009 Shay Green. This module is free software; you +can redistribute it and/or modify it under the terms of the GNU Lesser +General Public License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. This +module is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +details. You should have received a copy of the GNU Lesser General Public +License along with this module; if not, write to the Free Software Foundation, +Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ + +#include "blargg_source.h" + +Gzip_Reader::Gzip_Reader() +{ + close(); +} + +Gzip_Reader::~Gzip_Reader() +{ } + +static blargg_err_t gzip_reader_read( void* file, void* out, int* count ) +{ + return STATIC_CAST(File_Reader*,file)->read_avail( out, count ); +} + +blargg_err_t Gzip_Reader::calc_size() +{ + size_ = in->size(); + crc32_ = 0; + if ( inflater.deflated() ) + { + byte trailer [8]; + int old_pos = in->tell(); + RETURN_ERR( in->seek( size_ - sizeof trailer ) ); + RETURN_ERR( in->read( trailer, sizeof trailer ) ); + RETURN_ERR( in->seek( old_pos ) ); + crc32_ = get_le32( trailer + 0 ); + + unsigned n = get_le32( trailer + 4 ); + if ( n > INT_MAX ) + return BLARGG_ERR( BLARGG_ERR_FILE_FEATURE, "gzip larger than 2GB" ); + + size_ = n; + } + return blargg_ok; +} + +blargg_err_t Gzip_Reader::open( File_Reader* new_in ) +{ + close(); + + in = new_in; + RETURN_ERR( in->seek( 0 ) ); + RETURN_ERR( inflater.begin( gzip_reader_read, new_in ) ); + RETURN_ERR( inflater.set_mode( inflater.mode_auto ) ); + RETURN_ERR( calc_size() ); + set_remain( size_ ); + + return blargg_ok; +} + +void Gzip_Reader::close() +{ + in = NULL; + inflater.end(); +} + +blargg_err_t Gzip_Reader::read_v( void* out, int count ) +{ + assert( in ); + int actual = count; + RETURN_ERR( inflater.read( out, &actual ) ); + + if ( actual != count ) + return blargg_err_file_corrupt; + + return blargg_ok; +} diff --git a/snesreader/fex/Gzip_Reader.h b/snesreader/fex/Gzip_Reader.h new file mode 100644 index 00000000..a9b2d6a9 --- /dev/null +++ b/snesreader/fex/Gzip_Reader.h @@ -0,0 +1,46 @@ +// Transparently decompresses gzip files, as well as uncompressed + +// File_Extractor 1.0.0 +#ifndef GZIP_READER_H +#define GZIP_READER_H + +#include "Data_Reader.h" +#include "Zlib_Inflater.h" + +class Gzip_Reader : public Data_Reader { +public: + // Keeps pointer to reader until close(). If + blargg_err_t open( File_Reader* ); + + // True if file is open + bool opened() const { return in != NULL; } + + // Frees memory + void close(); + + // True if file is compressed + bool deflated() const { return inflater.deflated(); } + + // CRC-32 of data, of 0 if unavailable + unsigned int crc32() const { return crc32_; } + + // Number of bytes read since opening + int tell() const { return size_ - remain(); } + +public: + Gzip_Reader(); + virtual ~Gzip_Reader(); + +protected: + virtual blargg_err_t read_v( void*, int ); + +private: + File_Reader* in; + unsigned crc32_; + int size_; + Zlib_Inflater inflater; + + blargg_err_t calc_size(); +}; + +#endif diff --git a/snesreader/fex/Rar_Extractor.cpp b/snesreader/fex/Rar_Extractor.cpp new file mode 100644 index 00000000..afade7fa --- /dev/null +++ b/snesreader/fex/Rar_Extractor.cpp @@ -0,0 +1,197 @@ +// File_Extractor 1.0.0. http://www.slack.net/~ant/ + +#include "blargg_common.h" + +#if FEX_ENABLE_RAR + +#include "Rar_Extractor.h" + +/* Copyright (C) 2009 Shay Green. This module is free software; you +can redistribute it and/or modify it under the terms of the GNU Lesser +General Public License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. This +module is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +details. You should have received a copy of the GNU Lesser General Public +License along with this module; if not, write to the Free Software Foundation, +Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ + +#include "blargg_source.h" + +static blargg_err_t init_rar() +{ + unrar_init(); + return blargg_ok; +} + +static File_Extractor* new_rar() +{ + return BLARGG_NEW Rar_Extractor; +} + +fex_type_t_ const fex_rar_type [1] = {{ + ".rar", + &new_rar, + "RAR archive", + &init_rar +}}; + +blargg_err_t Rar_Extractor::convert_err( unrar_err_t err ) +{ + blargg_err_t reader_err = reader.err; + reader.err = blargg_ok; + if ( reader_err ) + check( err == unrar_next_err ); + + switch ( err ) + { + case unrar_ok: return blargg_ok; + case unrar_err_memory: return blargg_err_memory; + case unrar_err_open: return blargg_err_file_read; + case unrar_err_not_arc: return blargg_err_file_type; + case unrar_err_corrupt: return blargg_err_file_corrupt; + case unrar_err_io: return blargg_err_file_io; + case unrar_err_arc_eof: return blargg_err_internal; + case unrar_err_encrypted: return BLARGG_ERR( BLARGG_ERR_FILE_FEATURE, "RAR encryption not supported" ); + case unrar_err_segmented: return BLARGG_ERR( BLARGG_ERR_FILE_FEATURE, "RAR segmentation not supported" ); + case unrar_err_huge: return BLARGG_ERR( BLARGG_ERR_FILE_FEATURE, "Huge RAR files not supported" ); + case unrar_err_old_algo: return BLARGG_ERR( BLARGG_ERR_FILE_FEATURE, "Old RAR compression not supported" ); + case unrar_err_new_algo: return BLARGG_ERR( BLARGG_ERR_FILE_FEATURE, "RAR uses unknown newer compression" ); + case unrar_next_err: break; + default: + check( false ); // unhandled RAR error + } + + if ( reader_err ) + return reader_err; + + check( false ); + return BLARGG_ERR( BLARGG_ERR_INTERNAL, "RAR archive" ); +} + +static inline unrar_err_t handle_err( Rar_Extractor::read_callback_t* h, blargg_err_t err ) +{ + if ( !err ) + return unrar_ok; + + h->err = err; + return unrar_next_err; +} + +extern "C" +{ + static unrar_err_t my_unrar_read( void* data, void* out, int* count, unrar_pos_t pos ) + { + // TODO: 64-bit file support + + Rar_Extractor::read_callback_t* h = STATIC_CAST(Rar_Extractor::read_callback_t*,data); + if ( h->pos != pos ) + { + blargg_err_t err = h->in->seek( pos ); + if ( err ) + return handle_err( h, err ); + + h->pos = pos; + } + + blargg_err_t err = h->in->read_avail( out, count ); + if ( err ) + return handle_err( h, err ); + + h->pos += *count; + + return unrar_ok; + } +} + +Rar_Extractor::Rar_Extractor() : + File_Extractor( fex_rar_type ) +{ + unrar = NULL; +} + +Rar_Extractor::~Rar_Extractor() +{ + close(); +} + +blargg_err_t Rar_Extractor::open_v() +{ + reader.pos = 0; + reader.in = &arc(); + reader.err = blargg_ok; + + RETURN_ERR( arc().seek( 0 ) ); + RETURN_ERR( convert_err( unrar_open_custom( &unrar, &my_unrar_read, &reader ) ) ); + return skip_unextractables(); +} + +void Rar_Extractor::close_v() +{ + unrar_close( unrar ); + + unrar = NULL; + reader.in = NULL; +} + +blargg_err_t Rar_Extractor::skip_unextractables() +{ + while ( !unrar_done( unrar ) && unrar_try_extract( unrar ) ) + RETURN_ERR( next_raw() ); + + if ( !unrar_done( unrar ) ) + { + unrar_info_t const* info = unrar_info( unrar ); + + set_name( info->name, (info->name_w && *info->name_w) ? info->name_w : NULL ); + set_info( info->size, info->dos_date, (info->is_crc32 ? info->crc : 0) ); + } + + return blargg_ok; +} + +blargg_err_t Rar_Extractor::next_raw() +{ + return convert_err( unrar_next( unrar ) ); +} + +blargg_err_t Rar_Extractor::next_v() +{ + RETURN_ERR( next_raw() ); + return skip_unextractables(); +} + +blargg_err_t Rar_Extractor::rewind_v() +{ + RETURN_ERR( convert_err( unrar_rewind( unrar ) ) ); + return skip_unextractables(); +} + +fex_pos_t Rar_Extractor::tell_arc_v() const +{ + return unrar_tell( unrar ); +} + +blargg_err_t Rar_Extractor::seek_arc_v( fex_pos_t pos ) +{ + RETURN_ERR( convert_err( unrar_seek( unrar, pos ) ) ); + return skip_unextractables(); +} + +blargg_err_t Rar_Extractor::data_v( void const** out ) +{ + return convert_err( unrar_extract_mem( unrar, out ) ); +} + +blargg_err_t Rar_Extractor::extract_v( void* out, int count ) +{ + // We can read entire file directly into user buffer + if ( count == size() ) + return convert_err( unrar_extract( unrar, out, count ) ); + + // This will call data_v() and copy from that buffer for us + return File_Extractor::extract_v( out, count ); +} + +#endif diff --git a/snesreader/fex/Rar_Extractor.h b/snesreader/fex/Rar_Extractor.h new file mode 100644 index 00000000..9a74dea3 --- /dev/null +++ b/snesreader/fex/Rar_Extractor.h @@ -0,0 +1,43 @@ +// RAR archive extractor + +// File_Extractor 1.0.0 +#ifndef RAR_EXTRACTOR_H +#define RAR_EXTRACTOR_H + +#include "File_Extractor.h" +#include "unrar/unrar.h" + +class Rar_Extractor : public File_Extractor { +public: + Rar_Extractor(); + virtual ~Rar_Extractor(); + + struct read_callback_t + { + const char* err; + int pos; + File_Reader* in; + }; + +protected: + virtual blargg_err_t open_v(); + virtual void close_v(); + + virtual blargg_err_t next_v(); + virtual blargg_err_t rewind_v(); + virtual fex_pos_t tell_arc_v() const; + virtual blargg_err_t seek_arc_v( fex_pos_t ); + + virtual blargg_err_t data_v( void const** ); + virtual blargg_err_t extract_v( void*, int ); + +private: + unrar_t* unrar; + read_callback_t reader; + + blargg_err_t convert_err( unrar_err_t ); + blargg_err_t skip_unextractables(); + blargg_err_t next_raw(); +}; + +#endif diff --git a/snesreader/fex/Zip7_Extractor.cpp b/snesreader/fex/Zip7_Extractor.cpp new file mode 100644 index 00000000..1803a71c --- /dev/null +++ b/snesreader/fex/Zip7_Extractor.cpp @@ -0,0 +1,252 @@ +// File_Extractor 1.0.0. http://www.slack.net/~ant/ + +#include "Zip7_Extractor.h" + +#include "7z_C/7zExtract.h" +#include "7z_C/7zAlloc.h" +#include "7z_C/7zCrc.h" + +/* Copyright (C) 2005-2009 Shay Green. This module is free software; you +can redistribute it and/or modify it under the terms of the GNU Lesser +General Public License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. This +module is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +details. You should have received a copy of the GNU Lesser General Public +License along with this module; if not, write to the Free Software Foundation, +Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ + +#include "blargg_source.h" + +static ISzAlloc zip7_alloc = { SzAlloc, SzFree }; +static ISzAlloc zip7_alloc_temp = { SzAllocTemp, SzFreeTemp }; + +struct Zip7_Extractor_Impl : + ISeekInStream +{ + CLookToRead look; + CSzArEx db; + + // SzExtract state + UInt32 block_index; + Byte* buf; + size_t buf_size; + + File_Reader* in; + const char* in_err; +}; + +extern "C" +{ + // 7-zip callbacks pass an ISeekInStream* for data, so we must cast it + // back to ISeekInStream* FIRST, then cast to our Impl structure + + static SRes zip7_read_( void* vstream, void* out, size_t* size ) + { + assert( out && size ); + ISeekInStream* stream = STATIC_CAST(ISeekInStream*,vstream); + Zip7_Extractor_Impl* impl = STATIC_CAST(Zip7_Extractor_Impl*,stream); + + long lsize = *size; + blargg_err_t err = impl->in->read_avail( out, &lsize ); + if ( err ) + { + *size = 0; + impl->in_err = err; + return SZ_ERROR_READ; + } + + *size = lsize; + return SZ_OK; + } + + static SRes zip7_seek_( void* vstream, Int64* pos, ESzSeek mode ) + { + ISeekInStream* stream = STATIC_CAST(ISeekInStream*,vstream); + Zip7_Extractor_Impl* impl = STATIC_CAST(Zip7_Extractor_Impl*,stream); + + assert( mode != SZ_SEEK_CUR ); // never used + + if ( mode == SZ_SEEK_END ) + { + assert( *pos == 0 ); // only used to find file length + *pos = impl->in->size(); + return SZ_OK; + } + + assert( mode == SZ_SEEK_SET ); + blargg_err_t err = impl->in->seek( *pos ); + if ( err ) + { + // don't set in_err in this case, since it might be benign + if ( err == blargg_err_file_eof ) + return SZ_ERROR_INPUT_EOF; + + impl->in_err = err; + return SZ_ERROR_READ; + } + + return SZ_OK; + } +} + +blargg_err_t Zip7_Extractor::zip7_err( int err ) +{ + // TODO: ignore in_err in some cases? unsure about which error to use + blargg_err_t in_err = impl->in_err; + impl->in_err = NULL; + if ( in_err ) + { + check( err != SZ_OK ); + return in_err; + } + + switch ( err ) + { + case SZ_OK: return blargg_ok; + case SZ_ERROR_MEM: return blargg_err_memory; + case SZ_ERROR_READ: return blargg_err_file_io; + case SZ_ERROR_CRC: + case SZ_ERROR_DATA: + case SZ_ERROR_INPUT_EOF: + case SZ_ERROR_ARCHIVE: return blargg_err_file_corrupt; + case SZ_ERROR_UNSUPPORTED: return blargg_err_file_feature; + case SZ_ERROR_NO_ARCHIVE: return blargg_err_file_type; + } + + return blargg_err_generic; +} + +static blargg_err_t init_7z() +{ + static bool inited; + if ( !inited ) + { + inited = true; + CrcGenerateTable(); + } + return blargg_ok; +} + +static File_Extractor* new_7z() +{ + return BLARGG_NEW Zip7_Extractor; +} + +fex_type_t_ const fex_7z_type [1] = {{ + ".7z", + &new_7z, + "7-zip archive", + &init_7z +}}; + +Zip7_Extractor::Zip7_Extractor() : + File_Extractor( fex_7z_type ) +{ + impl = NULL; +} + +Zip7_Extractor::~Zip7_Extractor() +{ + close(); +} + +blargg_err_t Zip7_Extractor::open_v() +{ + RETURN_ERR( init_7z() ); + + if ( !impl ) + { + impl = (Zip7_Extractor_Impl*) malloc( sizeof *impl ); + CHECK_ALLOC( impl ); + } + + impl->in = &arc(); + impl->block_index = (UInt32) -1; + impl->buf = NULL; + impl->buf_size = 0; + + LookToRead_CreateVTable( &impl->look, false ); + impl->ISeekInStream::Read = zip7_read_; + impl->ISeekInStream::Seek = zip7_seek_; + impl->look.realStream = impl; + LookToRead_Init( &impl->look ); + + SzArEx_Init( &impl->db ); + + impl->in_err = NULL; + RETURN_ERR( zip7_err( SzArEx_Open( &impl->db, &impl->look.s, + &zip7_alloc, &zip7_alloc_temp ) ) ); + + return seek_arc_v( 0 ); +} + +void Zip7_Extractor::close_v() +{ + if ( impl ) + { + if ( impl->in ) + { + impl->in = NULL; + SzArEx_Free( &impl->db, &zip7_alloc ); + } + IAlloc_Free( &zip7_alloc, impl->buf ); + free( impl ); + impl = NULL; + } +} + +blargg_err_t Zip7_Extractor::next_v() +{ + while ( ++index < (int) impl->db.db.NumFiles ) + { + CSzFileItem const& item = impl->db.db.Files [index]; + if ( !item.IsDir ) + { + // TODO: Support date. + // NTFS representation, stored as 64-bit value. + // Divide by 10000000 (ten million) to get seconds + //item.MTime.Low + (.High << 32) + // How to convert to DOS style? + + set_name( item.Name ); + set_info( item.Size, 0, (item.FileCRCDefined ? item.FileCRC : 0) ); + break; + } + } + + return blargg_ok; +} + +blargg_err_t Zip7_Extractor::rewind_v() +{ + return seek_arc_v( 0 ); +} + +fex_pos_t Zip7_Extractor::tell_arc_v() const +{ + return index; +} + +blargg_err_t Zip7_Extractor::seek_arc_v( fex_pos_t pos ) +{ + assert( 0 <= pos && pos <= (int) impl->db.db.NumFiles ); + + index = pos - 1; + return next_v(); +} + +blargg_err_t Zip7_Extractor::data_v( void const** out ) +{ + impl->in_err = NULL; + size_t offset = 0; + size_t count = 0; + RETURN_ERR( zip7_err( SzAr_Extract( &impl->db, &impl->look.s, index, + &impl->block_index, &impl->buf, &impl->buf_size, + &offset, &count, &zip7_alloc, &zip7_alloc_temp ) ) ); + assert( count == (size_t) size() ); + + *out = impl->buf + offset; + return blargg_ok; +} diff --git a/snesreader/fex/Zip7_Extractor.h b/snesreader/fex/Zip7_Extractor.h new file mode 100644 index 00000000..f658ba04 --- /dev/null +++ b/snesreader/fex/Zip7_Extractor.h @@ -0,0 +1,34 @@ +// 7-zip archive extractor + +// File_Extractor 1.0.0 +#ifndef ZIP7_EXTRACTOR_H +#define ZIP7_EXTRACTOR_H + +#include "File_Extractor.h" + +struct Zip7_Extractor_Impl; + +class Zip7_Extractor : public File_Extractor { +public: + Zip7_Extractor(); + virtual ~Zip7_Extractor(); + +protected: + virtual blargg_err_t open_v(); + virtual void close_v(); + + virtual blargg_err_t next_v(); + virtual blargg_err_t rewind_v(); + virtual fex_pos_t tell_arc_v() const; + virtual blargg_err_t seek_arc_v( fex_pos_t ); + + virtual blargg_err_t data_v( void const** out ); + +private: + Zip7_Extractor_Impl* impl; + int index; + + blargg_err_t zip7_err( int err ); +}; + +#endif diff --git a/snesreader/fex/Zip_Extractor.cpp b/snesreader/fex/Zip_Extractor.cpp new file mode 100644 index 00000000..8bcc61c3 --- /dev/null +++ b/snesreader/fex/Zip_Extractor.cpp @@ -0,0 +1,390 @@ +// File_Extractor 1.0.0. http://www.slack.net/~ant/ + +#include "Zip_Extractor.h" + +#include "blargg_endian.h" + +/* Copyright (C) 2005-2009 Shay Green. This module is free software; you +can redistribute it and/or modify it under the terms of the GNU Lesser +General Public License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. This +module is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +details. You should have received a copy of the GNU Lesser General Public +License along with this module; if not, write to the Free Software Foundation, +Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ + +/* To avoid copying filename string from catalog, I terminate it by modifying +catalog data. This potentially requires moving the first byte of the type +of the next entry elsewhere; I move it to the first byte of made_by. Kind +of hacky, but I'd rather not have to allocate memory for a copy of it. */ + +#include "blargg_source.h" + +/* Reads this much from end of file when first opening. Only this much is +searched for the end catalog entry. If whole catalog is within this data, +nothing more needs to be read on open. */ +int const end_read_size = 8 * 1024; + +/* Reads are are made using file offset that's a multiple of this, +increasing performance. */ +int const disk_block_size = 4 * 1024; + +// Read buffer used for extracting file data +int const read_buf_size = 16 * 1024; + +struct header_t +{ + char type [4]; + byte vers [2]; + byte flags [2]; + byte method [2]; + byte date [4]; + byte crc [4]; + byte raw_size [4]; + byte size [4]; + byte filename_len [2]; + byte extra_len [2]; + char filename [2]; // [filename_len] + //char extra [extra_len]; +}; +int const header_size = 30; + +struct entry_t +{ + char type [4]; + byte made_by [2]; + byte vers [2]; + byte flags [2]; + byte method [2]; + byte date [4]; + byte crc [4]; + byte raw_size [4]; + byte size [4]; + byte filename_len [2]; + byte extra_len [2]; + byte comment_len [2]; + byte disk [2]; + byte int_attrib [2]; + byte ext_attrib [4]; + byte file_offset [4]; + char filename [2]; // [filename_len] + //char extra [extra_len]; + //char comment [comment_len]; +}; +int const entry_size = 46; + +struct end_entry_t +{ + char type [4]; + byte disk [2]; + byte first_disk [2]; + byte disk_entry_count [2]; + byte entry_count [2]; + byte dir_size [4]; + byte dir_offset [4]; + byte comment_len [2]; + char comment [2]; // [comment_len] +}; +int const end_entry_size = 22; + +static blargg_err_t init_zip() +{ + get_crc_table(); // initialize zlib's CRC-32 tables + return blargg_ok; +} + +static File_Extractor* new_zip() +{ + return BLARGG_NEW Zip_Extractor; +} + +fex_type_t_ const fex_zip_type [1] = {{ + ".zip", + &new_zip, + "ZIP archive", + &init_zip +}}; + +Zip_Extractor::Zip_Extractor() : + File_Extractor( fex_zip_type ) +{ + Zip_Extractor::clear_file_v(); + + // If these fail, structures had extra padding inserted by compiler + assert( offsetof (header_t,filename) == header_size ); + assert( offsetof (entry_t,filename) == entry_size ); + assert( offsetof (end_entry_t,comment) == end_entry_size ); +} + +Zip_Extractor::~Zip_Extractor() +{ + close(); +} + +blargg_err_t Zip_Extractor::open_path_v() +{ + RETURN_ERR( open_arc_file( true ) ); + return File_Extractor::open_path_v(); +} + +inline +void Zip_Extractor::reorder_entry_header( int offset ) +{ + catalog [offset + 0] = 0; + catalog [offset + 4] = 'P'; +} + +blargg_err_t Zip_Extractor::open_v() +{ + if ( arc().size() < end_entry_size ) + return blargg_err_file_type; + + // Read final end_read_size bytes of file + int file_pos = max( 0, arc().size() - end_read_size ); + file_pos -= file_pos % disk_block_size; + RETURN_ERR( catalog.resize( arc().size() - file_pos ) ); + RETURN_ERR( arc().seek( file_pos ) ); + RETURN_ERR( arc().read( catalog.begin(), catalog.size() ) ); + + // Find end-of-catalog entry + int end_pos = catalog.size() - end_entry_size; + while ( end_pos >= 0 && memcmp( &catalog [end_pos], "PK\5\6", 4 ) ) + end_pos--; + if ( end_pos < 0 ) + return blargg_err_file_type; + end_entry_t const& end_entry = (end_entry_t&) catalog [end_pos]; + end_pos += file_pos; + + // some idiotic zip compressors add data to end of zip without setting comment len +// check( arc().size() == end_pos + end_entry_size + get_le16( end_entry.comment_len ) ); + + // Find file offset of beginning of catalog + catalog_begin = get_le32( end_entry.dir_offset ); + int catalog_size = end_pos - catalog_begin; + if ( catalog_size < 0 ) + return blargg_err_file_corrupt; + catalog_size += end_entry_size; + + // See if catalog is entirely contained in bytes already read + int begin_offset = catalog_begin - file_pos; + if ( begin_offset >= 0 ) + memmove( catalog.begin(), &catalog [begin_offset], catalog_size ); + + RETURN_ERR( catalog.resize( catalog_size ) ); + if ( begin_offset < 0 ) + { + // Catalog begins before bytes read, so it needs to be read + RETURN_ERR( arc().seek( catalog_begin ) ); + RETURN_ERR( arc().read( catalog.begin(), catalog.size() ) ); + } + + // First entry in catalog should be a file or end of archive + if ( memcmp( catalog.begin(), "PK\1\2", 4 ) && memcmp( catalog.begin(), "PK\5\6", 4 ) ) + return blargg_err_file_type; + + reorder_entry_header( 0 ); + return rewind_v(); +} + +void Zip_Extractor::close_v() +{ + catalog.clear(); +} + +// Scanning + +inline +static bool is_normal_file( entry_t const& e, unsigned len ) +{ + int last_char = (len ? e.filename [len - 1] : '/'); + bool is_dir = (last_char == '/' || last_char == '\\'); + if ( is_dir && get_le32( e.size ) == 0 ) + return false; + check( !is_dir ); + + // Mac OS X puts meta-information in separate files with normal extensions, + // so they must be filtered out or caller will mistake them for normal files. + if ( e.made_by[1] == 3 ) + { + const char* dir = strrchr( e.filename, '/' ); + if ( dir ) + dir++; + else + dir = e.filename; + + if ( *dir == '.' ) + return false; + + if ( !strcmp( dir, "Icon\x0D" ) ) + return false; + } + + return true; +} + +blargg_err_t Zip_Extractor::update_info( bool advance_first ) +{ + while ( 1 ) + { + entry_t& e = (entry_t&) catalog [catalog_pos]; + + if ( memcmp( e.type, "\0K\1\2P", 5 ) && memcmp( e.type, "PK\1\2", 4 ) ) + { + check( !memcmp( e.type, "\0K\5\6P", 5 ) ); + break; + } + + unsigned len = get_le16( e.filename_len ); + int next_offset = catalog_pos + entry_size + len + get_le16( e.extra_len ) + + get_le16( e.comment_len ); + if ( (unsigned) next_offset > catalog.size() - end_entry_size ) + return blargg_err_file_corrupt; + + if ( catalog [next_offset] == 'P' ) + reorder_entry_header( next_offset ); + + if ( !advance_first ) + { + e.filename [len] = 0; // terminate name + + if ( is_normal_file( e, len ) ) + { + set_name( e.filename ); + set_info( get_le32( e.size ), get_le32( e.date ), get_le32( e.crc ) ); + break; + } + } + + catalog_pos = next_offset; + advance_first = false; + } + + return blargg_ok; +} + +blargg_err_t Zip_Extractor::next_v() +{ + return update_info( true ); +} + +blargg_err_t Zip_Extractor::rewind_v() +{ + return seek_arc_v( 0 ); +} + +fex_pos_t Zip_Extractor::tell_arc_v() const +{ + return catalog_pos; +} + +blargg_err_t Zip_Extractor::seek_arc_v( fex_pos_t pos ) +{ + assert( 0 <= pos && (size_t) pos <= catalog.size() - end_entry_size ); + + catalog_pos = pos; + return update_info( false ); +} + +// Reading + +void Zip_Extractor::clear_file_v() +{ + buf.end(); +} + +blargg_err_t Zip_Extractor::inflater_read( void* data, void* out, int* count ) +{ + Zip_Extractor& self = *STATIC_CAST(Zip_Extractor*,data); + + if ( *count > self.raw_remain ) + *count = self.raw_remain; + + self.raw_remain -= *count; + + return self.arc().read( out, *count ); +} + +blargg_err_t Zip_Extractor::fill_buf( int offset, int buf_size, int initial_read ) +{ + raw_remain = arc().size() - offset; + RETURN_ERR( arc().seek( offset ) ); + return buf.begin( inflater_read, this, buf_size, initial_read ); +} + +blargg_err_t Zip_Extractor::first_read( int count ) +{ + entry_t const& e = (entry_t&) catalog [catalog_pos]; + + // Determine compression + { + int method = get_le16( e.method ); + if ( (method && method != Z_DEFLATED) || get_le16( e.vers ) > 20 ) + return BLARGG_ERR( BLARGG_ERR_FILE_FEATURE, "compression method" ); + file_deflated = (method != 0); + } + + int raw_size = get_le32( e.raw_size ); + + int file_offset = get_le32( e.file_offset ); + int align = file_offset % disk_block_size; + { + // read header + int buf_size = 3 * disk_block_size - 1 + raw_size; // space for all raw data + buf_size -= buf_size % disk_block_size; + int initial_read = buf_size; + if ( !file_deflated || count < size() ) + { + buf_size = read_buf_size; + initial_read = disk_block_size * 2; + } + // TODO: avoid re-reading if buffer already has data we want? + RETURN_ERR( fill_buf( file_offset - align, buf_size, initial_read ) ); + } + header_t const& h = (header_t&) buf.data() [align]; + if ( buf.filled() < align + header_size || memcmp( h.type, "PK\3\4", 4 ) ) + return blargg_err_file_corrupt; + + // CRCs of header and file data + correct_crc = get_le32( h.crc ); + if ( !correct_crc ) + correct_crc = get_le32( e.crc ); + check( correct_crc == get_le32( e.crc ) ); // catalog CRC should match + crc = ::crc32( 0, NULL, 0 ); + + // Data offset + int data_offset = file_offset + header_size + + get_le16( h.filename_len ) + get_le16( h.extra_len ); + if ( data_offset + raw_size > catalog_begin ) + return blargg_err_file_corrupt; + + // Refill buffer if there's lots of extra data after header + int buf_offset = data_offset - file_offset + align; + if ( buf_offset > buf.filled() ) + { + // TODO: this will almost never occur, making it a good place for bugs + buf_offset = data_offset % disk_block_size; + RETURN_ERR( fill_buf( data_offset - buf_offset, read_buf_size, disk_block_size ) ); + } + + raw_remain = raw_size - (buf.filled() - buf_offset); + return buf.set_mode( (file_deflated ? buf.mode_raw_deflate : buf.mode_copy), buf_offset ); +} + +blargg_err_t Zip_Extractor::extract_v( void* out, int count ) +{ + if ( tell() == 0 ) + RETURN_ERR( first_read( count ) ); + + int actual = count; + RETURN_ERR( buf.read( out, &actual ) ); + if ( actual < count ) + return blargg_err_file_corrupt; + + crc = ::crc32( crc, (byte const*) out, count ); + if ( count == reader().remain() && crc != correct_crc ) + return blargg_err_file_corrupt; + + return blargg_ok; +} diff --git a/snesreader/fex/Zip_Extractor.h b/snesreader/fex/Zip_Extractor.h new file mode 100644 index 00000000..9742df99 --- /dev/null +++ b/snesreader/fex/Zip_Extractor.h @@ -0,0 +1,45 @@ +// ZIP archive extractor. Only supports deflation and store (no compression). + +// File_Extractor 1.0.0 +#ifndef ZIP_EXTRACTOR_H +#define ZIP_EXTRACTOR_H + +#include "File_Extractor.h" +#include "Zlib_Inflater.h" + +class Zip_Extractor : public File_Extractor { +public: + Zip_Extractor(); + virtual ~Zip_Extractor(); + +protected: + virtual blargg_err_t open_path_v(); + virtual blargg_err_t open_v(); + virtual void close_v(); + + virtual void clear_file_v(); + virtual blargg_err_t next_v(); + virtual blargg_err_t rewind_v(); + virtual fex_pos_t tell_arc_v() const; + virtual blargg_err_t seek_arc_v( fex_pos_t ); + + virtual blargg_err_t extract_v( void*, int ); + +private: + blargg_vector catalog; + int catalog_begin; // offset of first catalog entry in file (to detect corruption) + int catalog_pos; // position of current entry in catalog + int raw_remain; // bytes remaining to be read from zip file for current file + unsigned crc; // ongoing CRC of extracted bytes + unsigned correct_crc; + bool file_deflated; + Zlib_Inflater buf; + + blargg_err_t fill_buf( int offset, int buf_size, int initial_read ); + blargg_err_t update_info( bool advance_first ); + blargg_err_t first_read( int count ); + void reorder_entry_header( int offset ); + static blargg_err_t inflater_read( void* data, void* out, int* count ); +}; + +#endif diff --git a/snesreader/fex/Zlib_Inflater.cpp b/snesreader/fex/Zlib_Inflater.cpp new file mode 100644 index 00000000..8d31b514 --- /dev/null +++ b/snesreader/fex/Zlib_Inflater.cpp @@ -0,0 +1,257 @@ +// File_Extractor 1.0.0. http://www.slack.net/~ant/ + +#include "Zlib_Inflater.h" + +/* Copyright (C) 2006-2009 Shay Green. This module is free software; you +can redistribute it and/or modify it under the terms of the GNU Lesser +General Public License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. This +module is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +details. You should have received a copy of the GNU Lesser General Public +License along with this module; if not, write to the Free Software Foundation, +Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ + +#include "blargg_source.h" + +int const block_size = 4096; + +static const char* get_zlib_err( int code ) +{ + assert( code != Z_OK ); + switch ( code ) + { + case Z_MEM_ERROR: return blargg_err_memory; + case Z_DATA_ERROR: return blargg_err_file_corrupt; + // TODO: handle more error codes + } + + const char* str = zError( code ); + if ( !str ) + str = BLARGG_ERR( BLARGG_ERR_GENERIC, "problem unzipping data" ); + + return str; +} + +void Zlib_Inflater::end() +{ + if ( deflated_ ) + { + deflated_ = false; + if ( inflateEnd( &zbuf ) ) + check( false ); + } + buf.clear(); + + static z_stream const empty = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + memcpy( &zbuf, &empty, sizeof zbuf ); +} + +Zlib_Inflater::Zlib_Inflater() +{ + deflated_ = false; + end(); // initialize things +} + +Zlib_Inflater::~Zlib_Inflater() +{ + end(); +} + +blargg_err_t Zlib_Inflater::fill_buf( int count ) +{ + byte* out = buf.end() - count; + RETURN_ERR( callback( user_data, out, &count ) ); + zbuf.avail_in = count; + zbuf.next_in = out; + return blargg_ok; +} + +blargg_err_t Zlib_Inflater::begin( callback_t new_callback, void* new_user_data, + int new_buf_size, int initial_read ) +{ + callback = new_callback; + user_data = new_user_data; + + end(); + + // TODO: decide whether using different size on alloc failure is a good idea + //RETURN_ERR( buf.resize( new_buf_size ? new_buf_size : 4 * block_size ) ); + if ( new_buf_size && buf.resize( new_buf_size ) ) + { + ACK_FAILURE(); + new_buf_size = 0; + } + + if ( !new_buf_size ) + { + RETURN_ERR( buf.resize( 4 * block_size ) ); + initial_read = 0; + } + + // Fill buffer with some data, less than normal buffer size since caller might + // just be examining beginning of file. + return fill_buf( initial_read ? initial_read : block_size ); +} + +blargg_err_t Zlib_Inflater::set_mode( mode_t mode, int data_offset ) +{ + zbuf.next_in += data_offset; + zbuf.avail_in -= data_offset; + + if ( mode == mode_auto ) + { + // examine buffer for gzip header + mode = mode_copy; + unsigned const min_gzip_size = 2 + 8 + 8; + if ( zbuf.avail_in >= min_gzip_size && + zbuf.next_in [0] == 0x1F && zbuf.next_in [1] == 0x8B ) + mode = mode_ungz; + } + + if ( mode != mode_copy ) + { + int wb = MAX_WBITS + 16; // have zlib handle gzip header + if ( mode == mode_raw_deflate ) + wb = -MAX_WBITS; + + int zerr = inflateInit2( &zbuf, wb ); + if ( zerr ) + { + zbuf.next_in = NULL; + return get_zlib_err( zerr ); + } + + deflated_ = true; + } + return blargg_ok; +} + +/* +// Reads/inflates entire stream. All input must be in buffer, and count must be total +// of all output. +blargg_err_t read_all( void* out, int count ); + + +// zlib automatically applies this optimization (uses inflateFast) +// TODO: remove +blargg_err_t Zlib_Inflater::read_all( void* out, int count ) +{ + if ( deflated_ ) + { + zbuf.next_out = (Bytef*) out; + zbuf.avail_out = count; + + int err = inflate( &zbuf, Z_FINISH ); + + if ( zbuf.avail_out || err != Z_STREAM_END ) + return blargg_err_file_corrupt; + } + else + { + if ( zbuf.avail_in < count ) + return blargg_err_file_corrupt; + + memcpy( out, zbuf.next_in, count ); + + zbuf.next_in += count; + zbuf.avail_in -= count; + } + + return blargg_ok; +} +*/ + +blargg_err_t Zlib_Inflater::read( void* out, int* count_io ) +{ + int remain = *count_io; + if ( remain && zbuf.next_in ) + { + if ( deflated_ ) + { + zbuf.next_out = (Bytef*) out; + zbuf.avail_out = remain; + + while ( 1 ) + { + uInt old_avail_in = zbuf.avail_in; + int err = inflate( &zbuf, Z_NO_FLUSH ); + if ( err == Z_STREAM_END ) + { + remain = zbuf.avail_out; + end(); + break; // no more data to inflate + } + + if ( err && (err != Z_BUF_ERROR || old_avail_in) ) + return get_zlib_err( err ); + + if ( !zbuf.avail_out ) + { + remain = 0; + break; // requested number of bytes inflated + } + + if ( zbuf.avail_in ) + { + // inflate() should never leave input if there's still space for output + check( false ); + return blargg_err_file_corrupt; + } + + RETURN_ERR( fill_buf( buf.size() ) ); + if ( !zbuf.avail_in ) + return blargg_err_file_corrupt; // stream didn't end but there's no more data + } + } + else + { + while ( 1 ) + { + // copy buffered data + if ( zbuf.avail_in ) + { + long count = zbuf.avail_in; + if ( count > remain ) + count = remain; + memcpy( out, zbuf.next_in, count ); + zbuf.total_out += count; + out = (char*) out + count; + remain -= count; + zbuf.next_in += count; + zbuf.avail_in -= count; + } + + if ( !zbuf.avail_in && zbuf.next_in < buf.end() ) + { + end(); + break; + } + + // read large request directly + if ( remain + zbuf.total_out % block_size >= buf.size() ) + { + int count = remain; + RETURN_ERR( callback( user_data, out, &count ) ); + zbuf.total_out += count; + out = (char*) out + count; + remain -= count; + + if ( remain ) + { + end(); + break; + } + } + + if ( !remain ) + break; + + RETURN_ERR( fill_buf( buf.size() - zbuf.total_out % block_size ) ); + } + } + } + *count_io -= remain; + return blargg_ok; +} diff --git a/snesreader/fex/Zlib_Inflater.h b/snesreader/fex/Zlib_Inflater.h new file mode 100644 index 00000000..8a49ff52 --- /dev/null +++ b/snesreader/fex/Zlib_Inflater.h @@ -0,0 +1,70 @@ +// Simplifies use of zlib for inflating data + +// File_Extractor 1.0.0 +#ifndef ZLIB_INFLATER_H +#define ZLIB_INFLATER_H + +#include "blargg_common.h" +#include "Data_Reader.h" +#include "zlib/zlib.h" + +class Zlib_Inflater { +public: + + // Reads at most min(*count,bytes_until_eof()) bytes into *out and set *count + // to that number, or returns error if that many can't be read. + typedef blargg_err_t (*callback_t)( void* user_data, void* out, int* count ); + + // Begins by setting callback and filling buffer. Default buffer is 16K and + // filled to 4K, or specify buf_size and initial_read for custom buffer size + // and how much to read initially. + blargg_err_t begin( callback_t, void* user_data, + int buf_size = 0, int initial_read = 0 ); + + // Data read into buffer by begin() + const unsigned char* data() const { return zbuf.next_in; } + int filled() const { return zbuf.avail_in; } + + // Begins inflation using specified mode. Using mode_auto selects between + // mode_copy and mode_ungz by examining first two bytes of buffer. Use + // buf_offset to specify where data begins in buffer, in case there is + // header data that should be skipped. + enum mode_t { mode_copy, mode_ungz, mode_raw_deflate, mode_auto }; + blargg_err_t set_mode( mode_t, int buf_offset = 0 ); + + // True if set_mode() has been called with mode_ungz or mode_raw_deflate + bool deflated() const { return deflated_; } + + // Reads/inflates at most *count_io bytes into *out and sets *count_io to actual + // number of bytes read (less than requested if end of data was reached). + // Buffers source data internally, even in copy mode, so input file can be + // unbuffered without sacrificing performance. + blargg_err_t read( void* out, int* count_io ); + + // Total number of bytes read since begin() + int tell() const { return zbuf.total_out; } + + // Ends inflation and frees memory + void end(); + +private: + // noncopyable + Zlib_Inflater( const Zlib_Inflater& ); + Zlib_Inflater& operator = ( const Zlib_Inflater& ); + +// Implementation +public: + Zlib_Inflater(); + ~Zlib_Inflater(); + +private: + z_stream_s zbuf; + blargg_vector buf; + bool deflated_; + callback_t callback; + void* user_data; + + blargg_err_t fill_buf( int count ); +}; + +#endif diff --git a/snesreader/fex/blargg_common.cpp b/snesreader/fex/blargg_common.cpp new file mode 100644 index 00000000..9f3e9ebd --- /dev/null +++ b/snesreader/fex/blargg_common.cpp @@ -0,0 +1,51 @@ +// File_Extractor 1.0.0. http://www.slack.net/~ant/ + +#include "blargg_common.h" + +/* Copyright (C) 2008-2009 Shay Green. This module is free software; you +can redistribute it and/or modify it under the terms of the GNU Lesser +General Public License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. This +module is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +details. You should have received a copy of the GNU Lesser General Public +License along with this module; if not, write to the Free Software Foundation, +Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ + +#include "blargg_source.h" + +void blargg_vector_::init() +{ + begin_ = NULL; + size_ = 0; +} + +void blargg_vector_::clear() +{ + void* p = begin_; + begin_ = NULL; + size_ = 0; + free( p ); +} + +blargg_err_t blargg_vector_::resize_( size_t n, size_t elem_size ) +{ + if ( n != size_ ) + { + if ( n == 0 ) + { + // Simpler to handle explicitly. Realloc will handle a size of 0, + // but then we have to avoid raising an error for a NULL return. + clear(); + } + else + { + void* p = realloc( begin_, n * elem_size ); + CHECK_ALLOC( p ); + begin_ = p; + size_ = n; + } + } + return blargg_ok; +} diff --git a/snesreader/fex/blargg_common.h b/snesreader/fex/blargg_common.h new file mode 100644 index 00000000..a11579fd --- /dev/null +++ b/snesreader/fex/blargg_common.h @@ -0,0 +1,206 @@ +// Sets up common environment for Shay Green's libraries. +// To change configuration options, modify blargg_config.h, not this file. + +// File_Extractor 1.0.0 +#ifndef BLARGG_COMMON_H +#define BLARGG_COMMON_H + +#include +#include +#include + +typedef const char* blargg_err_t; // 0 on success, otherwise error string + +// Success; no error +int const blargg_ok = 0; + +// BLARGG_RESTRICT: equivalent to C99's restrict, where supported +#if __GNUC__ >= 3 || _MSC_VER >= 1100 + #define BLARGG_RESTRICT __restrict +#else + #define BLARGG_RESTRICT +#endif + +#if __cplusplus >= 199711 + #define BLARGG_MUTABLE mutable +#else + #define BLARGG_MUTABLE +#endif + +/* BLARGG_4CHAR('a','b','c','d') = 'abcd' (four character integer constant). +I don't just use 'abcd' because that's implementation-dependent. */ +#define BLARGG_4CHAR( a, b, c, d ) \ + ((a&0xFF)*0x1000000 + (b&0xFF)*0x10000 + (c&0xFF)*0x100 + (d&0xFF)) + +/* BLARGG_STATIC_ASSERT( expr ): Generates compile error if expr is 0. +Can be used at file, function, or class scope. */ +#ifdef _MSC_VER + // MSVC6 (_MSC_VER < 1300) __LINE__ fails when /Zl is specified + #define BLARGG_STATIC_ASSERT( expr ) \ + void blargg_failed_( int (*arg) [2 / (int) !!(expr) - 1] ) +#else + // Others fail when declaring same function multiple times in class, + // so differentiate them by line + #define BLARGG_STATIC_ASSERT( expr ) \ + void blargg_failed_( int (*arg) [2 / !!(expr) - 1] [__LINE__] ) +#endif + +/* Pure virtual functions cause a vtable entry to a "called pure virtual" +error handler, requiring linkage to the C++ runtime library. This macro is +used in place of the "= 0", and simply expands to its argument. During +development, it expands to "= 0", allowing detection of missing overrides. */ +#define BLARGG_PURE( def ) def + +/* My code depends on ASCII anywhere a character or string constant is +compared with data read from a file, and anywhere file data is read and +treated as a string. */ +#if '\n'!=0x0A || ' '!=0x20 || '0'!=0x30 || 'A'!=0x41 || 'a'!=0x61 + #error "ASCII character set required" +#endif + +/* My code depends on int being at least 32 bits. Almost everything these days +uses at least 32-bit ints, so it's hard to even find a system with 16-bit ints +to test with. The issue can't be gotten around by using a suitable blargg_int +everywhere either, because int is often converted to implicitly when doing +arithmetic on smaller types. */ +#if UINT_MAX < 0xFFFFFFFF + #error "int must be at least 32 bits" +#endif + +// In case compiler doesn't support these properly. Used rarely. +#define STATIC_CAST(T,expr) static_cast (expr) +#define CONST_CAST( T,expr) const_cast (expr) + +// User configuration can override the above macros if necessary +#include "blargg_config.h" + +/* BLARGG_DEPRECATED [_TEXT] for any declarations/text to be removed in a +future version. In GCC, we can let the compiler warn. In other compilers, +we strip it out unless BLARGG_LEGACY is true. */ +#if BLARGG_LEGACY + // Allow old client code to work without warnings + #define BLARGG_DEPRECATED_TEXT( text ) text + #define BLARGG_DEPRECATED( text ) text +#elif __GNUC__ >= 4 + // In GCC, we can mark declarations and let the compiler warn + #define BLARGG_DEPRECATED_TEXT( text ) text + #define BLARGG_DEPRECATED( text ) __attribute__ ((deprecated)) text +#else + // By default, deprecated items are removed, to avoid use in new code + #define BLARGG_DEPRECATED_TEXT( text ) + #define BLARGG_DEPRECATED( text ) +#endif + +/* BOOST::int8_t, BOOST::int32_t, etc. +I used BOOST since I originally was going to allow use of the boost library +for prividing the definitions. If I'm defining them, they must be scoped or +else they could conflict with the standard ones at global scope. Even if +HAVE_STDINT_H isn't defined, I can't assume the typedefs won't exist at +global scope already. */ +#if defined (HAVE_STDINT_H) || \ + UCHAR_MAX != 0xFF || USHRT_MAX != 0xFFFF || UINT_MAX != 0xFFFFFFFF + #include + #define BOOST +#else + struct BOOST + { + typedef signed char int8_t; + typedef unsigned char uint8_t; + typedef short int16_t; + typedef unsigned short uint16_t; + typedef int int32_t; + typedef unsigned int uint32_t; + }; +#endif + +/* My code is not written with exceptions in mind, so either uses new (nothrow) +OR overrides operator new in my classes. The former is best since clients +creating objects will get standard exceptions on failure, but that causes it +to require the standard C++ library. So, when the client is using the C +interface, I override operator new to use malloc. */ + +// BLARGG_DISABLE_NOTHROW is put inside classes +#ifndef BLARGG_DISABLE_NOTHROW + // throw spec mandatory in ISO C++ if NULL can be returned + #if __cplusplus >= 199711 || __GNUC__ >= 3 || _MSC_VER >= 1300 + #define BLARGG_THROWS_NOTHING throw () + #else + #define BLARGG_THROWS_NOTHING + #endif + + #define BLARGG_DISABLE_NOTHROW \ + void* operator new ( size_t s ) BLARGG_THROWS_NOTHING { return malloc( s ); }\ + void operator delete( void* p ) BLARGG_THROWS_NOTHING { free( p ); } + + #define BLARGG_NEW new +#else + // BLARGG_NEW is used in place of new in library code + #include + #define BLARGG_NEW new (std::nothrow) +#endif + + class blargg_vector_ { + protected: + void* begin_; + size_t size_; + void init(); + blargg_err_t resize_( size_t n, size_t elem_size ); + public: + size_t size() const { return size_; } + void clear(); + }; + +// Very lightweight vector for POD types (no constructor/destructor) +template +class blargg_vector : public blargg_vector_ { + union T_must_be_pod { T t; }; // fails if T is not POD +public: + blargg_vector() { init(); } + ~blargg_vector() { clear(); } + + blargg_err_t resize( size_t n ) { return resize_( n, sizeof (T) ); } + + T* begin() { return static_cast (begin_); } + const T* begin() const { return static_cast (begin_); } + + T* end() { return static_cast (begin_) + size_; } + const T* end() const { return static_cast (begin_) + size_; } + + T& operator [] ( size_t n ) + { + assert( n < size_ ); + return static_cast (begin_) [n]; + } + + const T& operator [] ( size_t n ) const + { + assert( n < size_ ); + return static_cast (begin_) [n]; + } +}; + +// Callback function with user data. +// blargg_callback set_callback; // for user, this acts like... +// void set_callback( T func, void* user_data = NULL ); // ...this +// To call function, do set_callback.f( .. set_callback.data ... ); +template +struct blargg_callback +{ + T f; + void* data; + blargg_callback() { f = NULL; } + void operator () ( T callback, void* user_data = NULL ) { f = callback; data = user_data; } +}; + +#ifndef _WIN32 + // Not supported on any other platforms + #undef BLARGG_UTF8_PATHS +#endif + +BLARGG_DEPRECATED( typedef signed int blargg_long; ) +BLARGG_DEPRECATED( typedef unsigned int blargg_ulong; ) +#if BLARGG_LEGACY + #define BOOST_STATIC_ASSERT BLARGG_STATIC_ASSERT +#endif + +#endif diff --git a/snesreader/fex/blargg_config.h b/snesreader/fex/blargg_config.h new file mode 100644 index 00000000..eb862609 --- /dev/null +++ b/snesreader/fex/blargg_config.h @@ -0,0 +1,34 @@ +// Library configuration. Modify this file as necessary. + +// File_Extractor 1.0.0 +#ifndef BLARGG_CONFIG_H +#define BLARGG_CONFIG_H + +// Uncomment a #define line below to have effect described. + +// Enable RAR archive support. Doing so adds extra licensing restrictions +// to this library (see unrar/readme.txt for more information). +#define FEX_ENABLE_RAR 1 + +// Accept file paths encoded as UTF-8. Currently only affects Windows, +// as Unix/Linux/Mac OS X already use UTF-8 paths. +#define BLARGG_UTF8_PATHS 1 + +// Enable support for as building DLL on Windows. +//#define BLARGG_BUILD_DLL 1 + +// Support only the listed archive types. Remove any you don't need. +/* +#define FEX_TYPE_LIST \ + fex_7z_type,\ + fex_gz_type,\ + fex_rar_type,\ + fex_zip_type, +*/ + +// Use standard config.h if present +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#endif diff --git a/snesreader/fex/blargg_endian.h b/snesreader/fex/blargg_endian.h new file mode 100644 index 00000000..c32c12f5 --- /dev/null +++ b/snesreader/fex/blargg_endian.h @@ -0,0 +1,185 @@ +// CPU Byte Order Utilities + +// File_Extractor 1.0.0 +#ifndef BLARGG_ENDIAN_H +#define BLARGG_ENDIAN_H + +#include "blargg_common.h" + +// BLARGG_CPU_CISC: Defined if CPU has very few general-purpose registers (< 16) +#if defined (__i386__) || defined (__x86_64__) || defined (_M_IX86) || defined (_M_X64) + #define BLARGG_CPU_X86 1 + #define BLARGG_CPU_CISC 1 +#endif + +#if defined (__powerpc__) || defined (__ppc__) || defined (__ppc64__) || \ + defined (__POWERPC__) || defined (__powerc) + #define BLARGG_CPU_POWERPC 1 + #define BLARGG_CPU_RISC 1 +#endif + +// BLARGG_BIG_ENDIAN, BLARGG_LITTLE_ENDIAN: Determined automatically, otherwise only +// one may be #defined to 1. Only needed if something actually depends on byte order. +#if !defined (BLARGG_BIG_ENDIAN) && !defined (BLARGG_LITTLE_ENDIAN) +#ifdef __GLIBC__ + // GCC handles this for us + #include + #if __BYTE_ORDER == __LITTLE_ENDIAN + #define BLARGG_LITTLE_ENDIAN 1 + #elif __BYTE_ORDER == __BIG_ENDIAN + #define BLARGG_BIG_ENDIAN 1 + #endif +#else + +#if defined (LSB_FIRST) || defined (__LITTLE_ENDIAN__) || BLARGG_CPU_X86 || \ + (defined (LITTLE_ENDIAN) && LITTLE_ENDIAN+0 != 1234) + #define BLARGG_LITTLE_ENDIAN 1 +#endif + +#if defined (MSB_FIRST) || defined (__BIG_ENDIAN__) || defined (WORDS_BIGENDIAN) || \ + defined (__sparc__) || BLARGG_CPU_POWERPC || \ + (defined (BIG_ENDIAN) && BIG_ENDIAN+0 != 4321) + #define BLARGG_BIG_ENDIAN 1 +#elif !defined (__mips__) + // No endian specified; assume little-endian, since it's most common + #define BLARGG_LITTLE_ENDIAN 1 +#endif +#endif +#endif + +#if BLARGG_LITTLE_ENDIAN && BLARGG_BIG_ENDIAN + #undef BLARGG_LITTLE_ENDIAN + #undef BLARGG_BIG_ENDIAN +#endif + +inline void blargg_verify_byte_order() +{ + #ifndef NDEBUG + #if BLARGG_BIG_ENDIAN + volatile int i = 1; + assert( *(volatile char*) &i == 0 ); + #elif BLARGG_LITTLE_ENDIAN + volatile int i = 1; + assert( *(volatile char*) &i != 0 ); + #endif + #endif +} + +inline unsigned get_le16( void const* p ) +{ + return (unsigned) ((unsigned char const*) p) [1] << 8 | + (unsigned) ((unsigned char const*) p) [0]; +} + +inline unsigned get_be16( void const* p ) +{ + return (unsigned) ((unsigned char const*) p) [0] << 8 | + (unsigned) ((unsigned char const*) p) [1]; +} + +inline unsigned get_le32( void const* p ) +{ + return (unsigned) ((unsigned char const*) p) [3] << 24 | + (unsigned) ((unsigned char const*) p) [2] << 16 | + (unsigned) ((unsigned char const*) p) [1] << 8 | + (unsigned) ((unsigned char const*) p) [0]; +} + +inline unsigned get_be32( void const* p ) +{ + return (unsigned) ((unsigned char const*) p) [0] << 24 | + (unsigned) ((unsigned char const*) p) [1] << 16 | + (unsigned) ((unsigned char const*) p) [2] << 8 | + (unsigned) ((unsigned char const*) p) [3]; +} + +inline void set_le16( void* p, unsigned n ) +{ + ((unsigned char*) p) [1] = (unsigned char) (n >> 8); + ((unsigned char*) p) [0] = (unsigned char) n; +} + +inline void set_be16( void* p, unsigned n ) +{ + ((unsigned char*) p) [0] = (unsigned char) (n >> 8); + ((unsigned char*) p) [1] = (unsigned char) n; +} + +inline void set_le32( void* p, unsigned n ) +{ + ((unsigned char*) p) [0] = (unsigned char) n; + ((unsigned char*) p) [1] = (unsigned char) (n >> 8); + ((unsigned char*) p) [2] = (unsigned char) (n >> 16); + ((unsigned char*) p) [3] = (unsigned char) (n >> 24); +} + +inline void set_be32( void* p, unsigned n ) +{ + ((unsigned char*) p) [3] = (unsigned char) n; + ((unsigned char*) p) [2] = (unsigned char) (n >> 8); + ((unsigned char*) p) [1] = (unsigned char) (n >> 16); + ((unsigned char*) p) [0] = (unsigned char) (n >> 24); +} + +#if BLARGG_NONPORTABLE + // Optimized implementation if byte order is known + #if BLARGG_LITTLE_ENDIAN + #define GET_LE16( addr ) (*(BOOST::uint16_t const*) (addr)) + #define GET_LE32( addr ) (*(BOOST::uint32_t const*) (addr)) + #define SET_LE16( addr, data ) (void) (*(BOOST::uint16_t*) (addr) = (data)) + #define SET_LE32( addr, data ) (void) (*(BOOST::uint32_t*) (addr) = (data)) + #elif BLARGG_BIG_ENDIAN + #define GET_BE16( addr ) (*(BOOST::uint16_t const*) (addr)) + #define GET_BE32( addr ) (*(BOOST::uint32_t const*) (addr)) + #define SET_BE16( addr, data ) (void) (*(BOOST::uint16_t*) (addr) = (data)) + #define SET_BE32( addr, data ) (void) (*(BOOST::uint32_t*) (addr) = (data)) + + #if BLARGG_CPU_POWERPC + // PowerPC has special byte-reversed instructions + #if defined (__MWERKS__) + #define GET_LE16( addr ) (__lhbrx( addr, 0 )) + #define GET_LE32( addr ) (__lwbrx( addr, 0 )) + #define SET_LE16( addr, in ) (__sthbrx( in, addr, 0 )) + #define SET_LE32( addr, in ) (__stwbrx( in, addr, 0 )) + #elif defined (__GNUC__) + #define GET_LE16( addr ) ({unsigned short ppc_lhbrx_; __asm__ volatile( "lhbrx %0,0,%1" : "=r" (ppc_lhbrx_) : "r" (addr) : "memory" ); ppc_lhbrx_;}) + #define GET_LE32( addr ) ({unsigned short ppc_lwbrx_; __asm__ volatile( "lwbrx %0,0,%1" : "=r" (ppc_lwbrx_) : "r" (addr) : "memory" ); ppc_lwbrx_;}) + #define SET_LE16( addr, in ) ({__asm__ volatile( "sthbrx %0,0,%1" : : "r" (in), "r" (addr) : "memory" );}) + #define SET_LE32( addr, in ) ({__asm__ volatile( "stwbrx %0,0,%1" : : "r" (in), "r" (addr) : "memory" );}) + #endif + #endif + #endif +#endif + +#ifndef GET_LE16 + #define GET_LE16( addr ) get_le16( addr ) + #define SET_LE16( addr, data ) set_le16( addr, data ) +#endif + +#ifndef GET_LE32 + #define GET_LE32( addr ) get_le32( addr ) + #define SET_LE32( addr, data ) set_le32( addr, data ) +#endif + +#ifndef GET_BE16 + #define GET_BE16( addr ) get_be16( addr ) + #define SET_BE16( addr, data ) set_be16( addr, data ) +#endif + +#ifndef GET_BE32 + #define GET_BE32( addr ) get_be32( addr ) + #define SET_BE32( addr, data ) set_be32( addr, data ) +#endif + +// auto-selecting versions + +inline void set_le( BOOST::uint16_t* p, unsigned n ) { SET_LE16( p, n ); } +inline void set_le( BOOST::uint32_t* p, unsigned n ) { SET_LE32( p, n ); } +inline void set_be( BOOST::uint16_t* p, unsigned n ) { SET_BE16( p, n ); } +inline void set_be( BOOST::uint32_t* p, unsigned n ) { SET_BE32( p, n ); } +inline unsigned get_le( BOOST::uint16_t const* p ) { return GET_LE16( p ); } +inline unsigned get_le( BOOST::uint32_t const* p ) { return GET_LE32( p ); } +inline unsigned get_be( BOOST::uint16_t const* p ) { return GET_BE16( p ); } +inline unsigned get_be( BOOST::uint32_t const* p ) { return GET_BE32( p ); } + +#endif diff --git a/snesreader/fex/blargg_errors.cpp b/snesreader/fex/blargg_errors.cpp new file mode 100644 index 00000000..14076cdb --- /dev/null +++ b/snesreader/fex/blargg_errors.cpp @@ -0,0 +1,113 @@ +// File_Extractor 1.0.0. http://www.slack.net/~ant/ + +#include "blargg_errors.h" + +/* Copyright (C) 2009 Shay Green. This module is free software; you +can redistribute it and/or modify it under the terms of the GNU Lesser +General Public License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. This +module is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +details. You should have received a copy of the GNU Lesser General Public +License along with this module; if not, write to the Free Software Foundation, +Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ + +#include "blargg_source.h" + +blargg_err_def_t blargg_err_generic = BLARGG_ERR_GENERIC; +blargg_err_def_t blargg_err_memory = BLARGG_ERR_MEMORY; +blargg_err_def_t blargg_err_caller = BLARGG_ERR_CALLER; +blargg_err_def_t blargg_err_internal = BLARGG_ERR_INTERNAL; +blargg_err_def_t blargg_err_limitation = BLARGG_ERR_LIMITATION; + +blargg_err_def_t blargg_err_file_missing = BLARGG_ERR_FILE_MISSING; +blargg_err_def_t blargg_err_file_read = BLARGG_ERR_FILE_READ; +blargg_err_def_t blargg_err_file_write = BLARGG_ERR_FILE_WRITE; +blargg_err_def_t blargg_err_file_io = BLARGG_ERR_FILE_IO; +blargg_err_def_t blargg_err_file_full = BLARGG_ERR_FILE_FULL; +blargg_err_def_t blargg_err_file_eof = BLARGG_ERR_FILE_EOF; + +blargg_err_def_t blargg_err_file_type = BLARGG_ERR_FILE_TYPE; +blargg_err_def_t blargg_err_file_feature = BLARGG_ERR_FILE_FEATURE; +blargg_err_def_t blargg_err_file_corrupt = BLARGG_ERR_FILE_CORRUPT; + +const char* blargg_err_str( blargg_err_t err ) +{ + if ( !err ) + return ""; + + if ( *err == BLARGG_ERR_TYPE("")[0] ) + return err + 1; + + return err; +} + +bool blargg_is_err_type( blargg_err_t err, const char type [] ) +{ + if ( err ) + { + // True if first strlen(type) characters of err match type + char const* p = err; + while ( *type && *type == *p ) + { + type++; + p++; + } + + if ( !*type ) + return true; + } + + return false; +} + +const char* blargg_err_details( blargg_err_t err ) +{ + const char* p = err; + if ( !p ) + { + p = ""; + } + else if ( *p == BLARGG_ERR_TYPE("")[0] ) + { + while ( *p && *p != ';' ) + p++; + + // Skip ; and space after it + if ( *p ) + { + p++; + + check( *p == ' ' ); + if ( *p ) + p++; + } + } + return p; +} + +int blargg_err_to_code( blargg_err_t err, blargg_err_to_code_t const codes [] ) +{ + if ( !err ) + return 0; + + while ( codes->str && !blargg_is_err_type( err, codes->str ) ) + codes++; + + return codes->code; +} + +blargg_err_t blargg_code_to_err( int code, blargg_err_to_code_t const codes [] ) +{ + if ( !code ) + return blargg_ok; + + while ( codes->str && codes->code != code ) + codes++; + + if ( !codes->str ) + return blargg_err_generic; + + return codes->str; +} diff --git a/snesreader/fex/blargg_errors.h b/snesreader/fex/blargg_errors.h new file mode 100644 index 00000000..9c5206d5 --- /dev/null +++ b/snesreader/fex/blargg_errors.h @@ -0,0 +1,80 @@ +// Error strings and conversion functions + +// File_Extractor 1.0.0 +#ifndef BLARGG_ERRORS_H +#define BLARGG_ERRORS_H + +#ifndef BLARGG_COMMON_H + #include "blargg_common.h" +#endif + +typedef const char blargg_err_def_t []; + +// Basic errors +extern blargg_err_def_t blargg_err_generic; +extern blargg_err_def_t blargg_err_memory; +extern blargg_err_def_t blargg_err_caller; +extern blargg_err_def_t blargg_err_internal; +extern blargg_err_def_t blargg_err_limitation; + +// File low-level +extern blargg_err_def_t blargg_err_file_missing; // not found +extern blargg_err_def_t blargg_err_file_read; +extern blargg_err_def_t blargg_err_file_write; +extern blargg_err_def_t blargg_err_file_io; +extern blargg_err_def_t blargg_err_file_full; +extern blargg_err_def_t blargg_err_file_eof; + +// File high-level +extern blargg_err_def_t blargg_err_file_type; // wrong file type +extern blargg_err_def_t blargg_err_file_feature; +extern blargg_err_def_t blargg_err_file_corrupt; + +// C string describing error, or "" if err == NULL +const char* blargg_err_str( blargg_err_t err ); + +// True iff error is of given type, or false if err == NULL +bool blargg_is_err_type( blargg_err_t, const char type [] ); + +// Details of error without describing main cause, or "" if err == NULL +const char* blargg_err_details( blargg_err_t err ); + +// Converts error string to integer code using mapping table. Calls blargg_is_err_type() +// for each str and returns code on first match. Returns 0 if err == NULL. +struct blargg_err_to_code_t { + const char* str; + int code; +}; +int blargg_err_to_code( blargg_err_t err, blargg_err_to_code_t const [] ); + +// Converts error code back to string. If code == 0, returns NULL. If not in table, +// returns blargg_err_generic. +blargg_err_t blargg_code_to_err( int code, blargg_err_to_code_t const [] ); + +// Generates error string literal with details of cause +#define BLARGG_ERR( type, str ) (type "; " str) + +// Extra space to make it clear when blargg_err_str() isn't called to get +// printable version of error. At some point, I might prefix error strings +// with a code, to speed conversion to a code. +#define BLARGG_ERR_TYPE( str ) " " str + +// Error types to pass to BLARGG_ERR macro +#define BLARGG_ERR_GENERIC BLARGG_ERR_TYPE( "operation failed" ) +#define BLARGG_ERR_MEMORY BLARGG_ERR_TYPE( "out of memory" ) +#define BLARGG_ERR_CALLER BLARGG_ERR_TYPE( "internal usage bug" ) +#define BLARGG_ERR_INTERNAL BLARGG_ERR_TYPE( "internal bug" ) +#define BLARGG_ERR_LIMITATION BLARGG_ERR_TYPE( "exceeded limitation" ) + +#define BLARGG_ERR_FILE_MISSING BLARGG_ERR_TYPE( "file not found" ) +#define BLARGG_ERR_FILE_READ BLARGG_ERR_TYPE( "couldn't open file" ) +#define BLARGG_ERR_FILE_WRITE BLARGG_ERR_TYPE( "couldn't modify file" ) +#define BLARGG_ERR_FILE_IO BLARGG_ERR_TYPE( "read/write error" ) +#define BLARGG_ERR_FILE_FULL BLARGG_ERR_TYPE( "disk full" ) +#define BLARGG_ERR_FILE_EOF BLARGG_ERR_TYPE( "truncated file" ) + +#define BLARGG_ERR_FILE_TYPE BLARGG_ERR_TYPE( "wrong file type" ) +#define BLARGG_ERR_FILE_FEATURE BLARGG_ERR_TYPE( "unsupported file feature" ) +#define BLARGG_ERR_FILE_CORRUPT BLARGG_ERR_TYPE( "corrupt file" ) + +#endif diff --git a/snesreader/fex/blargg_source.h b/snesreader/fex/blargg_source.h new file mode 100644 index 00000000..659f34c5 --- /dev/null +++ b/snesreader/fex/blargg_source.h @@ -0,0 +1,125 @@ +/* Included at the beginning of library source files, AFTER all other #include +lines. Sets up helpful macros and services used in my source code. Since this +is only "active" in my source code, I don't have to worry about polluting the +global namespace with unprefixed names. */ + +// File_Extractor 1.0.0 +#ifndef BLARGG_SOURCE_H +#define BLARGG_SOURCE_H + +#ifndef BLARGG_COMMON_H // optimization only + #include "blargg_common.h" +#endif +#include "blargg_errors.h" + +#include /* memcpy(), memset(), memmove() */ +#include /* offsetof() */ + +/* The following four macros are for debugging only. Some or all might be +defined to do nothing, depending on the circumstances. Described is what +happens when a particular macro is defined to do something. When defined to +do nothing, the macros do NOT evaluate their argument(s). */ + +/* If expr is false, prints file and line number, then aborts program. Meant +for checking internal state and consistency. A failed assertion indicates a bug +in MY code. + +void assert( bool expr ); */ +#include + +/* If expr is false, prints file and line number, then aborts program. Meant +for checking caller-supplied parameters and operations that are outside the +control of the module. A failed requirement probably indicates a bug in YOUR +code. + +void require( bool expr ); */ +#undef require +#define require( expr ) assert( expr ) + +/* Like printf() except output goes to debugging console/file. + +void dprintf( const char format [], ... ); */ +static inline void blargg_dprintf_( const char [], ... ) { } +#undef dprintf +#define dprintf (1) ? (void) 0 : blargg_dprintf_ + +/* If expr is false, prints file and line number to debug console/log, then +continues execution normally. Meant for flagging potential problems or things +that should be looked into, but that aren't serious problems. + +void check( bool expr ); */ +#undef check +#define check( expr ) ((void) 0) + +/* If expr yields non-NULL error string, returns it from current function, +otherwise continues normally. */ +#undef RETURN_ERR +#define RETURN_ERR( expr ) \ + do {\ + blargg_err_t blargg_return_err_ = (expr);\ + if ( blargg_return_err_ )\ + return blargg_return_err_;\ + } while ( 0 ) + +/* If ptr is NULL, returns out-of-memory error, otherwise continues normally. */ +#undef CHECK_ALLOC +#define CHECK_ALLOC( ptr ) \ + do {\ + if ( !(ptr) )\ + return blargg_err_memory;\ + } while ( 0 ) + +/* The usual min/max functions for built-in types. + +template T min( T x, T y ) { return x < y ? x : y; } +template T max( T x, T y ) { return x > y ? x : y; } */ +#define BLARGG_DEF_MIN_MAX( type ) \ + static inline type blargg_min( type x, type y ) { if ( y < x ) x = y; return x; }\ + static inline type blargg_max( type x, type y ) { if ( x < y ) x = y; return x; } + +BLARGG_DEF_MIN_MAX( int ) +BLARGG_DEF_MIN_MAX( unsigned ) +BLARGG_DEF_MIN_MAX( long ) +BLARGG_DEF_MIN_MAX( unsigned long ) +BLARGG_DEF_MIN_MAX( float ) +BLARGG_DEF_MIN_MAX( double ) + +#undef min +#define min blargg_min + +#undef max +#define max blargg_max + +// typedef unsigned char byte; +typedef unsigned char blargg_byte; +#undef byte +#define byte blargg_byte + +#ifndef BLARGG_EXPORT + #if defined (_WIN32) && BLARGG_BUILD_DLL + #define BLARGG_EXPORT __declspec(dllexport) + #elif defined (__GNUC__) + // can always set visibility, even when not building DLL + #define BLARGG_EXPORT __attribute__ ((visibility ("default"))) + #else + #define BLARGG_EXPORT + #endif +#endif + +#if BLARGG_LEGACY + #define BLARGG_CHECK_ALLOC CHECK_ALLOC + #define BLARGG_RETURN_ERR RETURN_ERR +#endif + +// Called after failed operation when overall operation may still complete OK. +// Only used by unit testing framework. +#undef ACK_FAILURE +#define ACK_FAILURE() ((void)0) + +/* BLARGG_SOURCE_BEGIN: If defined, #included, allowing redefition of dprintf etc. +and check */ +#ifdef BLARGG_SOURCE_BEGIN + #include BLARGG_SOURCE_BEGIN +#endif + +#endif diff --git a/snesreader/fex/fex.cpp b/snesreader/fex/fex.cpp new file mode 100644 index 00000000..d0946dd9 --- /dev/null +++ b/snesreader/fex/fex.cpp @@ -0,0 +1,323 @@ +// File_Extractor 1.0.0. http://www.slack.net/~ant/ + +#include "fex.h" + +#include "File_Extractor.h" +#include "blargg_endian.h" +#include +#include + +/* Copyright (C) 2005-2009 Shay Green. This module is free software; you +can redistribute it and/or modify it under the terms of the GNU Lesser +General Public License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. This +module is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +details. You should have received a copy of the GNU Lesser General Public +License along with this module; if not, write to the Free Software Foundation, +Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ + +#include "blargg_source.h" + + +//// Types + +BLARGG_EXPORT const fex_type_t* fex_type_list( void ) +{ + static fex_type_t const fex_type_list_ [] = + { + #ifdef FEX_TYPE_LIST + FEX_TYPE_LIST + #else + // Modify blargg_config.h to change type list, NOT this file + fex_7z_type, + fex_gz_type, + #if FEX_ENABLE_RAR + fex_rar_type, + #endif + fex_zip_type, + #endif + fex_bin_type, + NULL + }; + + return fex_type_list_; +} + +BLARGG_EXPORT fex_err_t fex_init( void ) +{ + static bool inited; + if ( !inited ) + { + for ( fex_type_t const* t = fex_type_list(); *t != NULL; ++t ) + { + if ( (*t)->init ) + RETURN_ERR( (*t)->init() ); + } + inited = true; + } + return blargg_ok; +} + +BLARGG_EXPORT const char* fex_identify_header( void const* header ) +{ + unsigned four = get_be32( header ); + switch ( four ) + { + case 0x52457E5E: + case 0x52617221: return ".rar"; + + case 0x377ABCAF: return ".7z"; + + case 0x504B0304: + case 0x504B0506: return ".zip"; + + case 0x53495421: return ".sit"; + case 0x41724301: return ".arc"; + case 0x4D534346: return ".cab"; + case 0x5A4F4F20: return ".zoo"; + } + + unsigned three = four >> 8; + switch ( three ) + { + case 0x425A68: return ".bz2"; + } + + unsigned two = four >> 16; + switch ( two ) + { + case 0x1F8B: return ".gz"; + case 0x60EA: return ".arj"; + } + + unsigned skip_first_two = four & 0xFFFF; + if ( skip_first_two == 0x2D6C ) + return ".lha"; + + return ""; +} + +static int fex_has_extension_( const char str [], const char suffix [], size_t str_len ) +{ + size_t suffix_len = strlen( suffix ); + if ( str_len >= suffix_len ) + { + str += str_len - suffix_len; + while ( *str && tolower( (unsigned char) *str ) == *suffix ) + { + str++; + suffix++; + } + } + return *suffix == 0; +} + +BLARGG_EXPORT int fex_has_extension( const char str [], const char suffix [] ) +{ + return fex_has_extension_( str, suffix, strlen( str ) ); +} + +static int is_archive_extension( const char str [] ) +{ + static const char exts [] [6] = { + ".7z", + ".arc", + ".arj", + ".bz2", + ".cab", + ".dmg", + ".gz", + ".lha", + ".lz", + ".lzh", + ".lzma", + ".lzo", + ".lzx", + ".pea", + ".rar", + ".sit", + ".sitx", + ".tgz", + ".tlz", + ".z", + ".zip", + ".zoo", + "" + }; + + size_t str_len = strlen( str ); + const char (*ext) [6] = exts; + for ( ; **ext; ext++ ) + { + if ( fex_has_extension_( str, *ext, str_len ) ) + return 1; + } + return 0; +} + +BLARGG_EXPORT fex_type_t fex_identify_extension( const char str [] ) +{ + size_t str_len = strlen( str ); + for ( fex_type_t const* types = fex_type_list(); *types; types++ ) + { + if ( fex_has_extension_( str, (*types)->extension, str_len ) ) + { + // Avoid treating known archive type as binary + if ( *(*types)->extension || !is_archive_extension( str ) ) + return *types; + } + } + return NULL; +} + +BLARGG_EXPORT fex_err_t fex_identify_file( fex_type_t* type_out, const char path [] ) +{ + *type_out = NULL; + + fex_type_t type = fex_identify_extension( path ); + + // Unsupported extension? + if ( !type ) + return blargg_ok; // reject + + // Unknown/no extension? + if ( !*(type->extension) ) + { + // Examine header + FEX_FILE_READER in; + RETURN_ERR( in.open( path ) ); + if ( in.remain() >= fex_identify_header_size ) + { + char h [fex_identify_header_size]; + RETURN_ERR( in.read( h, sizeof h ) ); + + type = fex_identify_extension( fex_identify_header( h ) ); + } + } + + *type_out = type; + return blargg_ok; +} + +BLARGG_EXPORT fex_err_t fex_open_type( fex_t** fe_out, const char path [], fex_type_t type ) +{ + *fe_out = NULL; + + if ( !type ) + return blargg_err_file_type; + + fex_t* fe = type->new_fex(); + CHECK_ALLOC( fe ); + + fex_err_t err = fe->open( path ); + if ( err ) + { + delete fe; + return err; + } + + *fe_out = fe; + return blargg_ok; +} + +BLARGG_EXPORT fex_err_t fex_open( fex_t** fe_out, const char path [] ) +{ + *fe_out = NULL; + + fex_type_t type; + RETURN_ERR( fex_identify_file( &type, path ) ); + + return fex_open_type( fe_out, path, type ); +} + + +//// Wide paths + +#if BLARGG_UTF8_PATHS +char* fex_wide_to_path( const wchar_t* wide ) +{ + return blargg_to_utf8( wide ); +} + +void fex_free_path( char* path ) +{ + free( path ); +} +#endif + + +//// Errors + +#define ENTRY( name ) { blargg_err_##name, fex_err_##name } +static blargg_err_to_code_t const fex_codes [] = +{ + ENTRY( generic ), + ENTRY( memory ), + ENTRY( caller ), + ENTRY( internal ), + ENTRY( limitation ), + + ENTRY( file_missing ), + ENTRY( file_read ), + ENTRY( file_io ), + ENTRY( file_eof ), + + ENTRY( file_type ), + ENTRY( file_feature ), + ENTRY( file_corrupt ), + + { 0, -1 } +}; +#undef ENTRY + +static int err_code( fex_err_t err ) +{ + return blargg_err_to_code( err, fex_codes ); +} + +BLARGG_EXPORT int fex_err_code( fex_err_t err ) +{ + int code = err_code( err ); + return (code >= 0 ? code : fex_err_generic); +} + +BLARGG_EXPORT fex_err_t fex_code_to_err( int code ) +{ + return blargg_code_to_err( code, fex_codes ); +} + +BLARGG_EXPORT const char* fex_err_details( fex_err_t err ) +{ + // If we don't have error code assigned, return entire string + return (err_code( err ) >= 0 ? blargg_err_details( err ) : blargg_err_str( err )); +} + + +//// Wrappers + +BLARGG_EXPORT fex_err_t fex_read( fex_t* fe, void* out, int count ) +{ + RETURN_ERR( fe->stat() ); + return fe->reader().read( out, count ); +} + +BLARGG_EXPORT void fex_close ( fex_t* fe ) { delete fe; } +BLARGG_EXPORT fex_type_t fex_type ( const fex_t* fe ) { return fe->type(); } +BLARGG_EXPORT int fex_done ( const fex_t* fe ) { return fe->done(); } +BLARGG_EXPORT const char* fex_name ( const fex_t* fe ) { return fe->name(); } +BLARGG_EXPORT const wchar_t* fex_wname ( const fex_t* fe ) { return fe->wname(); } +BLARGG_EXPORT int fex_size ( const fex_t* fe ) { return fe->size(); } +BLARGG_EXPORT unsigned fex_dos_date ( const fex_t* fe ) { return fe->dos_date(); } +BLARGG_EXPORT unsigned fex_crc32 ( const fex_t* fe ) { return fe->crc32(); } +BLARGG_EXPORT fex_err_t fex_stat ( fex_t* fe ) { return fe->stat(); } +BLARGG_EXPORT fex_err_t fex_next ( fex_t* fe ) { return fe->next(); } +BLARGG_EXPORT fex_err_t fex_rewind ( fex_t* fe ) { return fe->rewind(); } +BLARGG_EXPORT int fex_tell ( const fex_t* fe ) { return fe->tell(); } +BLARGG_EXPORT fex_pos_t fex_tell_arc ( const fex_t* fe ) { return fe->tell_arc(); } +BLARGG_EXPORT fex_err_t fex_seek_arc ( fex_t* fe, fex_pos_t pos ) { return fe->seek_arc( pos ); } +BLARGG_EXPORT const char* fex_type_extension ( fex_type_t t ) { return t->extension; } +BLARGG_EXPORT const char* fex_type_name ( fex_type_t t ) { return t->name; } +BLARGG_EXPORT fex_err_t fex_data ( fex_t* fe, const void** data_out ) { return fe->data( data_out ); } +BLARGG_EXPORT const char* fex_err_str ( fex_err_t err ) { return blargg_err_str( err ); } diff --git a/snesreader/fex/fex.h b/snesreader/fex/fex.h new file mode 100644 index 00000000..f9452771 --- /dev/null +++ b/snesreader/fex/fex.h @@ -0,0 +1,206 @@ +/** Uniform access to zip, gzip, 7-zip, and RAR compressed archives \file */ + +/* File_Extractor 1.0.0 */ +#ifndef FEX_H +#define FEX_H + +#include + +#ifdef __cplusplus + extern "C" { +#endif + + +/** First parameter of most functions is fex_t*, or const fex_t* if nothing is +changed. Once one of these functions returns an error, the archive should not +be used any further, other than to close it. One exception is +fex_error_file_eof; the archive may still be used after this. */ +typedef struct fex_t fex_t; + +/** Pointer to error, or NULL if function was successful. See error functions +below. */ +#ifndef fex_err_t /* (#ifndef allows better testing of library) */ + typedef const char* fex_err_t; +#endif + + +/**** File types ****/ + +/** Archive file type identifier. Can also hold NULL. */ +typedef const struct fex_type_t_* fex_type_t; + +/** Array of supported types, with NULL at end */ +const fex_type_t* fex_type_list( void ); + +/** Name of this archive type, e.g. "ZIP archive", "file" */ +const char* fex_type_name( fex_type_t ); + +/** Usual file extension for type, e.g. ".zip", ".7z". For binary file type, +returns "", since it can open any file. */ +const char* fex_type_extension( fex_type_t ); + + +/**** Wide-character file paths (Windows only) ****/ + +/** Converts wide-character path to form suitable for use with fex functions. +Only supported when BLARGG_UTF8_PATHS is defined and building on Windows. */ +char* fex_wide_to_path( const wchar_t* wide ); + +/** Frees converted path. OK to pass NULL. Only supported when BLARGG_UTF8_PATHS +is defined and building on Windows */ +void fex_free_path( char* ); + + +/**** Identification ****/ + +/** True if str ends in extension. If extension is "", always returns true. +Converts str to lowercase before comparison, so extension should ALREADY be +lowercase (i.e. pass ".zip", NOT ".ZIP"). */ +int fex_has_extension( const char str [], const char extension [] ); + +/** Determines type based on first fex_identify_header_size bytes of file. +Returns usual file extension this should have (e.g. ".zip", ".gz", etc.). +Returns "" if file header is not recognized. */ +const char* fex_identify_header( const void* header ); +enum { fex_identify_header_size = 16 }; + +/** Determines type based on extension of a file path, or just a lone extension +(must include '.', e.g. ".zip", NOT just "zip"). Returns NULL if extension is +for an unsupported type (e.g. ".lzh"). */ +fex_type_t fex_identify_extension( const char path_or_extension [] ); + +/** Determines type based on filename extension and/or file header. Sets *out +to determined type, or NULL if type is not supported. */ +fex_err_t fex_identify_file( fex_type_t* out, const char path [] ); + +/** Type of an already-opened archive */ +fex_type_t fex_type( const fex_t* ); + + +/**** Open/close ****/ + +/** Initializes static tables used by library. Automatically called by +fex_open(). OK to call more than once. */ +fex_err_t fex_init( void ); + +/** Opens archive and points *out at it. If error, sets *out to NULL. */ +fex_err_t fex_open( fex_t** out, const char path [] ); + +/** Opens archive of specified type and sets *out. Returns error if file is not +of that archive type. If error, sets *out to NULL. */ +fex_err_t fex_open_type( fex_t** out, const char path [], fex_type_t ); + +/** Closes archive and frees memory. OK to pass NULL. */ +void fex_close( fex_t* ); + + +/**** Scanning ****/ + +/** True if at end of archive. Must be called after fex_open() or fex_rewind(), +as an archive might contain no files. */ +int fex_done( const fex_t* ); + +/** Goes to next file in archive. If there are no more files, fex_done() will +now return true. */ +fex_err_t fex_next( fex_t* ); + +/** Goes back to first file in archive, as if it were just opened with +fex_open() */ +fex_err_t fex_rewind( fex_t* ); + +/** Saved position in archive. Can also store zero. */ +typedef int fex_pos_t; + +/** Position of current file in archive. Never returns zero. */ +fex_pos_t fex_tell_arc( const fex_t* ); + +/** Returns to file at previously-saved position */ +fex_err_t fex_seek_arc( fex_t*, fex_pos_t ); + + +/**** Info ****/ + +/** Name of current file */ +const char* fex_name( const fex_t* ); + +/** Wide-character name of current file, or NULL if unavailable */ +const wchar_t* fex_wname( const fex_t* ); + +/** Makes further information available for file */ +fex_err_t fex_stat( fex_t* ); + +/** Size of current file. fex_stat() or fex_data() must have been called. */ +int fex_size( const fex_t* ); + +/** Modification date of current file (MS-DOS format), or 0 if unavailable. +fex_stat() must have been called. */ +unsigned int fex_dos_date( const fex_t* ); + +/** CRC-32 checksum of current file's contents, or 0 if unavailable. Doesn't +require calculation; simply gets it from file's header. fex_stat() must have +been called. */ +unsigned int fex_crc32( const fex_t* ); + + +/**** Extraction ****/ + +/** Reads n bytes from current file. Reading past end of file results in +fex_err_file_eof. */ +fex_err_t fex_read( fex_t*, void* out, int n ); + +/** Number of bytes read from current file */ +int fex_tell( const fex_t* ); + +/** Points *out at current file's data in memory. Pointer is valid until +fex_next(), fex_rewind(), fex_seek_arc(), or fex_close() is called. Pointer +must NOT be freed(); library frees it automatically. If error, sets *out to +NULL. */ +fex_err_t fex_data( fex_t*, const void** out ); + + +/**** Errors ****/ + +/** Error string associated with err. Returns "" if err is NULL. Returns err +unchanged if it isn't a fex_err_t returned by library. */ +const char* fex_err_str( fex_err_t err ); + +/** Details of error beyond main cause, or "" if none or err is NULL. Returns +err unchanged if it isn't a fex_err_t returned by library. */ +const char* fex_err_details( fex_err_t err ); + +/** Numeric code corresponding to err. Returns fex_ok if err is NULL. Returns +fex_err_generic if err isn't a fex_err_t returned by library. */ +int fex_err_code( fex_err_t err ); + +enum { + fex_ok = 0,/**< Successful call. Guaranteed to be zero. */ + fex_err_generic = 0x01,/**< Error of unspecified type */ + fex_err_memory = 0x02,/**< Out of memory */ + fex_err_caller = 0x03,/**< Caller called function with bad args */ + fex_err_internal = 0x04,/**< Internal problem, bug, etc. */ + fex_err_limitation = 0x05,/**< Exceeded program limit */ + + fex_err_file_missing = 0x20,/**< File not found at specified path */ + fex_err_file_read = 0x21,/**< Couldn't open file for reading */ + fex_err_file_io = 0x23,/**< Read/write error */ + fex_err_file_eof = 0x25,/**< Tried to read past end of file */ + + fex_err_file_type = 0x30,/**< File is of wrong type */ + fex_err_file_feature = 0x32,/**< File requires unsupported feature */ + fex_err_file_corrupt = 0x33 /**< File is corrupt */ +}; + +/** fex_err_t corresponding to numeric code. Note that this might not recover +the original fex_err_t before it was converted to a numeric code; in +particular, fex_err_details(fex_code_to_err(code)) will be "" in most cases. */ +fex_err_t fex_code_to_err( int code ); + + +/* Deprecated */ +typedef fex_t File_Extractor; + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/snesreader/filechooser.cpp b/snesreader/filechooser.cpp new file mode 100644 index 00000000..e1f9d8b0 --- /dev/null +++ b/snesreader/filechooser.cpp @@ -0,0 +1,57 @@ +#include "filechooser.moc.hpp" +#include "filechooser.moc" + +//FileChooser is implemented as a modal QWidget instead of a QDialog +//due to a bug in Qt 4.6.0 (QTBUG-7188); which causes the FileChooser +//to not refresh when a QTimer is active from the main application. +string FileChooser::exec() { + if(list.size() == 0) return ""; + if(list.size() == 1) return list[0]; + + listWidget->clear(); + for(unsigned i = 0; i < list.size(); i++) { + listWidget->addItem(list[i]); + } + listWidget->sortItems(Qt::AscendingOrder); + listWidget->setCurrentRow(0); + listWidget->setFocus(); + + name = ""; + setWindowModality(Qt::ApplicationModal); + show(); + while(isVisible()) QApplication::processEvents(); + setWindowModality(Qt::NonModal); + return name; +} + +void FileChooser::load() { + QListWidgetItem *item = listWidget->currentItem(); + if(item) name = item->text().toUtf8().constData(); + close(); +} + +FileChooser::FileChooser() { + setWindowTitle("Select Cartridge To Load"); + setMinimumWidth(480); + setMinimumHeight(320); + + layout = new QVBoxLayout; + setLayout(layout); + + listWidget = new QListWidget; + layout->addWidget(listWidget); + + controlLayout = new QHBoxLayout; + controlLayout->setAlignment(Qt::AlignRight); + layout->addLayout(controlLayout); + + okButton = new QPushButton("Ok"); + controlLayout->addWidget(okButton); + + cancelButton = new QPushButton("Cancel"); + controlLayout->addWidget(cancelButton); + + connect(listWidget, SIGNAL(itemActivated(QListWidgetItem*)), this, SLOT(load())); + connect(okButton, SIGNAL(released()), this, SLOT(load())); + connect(cancelButton, SIGNAL(released()), this, SLOT(close())); +} diff --git a/snesreader/filechooser.moc.hpp b/snesreader/filechooser.moc.hpp new file mode 100644 index 00000000..e024cab0 --- /dev/null +++ b/snesreader/filechooser.moc.hpp @@ -0,0 +1,20 @@ +class FileChooser : public QWidget { + Q_OBJECT + +public: + lstring list; + string name; + string exec(); + + FileChooser(); + +private slots: + void load(); + +private: + QVBoxLayout *layout; + QListWidget *listWidget; + QHBoxLayout *controlLayout; + QPushButton *okButton; + QPushButton *cancelButton; +} *fileChooser; diff --git a/snesreader/libjma/7z.h b/snesreader/libjma/7z.h new file mode 100644 index 00000000..50e1f242 --- /dev/null +++ b/snesreader/libjma/7z.h @@ -0,0 +1,28 @@ +/* +Copyright (C) 2005-2007 NSRT Team ( http://nsrt.edgeemu.com ) +Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net ) + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License version 2.1 as published by the Free Software Foundation. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef __7Z_H +#define __7Z_H + +#include "iiostrm.h" + +bool decompress_lzma_7z(ISequentialInStream& in, unsigned in_size, ISequentialOutStream& out, unsigned out_size) throw (); +bool decompress_lzma_7z(const unsigned char* in_data, unsigned in_size, unsigned char* out_data, unsigned out_size) throw (); + +#endif + diff --git a/snesreader/libjma/7zlzma.cpp b/snesreader/libjma/7zlzma.cpp new file mode 100644 index 00000000..b849d8df --- /dev/null +++ b/snesreader/libjma/7zlzma.cpp @@ -0,0 +1,50 @@ +/* +Copyright (C) 2005-2007 NSRT Team ( http://nsrt.edgeemu.com ) +Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net ) + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License version 2.1 as published by the Free Software Foundation. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include "7z.h" + +#include "lzmadec.h" + +bool decompress_lzma_7z(ISequentialInStream& in, unsigned in_size, ISequentialOutStream& out, unsigned out_size) throw () +{ + try + { + NCompress::NLZMA::CDecoder cc; + + UINT64 in_size_l = in_size; + UINT64 out_size_l = out_size; + + if (cc.ReadCoderProperties(&in) != S_OK) { return(false); } + if (cc.Code(&in, &out, &in_size_l, &out_size_l) != S_OK) { return(false); } + if (out.size_get() != out_size || out.overflow_get()) { return(false); } + + return(true); + } + catch (...) + { + return(false); + } +} + +bool decompress_lzma_7z(const unsigned char* in_data, unsigned int in_size, unsigned char* out_data, unsigned int out_size) throw () +{ + ISequentialInStream_Array in(reinterpret_cast(in_data), in_size); + ISequentialOutStream_Array out(reinterpret_cast(out_data), out_size); + + return(decompress_lzma_7z(in, in_size, out, out_size)); +} diff --git a/snesreader/libjma/aribitcd.h b/snesreader/libjma/aribitcd.h new file mode 100644 index 00000000..1fb421ba --- /dev/null +++ b/snesreader/libjma/aribitcd.h @@ -0,0 +1,73 @@ +#ifndef __COMPRESSION_BITCODER_H +#define __COMPRESSION_BITCODER_H + +#include "rngcoder.h" + +namespace NCompression { +namespace NArithmetic { + +const int kNumBitModelTotalBits = 11; +const UINT32 kBitModelTotal = (1 << kNumBitModelTotalBits); + +const int kNumMoveReducingBits = 2; + +///////////////////////////// +// CBitModel + +template +class CBitModel +{ +public: + UINT32 m_Probability; + void UpdateModel(UINT32 aSymbol) + { + /* + m_Probability -= (m_Probability + ((aSymbol - 1) & ((1 << aNumMoveBits) - 1))) >> aNumMoveBits; + m_Probability += (1 - aSymbol) << (kNumBitModelTotalBits - aNumMoveBits); + */ + if (aSymbol == 0) + m_Probability += (kBitModelTotal - m_Probability) >> aNumMoveBits; + else + m_Probability -= (m_Probability) >> aNumMoveBits; + } +public: + void Init() { m_Probability = kBitModelTotal / 2; } +}; + +template +class CBitDecoder: public CBitModel +{ +public: + UINT32 Decode(CRangeDecoder *aRangeDecoder) + { + UINT32 aNewBound = (aRangeDecoder->m_Range >> kNumBitModelTotalBits) * CBitModel::m_Probability; + if (aRangeDecoder->m_Code < aNewBound) + { + aRangeDecoder->m_Range = aNewBound; + CBitModel::m_Probability += (kBitModelTotal - CBitModel::m_Probability) >> aNumMoveBits; + if (aRangeDecoder->m_Range < kTopValue) + { + aRangeDecoder->m_Code = (aRangeDecoder->m_Code << 8) | aRangeDecoder->m_Stream.ReadByte(); + aRangeDecoder->m_Range <<= 8; + } + return 0; + } + else + { + aRangeDecoder->m_Range -= aNewBound; + aRangeDecoder->m_Code -= aNewBound; + CBitModel::m_Probability -= (CBitModel::m_Probability) >> aNumMoveBits; + if (aRangeDecoder->m_Range < kTopValue) + { + aRangeDecoder->m_Code = (aRangeDecoder->m_Code << 8) | aRangeDecoder->m_Stream.ReadByte(); + aRangeDecoder->m_Range <<= 8; + } + return 1; + } + } +}; + +}} + + +#endif diff --git a/snesreader/libjma/ariconst.h b/snesreader/libjma/ariconst.h new file mode 100644 index 00000000..751b2b7c --- /dev/null +++ b/snesreader/libjma/ariconst.h @@ -0,0 +1,29 @@ +/* +Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net ) +Copyright (C) 2001-4 Igor Pavlov ( http://www.7-zip.org ) + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License version 2.1 as published by the Free Software Foundation. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef __ARICONST_H +#define __ARICONST_H + +#include "aribitcd.h" + + +typedef NCompression::NArithmetic::CRangeDecoder CMyRangeDecoder; +template class CMyBitDecoder: + public NCompression::NArithmetic::CBitDecoder {}; + +#endif diff --git a/snesreader/libjma/ariprice.h b/snesreader/libjma/ariprice.h new file mode 100644 index 00000000..ccc398e1 --- /dev/null +++ b/snesreader/libjma/ariprice.h @@ -0,0 +1,12 @@ +#ifndef __COMPRESSION_ARIPRICE_H +#define __COMPRESSION_ARIPRICE_H + +namespace NCompression { +namespace NArithmetic { + +const UINT32 kNumBitPriceShiftBits = 6; +const UINT32 kBitPrice = 1 << kNumBitPriceShiftBits; + +}} + +#endif diff --git a/snesreader/libjma/btreecd.h b/snesreader/libjma/btreecd.h new file mode 100644 index 00000000..acce3664 --- /dev/null +++ b/snesreader/libjma/btreecd.h @@ -0,0 +1,126 @@ +/* +Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net ) +Copyright (C) 2001-4 Igor Pavlov ( http://www.7-zip.org ) + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License version 2.1 as published by the Free Software Foundation. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef __BITTREECODER_H +#define __BITTREECODER_H + +#include "aribitcd.h" +#include "rcdefs.h" + + +////////////////////////// +// CBitTreeDecoder + +template +class CBitTreeDecoder +{ + CMyBitDecoder m_Models[1 << m_NumBitLevels]; +public: + void Init() + { + for(UINT32 i = 1; i < (1 << m_NumBitLevels); i++) + m_Models[i].Init(); + } + UINT32 Decode(CMyRangeDecoder *aRangeDecoder) + { + UINT32 aModelIndex = 1; + RC_INIT_VAR + for(UINT32 aBitIndex = m_NumBitLevels; aBitIndex > 0; aBitIndex--) + { + // aModelIndex = (aModelIndex << 1) + m_Models[aModelIndex].Decode(aRangeDecoder); + RC_GETBIT(aNumMoveBits, m_Models[aModelIndex].m_Probability, aModelIndex) + } + RC_FLUSH_VAR + return aModelIndex - (1 << m_NumBitLevels); + }; +}; + +//////////////////////////////// +// CReverseBitTreeDecoder + +template +class CReverseBitTreeDecoder2 +{ + CMyBitDecoder *m_Models; + UINT32 m_NumBitLevels; +public: + CReverseBitTreeDecoder2(): m_Models(0) { } + ~CReverseBitTreeDecoder2() { delete []m_Models; } + bool Create(UINT32 aNumBitLevels) + { + m_NumBitLevels = aNumBitLevels; + m_Models = new CMyBitDecoder[1 << aNumBitLevels]; + return (m_Models != 0); + } + void Init() + { + UINT32 aNumModels = 1 << m_NumBitLevels; + for(UINT32 i = 1; i < aNumModels; i++) + m_Models[i].Init(); + } + UINT32 Decode(CMyRangeDecoder *aRangeDecoder) + { + UINT32 aModelIndex = 1; + UINT32 aSymbol = 0; + RC_INIT_VAR + for(UINT32 aBitIndex = 0; aBitIndex < m_NumBitLevels; aBitIndex++) + { + // UINT32 aBit = m_Models[aModelIndex].Decode(aRangeDecoder); + // aModelIndex <<= 1; + // aModelIndex += aBit; + // aSymbol |= (aBit << aBitIndex); + RC_GETBIT2(aNumMoveBits, m_Models[aModelIndex].m_Probability, aModelIndex, ; , aSymbol |= (1 << aBitIndex)) + } + RC_FLUSH_VAR + return aSymbol; + }; +}; +//////////////////////////// +// CReverseBitTreeDecoder2 + +template +class CReverseBitTreeDecoder +{ + CMyBitDecoder m_Models[1 << m_NumBitLevels]; +public: + void Init() + { + for(UINT32 i = 1; i < (1 << m_NumBitLevels); i++) + m_Models[i].Init(); + } + UINT32 Decode(CMyRangeDecoder *aRangeDecoder) + { + UINT32 aModelIndex = 1; + UINT32 aSymbol = 0; + RC_INIT_VAR + for(UINT32 aBitIndex = 0; aBitIndex < m_NumBitLevels; aBitIndex++) + { + // UINT32 aBit = m_Models[aModelIndex].Decode(aRangeDecoder); + // aModelIndex <<= 1; + // aModelIndex += aBit; + // aSymbol |= (aBit << aBitIndex); + RC_GETBIT2(aNumMoveBits, m_Models[aModelIndex].m_Probability, aModelIndex, ; , aSymbol |= (1 << aBitIndex)) + } + RC_FLUSH_VAR + return aSymbol; + } +}; + + + +#endif diff --git a/snesreader/libjma/crc32.h b/snesreader/libjma/crc32.h new file mode 100644 index 00000000..876a7d3d --- /dev/null +++ b/snesreader/libjma/crc32.h @@ -0,0 +1,26 @@ +/* +Copyright (C) 2004-2007 NSRT Team ( http://nsrt.edgeemu.com ) + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +version 2 as published by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#ifndef CRC32_H +#define CRC32_H + +namespace CRC32lib +{ + unsigned int CRC32(const unsigned char *, size_t, register unsigned int crc32 = 0xFFFFFFFF); +} + +#endif diff --git a/snesreader/libjma/iiostrm.cpp b/snesreader/libjma/iiostrm.cpp new file mode 100644 index 00000000..f2719969 --- /dev/null +++ b/snesreader/libjma/iiostrm.cpp @@ -0,0 +1,132 @@ +/* +Copyright (C) 2005-2007 NSRT Team ( http://nsrt.edgeemu.com ) +Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net ) +Copyright (C) 2001-4 Igor Pavlov ( http://www.7-zip.org ) + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License version 2.1 as published by the Free Software Foundation. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include "portable.h" +#include "iiostrm.h" +#include "crc32.h" + +HRESULT ISequentialInStream_Array::Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize) +{ + if (aSize > size) + { + aSize = size; + } + + *aProcessedSize = aSize; + memcpy(aData, data, aSize); + size -= aSize; + data += aSize; + return(S_OK); +} + +HRESULT ISequentialOutStream_Array::Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize) +{ + if (aSize > size) + { + overflow = true; + aSize = size; + } + + *aProcessedSize = aSize; + memcpy(data, aData, aSize); + size -= aSize; + data += aSize; + total += aSize; + return(S_OK); +} + +HRESULT ISequentialInStream_String::Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize) +{ + if (aSize > data.size()) + { + aSize = data.size(); + } + + *aProcessedSize = aSize; + memcpy(aData, data.c_str(), aSize); + data.erase(0, aSize); + return(S_OK); +} + +HRESULT ISequentialOutStream_String::Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize) +{ + *aProcessedSize = aSize; + data.append((const char *)aData, aSize); + total += aSize; + return(S_OK); +} + +HRESULT ISequentialInStream_Istream::Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize) +{ + data.read((char *)aData, aSize); + *aProcessedSize = data.gcount(); + return(S_OK); +} + +HRESULT ISequentialOutStream_Ostream::Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize) +{ + *aProcessedSize = aSize; + data.write((char *)aData, aSize); + total += aSize; + return(S_OK); +} + + + +HRESULT ISequentialInStreamCRC32_Array::Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize) +{ + ISequentialInStream_Array::Read(aData, aSize, aProcessedSize); + crc32 = CRC32lib::CRC32((const unsigned char *)aData, *aProcessedSize, ~crc32); + return(S_OK); +} + +HRESULT ISequentialOutStreamCRC32_Array::Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize) +{ + ISequentialOutStream_Array::Write(aData, aSize, aProcessedSize); + crc32 = CRC32lib::CRC32((const unsigned char *)aData, *aProcessedSize, ~crc32); + return(S_OK); +} + +HRESULT ISequentialInStreamCRC32_String::Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize) +{ + ISequentialInStream_String::Read(aData, aSize, aProcessedSize); + crc32 = CRC32lib::CRC32((const unsigned char *)aData, *aProcessedSize, ~crc32); + return(S_OK); +} + +HRESULT ISequentialOutStreamCRC32_String::Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize) +{ + ISequentialOutStream_String::Write(aData, aSize, aProcessedSize); + crc32 = CRC32lib::CRC32((const unsigned char *)aData, *aProcessedSize, ~crc32); + return(S_OK); +} + +HRESULT ISequentialInStreamCRC32_Istream::Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize) +{ + ISequentialInStream_Istream::Read(aData, aSize, aProcessedSize); + crc32 = CRC32lib::CRC32((const unsigned char *)aData, *aProcessedSize, ~crc32); + return(S_OK); +} + +HRESULT ISequentialOutStreamCRC32_Ostream::Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize) +{ + ISequentialOutStream_Ostream::Write(aData, aSize, aProcessedSize); + crc32 = CRC32lib::CRC32((const unsigned char *)aData, *aProcessedSize, ~crc32); + return(S_OK); +} diff --git a/snesreader/libjma/iiostrm.h b/snesreader/libjma/iiostrm.h new file mode 100644 index 00000000..a5b2ab20 --- /dev/null +++ b/snesreader/libjma/iiostrm.h @@ -0,0 +1,210 @@ +/* +Copyright (C) 2005-2007 NSRT Team ( http://nsrt.edgeemu.com ) +Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net ) +Copyright (C) 2001-4 Igor Pavlov ( http://www.7-zip.org ) + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License version 2.1 as published by the Free Software Foundation. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef __IINOUTSTREAMS_H +#define __IINOUTSTREAMS_H + +#include +#include + +#include "portable.h" + + +class ISequentialInStream +{ +public: + virtual HRESULT Read(void *, UINT32, UINT32 *) = 0; + + virtual ~ISequentialInStream() {} +}; + + +class ISequentialInStream_Array : public ISequentialInStream +{ + const char *data; + unsigned int size; +public: + ISequentialInStream_Array(const char *Adata, unsigned Asize) : data(Adata), size(Asize) { } + + HRESULT Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize); + + virtual ~ISequentialInStream_Array() {} +}; + +class ISequentialInStream_String : public ISequentialInStream +{ + std::string& data; +public: + ISequentialInStream_String(std::string& Adata) : data(Adata) { } + + HRESULT Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize); + + virtual ~ISequentialInStream_String() {} +}; + +class ISequentialInStream_Istream : public ISequentialInStream +{ + std::istream& data; +public: + ISequentialInStream_Istream(std::istream& Adata) : data(Adata) { } + + HRESULT Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize); + + virtual ~ISequentialInStream_Istream() {} +}; + + + +class ISequentialOutStream +{ +public: + virtual bool overflow_get() const = 0; + virtual unsigned int size_get() const = 0; + + virtual HRESULT Write(const void *, UINT32, UINT32 *) = 0; + + virtual ~ISequentialOutStream() {} +}; + + +class ISequentialOutStream_Array : public ISequentialOutStream +{ + char *data; + unsigned int size; + bool overflow; + unsigned int total; +public: + ISequentialOutStream_Array(char *Adata, unsigned Asize) : data(Adata), size(Asize), overflow(false), total(0) { } + + bool overflow_get() const { return(overflow); } + unsigned int size_get() const { return(total); } + + HRESULT Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize); + + virtual ~ISequentialOutStream_Array() {} +}; + +class ISequentialOutStream_String : public ISequentialOutStream +{ + std::string& data; + unsigned int total; +public: + ISequentialOutStream_String(std::string& Adata) : data(Adata), total(0) { } + + bool overflow_get() const { return(false); } + unsigned int size_get() const { return(total); } + + HRESULT Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize); + + virtual ~ISequentialOutStream_String() {} +}; + + +class ISequentialOutStream_Ostream : public ISequentialOutStream +{ + std::ostream& data; + unsigned int total; +public: + ISequentialOutStream_Ostream(std::ostream& Adata) : data(Adata), total(0) { } + + bool overflow_get() const { return(false); } + unsigned int size_get() const { return(total); } + + HRESULT Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize); + + virtual ~ISequentialOutStream_Ostream() {} +}; + + + +class ISequentialStreamCRC32 +{ +protected: + unsigned int crc32; +public: + ISequentialStreamCRC32() : crc32(0) {} + unsigned int crc32_get() const { return(crc32); } + + virtual ~ISequentialStreamCRC32() {} +}; + + +class ISequentialInStreamCRC32_Array : public ISequentialInStream_Array, public ISequentialStreamCRC32 +{ +public: + ISequentialInStreamCRC32_Array(const char *Adata, unsigned Asize) : ISequentialInStream_Array(Adata, Asize) { } + + HRESULT Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize); + + virtual ~ISequentialInStreamCRC32_Array() {} +}; + +class ISequentialInStreamCRC32_String : public ISequentialInStream_String, public ISequentialStreamCRC32 +{ +public: + ISequentialInStreamCRC32_String(std::string& Adata) : ISequentialInStream_String(Adata) { } + + HRESULT Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize); + + virtual ~ISequentialInStreamCRC32_String() {} +}; + +class ISequentialInStreamCRC32_Istream : public ISequentialInStream_Istream, public ISequentialStreamCRC32 +{ +public: + ISequentialInStreamCRC32_Istream(std::istream& Adata) : ISequentialInStream_Istream(Adata) { } + + HRESULT Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize); + + virtual ~ISequentialInStreamCRC32_Istream() {} +}; + + +class ISequentialOutStreamCRC32_Array : public ISequentialOutStream_Array, public ISequentialStreamCRC32 +{ +public: + ISequentialOutStreamCRC32_Array(char *Adata, unsigned Asize) : ISequentialOutStream_Array(Adata, Asize) { } + + HRESULT Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize); + + virtual ~ISequentialOutStreamCRC32_Array() {} +}; + +class ISequentialOutStreamCRC32_String : public ISequentialOutStream_String, public ISequentialStreamCRC32 +{ +public: + ISequentialOutStreamCRC32_String(std::string& Adata) : ISequentialOutStream_String(Adata) { } + + HRESULT Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize); + + virtual ~ISequentialOutStreamCRC32_String() {} +}; + + +class ISequentialOutStreamCRC32_Ostream : public ISequentialOutStream_Ostream, public ISequentialStreamCRC32 +{ +public: + ISequentialOutStreamCRC32_Ostream(std::ostream& Adata) : ISequentialOutStream_Ostream(Adata) { } + + HRESULT Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize); + + virtual ~ISequentialOutStreamCRC32_Ostream() {} +}; + +#endif diff --git a/snesreader/libjma/inbyte.cpp b/snesreader/libjma/inbyte.cpp new file mode 100644 index 00000000..c727a4b2 --- /dev/null +++ b/snesreader/libjma/inbyte.cpp @@ -0,0 +1,60 @@ +/* +Copyright (C) 2005-2007 NSRT Team ( http://nsrt.edgeemu.com ) +Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net ) +Copyright (C) 2001-4 Igor Pavlov ( http://www.7-zip.org ) + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License version 2.1 as published by the Free Software Foundation. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include "inbyte.h" + +namespace NStream{ + +CInByte::CInByte(UINT32 aBufferSize): + m_BufferBase(0), + m_BufferSize(aBufferSize) +{ + m_BufferBase = new BYTE[m_BufferSize]; +} + +CInByte::~CInByte() +{ + delete []m_BufferBase; +} + +void CInByte::Init(ISequentialInStream *aStream) +{ + m_Stream = aStream; + m_ProcessedSize = 0; + m_Buffer = m_BufferBase; + m_BufferLimit = m_Buffer; + m_StreamWasExhausted = false; +} + +bool CInByte::ReadBlock() +{ + if (m_StreamWasExhausted) + return false; + m_ProcessedSize += (m_Buffer - m_BufferBase); + UINT32 aNumProcessedBytes; + HRESULT aResult = m_Stream->Read(m_BufferBase, m_BufferSize, &aNumProcessedBytes); + if (aResult != S_OK) + throw aResult; + m_Buffer = m_BufferBase; + m_BufferLimit = m_Buffer + aNumProcessedBytes; + m_StreamWasExhausted = (aNumProcessedBytes == 0); + return (!m_StreamWasExhausted); +} + +} diff --git a/snesreader/libjma/inbyte.h b/snesreader/libjma/inbyte.h new file mode 100644 index 00000000..53afa171 --- /dev/null +++ b/snesreader/libjma/inbyte.h @@ -0,0 +1,76 @@ +/* +Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net ) +Copyright (C) 2001-4 Igor Pavlov ( http://www.7-zip.org ) + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License version 2.1 as published by the Free Software Foundation. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef __STREAM_INBYTE_H +#define __STREAM_INBYTE_H + +#include "iiostrm.h" + +namespace NStream { + +class CInByte +{ + UINT64 m_ProcessedSize; + BYTE *m_BufferBase; + UINT32 m_BufferSize; + BYTE *m_Buffer; + BYTE *m_BufferLimit; + ISequentialInStream* m_Stream; + bool m_StreamWasExhausted; + + bool ReadBlock(); + +public: + CInByte(UINT32 aBufferSize = 0x100000); + ~CInByte(); + + void Init(ISequentialInStream *aStream); + + bool ReadByte(BYTE &aByte) + { + if(m_Buffer >= m_BufferLimit) + if(!ReadBlock()) + return false; + aByte = *m_Buffer++; + return true; + } + BYTE ReadByte() + { + if(m_Buffer >= m_BufferLimit) + if(!ReadBlock()) + return 0x0; + return *m_Buffer++; + } + void ReadBytes(void *aData, UINT32 aSize, UINT32 &aProcessedSize) + { + for(aProcessedSize = 0; aProcessedSize < aSize; aProcessedSize++) + if (!ReadByte(((BYTE *)aData)[aProcessedSize])) + return; + } + bool ReadBytes(void *aData, UINT32 aSize) + { + UINT32 aProcessedSize; + ReadBytes(aData, aSize, aProcessedSize); + return (aProcessedSize == aSize); + } + UINT64 GetProcessedSize() const { return m_ProcessedSize + (m_Buffer - m_BufferBase); } +}; + +} + +#endif diff --git a/snesreader/libjma/jcrc32.cpp b/snesreader/libjma/jcrc32.cpp new file mode 100644 index 00000000..e3377d58 --- /dev/null +++ b/snesreader/libjma/jcrc32.cpp @@ -0,0 +1,80 @@ +/* +Copyright (C) 2004-2007 NSRT Team ( http://nsrt.edgeemu.com ) + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +version 2 as published by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include + +namespace CRC32lib +{ + //Don't ask questions, this is the PKZip CRC32 table + const unsigned int crc32Table[256] = { + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, + 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, + 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, + 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, + 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, + 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, + 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, + 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, + 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, + 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, + 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, + 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, + 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, + 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, + 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, + 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, + 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, + 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, + 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, + 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, + 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, + 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, + 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, + 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, + 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, + 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, + 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, + 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, + 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, + 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, + 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, + 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, + 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, + 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, + 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d }; + + + //CRC32 for char arrays + unsigned int CRC32(const unsigned char *array, size_t size, register unsigned int crc32) + { + const unsigned char *end_p = array+size; + for (register const unsigned char *p = array; p < end_p; p++) + { + crc32 = ((crc32 >> 8) & 0x00FFFFFF) ^ crc32Table[(crc32 ^ *p) & 0xFF]; + } + + return(~crc32); + } +} diff --git a/snesreader/libjma/jma.cpp b/snesreader/libjma/jma.cpp new file mode 100644 index 00000000..87e03228 --- /dev/null +++ b/snesreader/libjma/jma.cpp @@ -0,0 +1,550 @@ +/* +Copyright (C) 2005-2007 NSRT Team ( http://nsrt.edgeemu.com ) + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +version 2 as published by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include +#include "jma.h" +using namespace std; + +#include "portable.h" +#include "7z.h" +#include "crc32.h" + +namespace JMA +{ + const char jma_magic[] = { 'J', 'M', 'A', 0, 'N' }; + const unsigned int jma_header_length = 5; + const unsigned char jma_version = 1; + const unsigned int jma_version_length = 1; + const unsigned int jma_total_header_length = jma_header_length + jma_version_length + UINT_SIZE; + + //Convert DOS/zip/JMA integer time to to time_t + time_t uint_to_time(unsigned short date, unsigned short time) + { + tm formatted_time; + + formatted_time.tm_mday = date & 0x1F; + formatted_time.tm_mon = ((date >> 5) & 0xF) - 1; + formatted_time.tm_year = ((date >> 9) & 0x7f) + 80; + formatted_time.tm_sec = (time & 0x1F) * 2; + formatted_time.tm_min = (time >> 5) & 0x3F; + formatted_time.tm_hour = (time >> 11) & 0x1F; + + return(mktime(&formatted_time)); + } + + + //Retreive the file block, what else? + void jma_open::retrieve_file_block() throw(jma_errors) + { + unsigned char uint_buffer[UINT_SIZE]; + unsigned char ushort_buffer[USHORT_SIZE]; + + //File block size is the last UINT in the file + stream.seekg(-UINT_SIZE,ios::end); + stream.read((char *)uint_buffer, UINT_SIZE); + size_t file_block_size = charp_to_uint(uint_buffer); + + //Currently at the end of the file, so that's the file size + size_t jma_file_size = stream.tellg(); + + //The file block can't be larger than the JMA file without it's header. + //This if can probably be improved + if (file_block_size >= jma_file_size-jma_total_header_length) + { + throw(JMA_BAD_FILE); + } + + //Seek to before file block so we can read the file block + stream.seekg(-((int)file_block_size+UINT_SIZE),ios::end); + + //This is needed if the file block is compressed + stringstream decompressed_file_block; + //Pointer to where to read file block from (file or decompressed buffer) + istream *file_block_stream; + + //Setup file info buffer and byte to read with + jma_file_info file_info; + char byte; + + stream.get(byte); + if (!byte) //If file block is compressed + { + //Compressed size isn't counting the byte we just read or the UINT for compressed size + size_t compressed_size = file_block_size - (1+UINT_SIZE); + + //Read decompressed size / true file block size + stream.read((char *)uint_buffer, UINT_SIZE); + file_block_size = charp_to_uint(uint_buffer); + + //Setup access methods for decompression + ISequentialInStream_Istream compressed_data(stream); + ISequentialOutStream_Ostream decompressed_data(decompressed_file_block); + + //Decompress the data + if (!decompress_lzma_7z(compressed_data, compressed_size, decompressed_data, file_block_size)) + { + throw(JMA_DECOMPRESS_FAILED); + } + + //Go to beginning, setup pointer to buffer + decompressed_file_block.seekg(0, ios::beg); + file_block_stream = &decompressed_file_block; + } + else + { + stream.putback(byte); //Putback byte, byte is part of filename, not compressed indicator + file_block_stream = &stream; + } + + + //Minimum file name length is 2 bytes, a char and a null + //Minimum comment length is 1 byte, a null + //There are currently 2 UINTs and 2 USHORTs per file + while (file_block_size >= 2+1+UINT_SIZE*2+USHORT_SIZE*2) //This does allow for a gap, but that's okay + { + //First stored in the file block is the file name null terminated + file_info.name = ""; + + file_block_stream->get(byte); + while (byte) + { + file_info.name += byte; + file_block_stream->get(byte); + } + + //There must be a file name or the file is bad + if (!file_info.name.length()) + { + throw(JMA_BAD_FILE); + } + + //Same trick as above for the comment + file_info.comment = ""; + + file_block_stream->get(byte); + while (byte) + { + file_info.comment += byte; + file_block_stream->get(byte); + } + + //Next is a UINT representing the file's size + file_block_stream->read((char *)uint_buffer, UINT_SIZE); + file_info.size = charp_to_uint(uint_buffer); + + //Followed by CRC32 + file_block_stream->read((char *)uint_buffer, UINT_SIZE); + file_info.crc32 = charp_to_uint(uint_buffer); + + //Special USHORT representation of file's date + file_block_stream->read((char *)ushort_buffer, USHORT_SIZE); + file_info.date = charp_to_ushort(ushort_buffer); + + //Special USHORT representation of file's time + file_block_stream->read((char *)ushort_buffer, USHORT_SIZE); + file_info.time = charp_to_ushort(ushort_buffer); + + file_info.buffer = 0; //Pointing to null till we decompress files + + files.push_back(file_info); //Put file info into our structure + + //Subtract size of the file info we just read + file_block_size -= file_info.name.length()+file_info.comment.length()+2+UINT_SIZE*2+USHORT_SIZE*2; + } + } + + //Constructor for opening JMA files for reading + jma_open::jma_open(const char *compressed_file_name) throw (jma_errors) + { + decompressed_buffer = 0; + compressed_buffer = 0; + + stream.open(compressed_file_name, ios::in | ios::binary); + if (!stream.is_open()) + { + throw(JMA_NO_OPEN); + } + + //Header is "JMA\0N" + unsigned char header[jma_header_length]; + stream.read((char *)header, jma_header_length); + if (memcmp(jma_magic, header, jma_header_length)) + { + throw(JMA_BAD_FILE); + } + + //Not the cleanest code but logical + stream.read((char *)header, 5); + if (*header <= jma_version) + { + chunk_size = charp_to_uint(header+1); //Chunk size is a UINT that follows version # + retrieve_file_block(); + } + else + { + throw(JMA_UNSUPPORTED_VERSION); + } + } + + //Destructor only has to close the stream if neccesary + jma_open::~jma_open() + { + if (stream.is_open()) + { + stream.close(); + } + } + + //Return a vector containing useful info about the files in the JMA + vector jma_open::get_files_info() + { + vector file_info_vector; + jma_public_file_info file_info; + + for (vector::iterator i = files.begin(); i != files.end(); i++) + { + file_info.name = i->name; + file_info.comment = i->comment; + file_info.size = i->size; + file_info.datetime = uint_to_time(i->date, i->time); + file_info.crc32 = i->crc32; + file_info_vector.push_back(file_info); + } + + return(file_info_vector); + } + + //Skip forward a given number of chunks + void jma_open::chunk_seek(unsigned int chunk_num) throw(jma_errors) + { + //Check the stream is open + if (!stream.is_open()) + { + throw(JMA_NO_OPEN); + } + + //Clear possible errors so the seek will work + stream.clear(); + + //Move forward over header + stream.seekg(jma_total_header_length, ios::beg); + + unsigned char int4_buffer[UINT_SIZE]; + + while (chunk_num--) + { + //Read in size of chunk + stream.read((char *)int4_buffer, UINT_SIZE); + + //Skip chunk plus it's CRC32 + stream.seekg(charp_to_uint(int4_buffer)+UINT_SIZE, ios::cur); + } + } + + //Return a vector of pointers to each file in the JMA, the buffer to hold all the files + //must be initilized outside. + vector jma_open::get_all_files(unsigned char *buffer) throw(jma_errors) + { + //If there's no stream we can't read from it, so exit + if (!stream.is_open()) + { + throw(JMA_NO_OPEN); + } + + //Seek to the first chunk + chunk_seek(0); + + //Set the buffer that decompressed data goes to + decompressed_buffer = buffer; + + //If the JMA is not solid + if (chunk_size) + { + unsigned char int4_buffer[UINT_SIZE]; + size_t size = get_total_size(files); + + //For each chunk in the file... + for (size_t remaining_size = size; remaining_size; remaining_size -= chunk_size) + { + //Read the compressed size + stream.read((char *)int4_buffer, UINT_SIZE); + size_t compressed_size = charp_to_uint(int4_buffer); + + //Allocate memory of the correct size to hold the compressed data in the JMA + //Throw error on failure as that is unrecoverable from + try + { + compressed_buffer = new unsigned char[compressed_size]; + } + catch (bad_alloc xa) + { + throw(JMA_NO_MEM_ALLOC); + } + + //Read all the compressed data in + stream.read((char *)compressed_buffer, compressed_size); + + //Read the expected CRC of compressed data from the file + stream.read((char *)int4_buffer, UINT_SIZE); + + //If it doesn't match, throw error and cleanup memory + if (CRC32lib::CRC32(compressed_buffer, compressed_size) != charp_to_uint(int4_buffer)) + { + delete[] compressed_buffer; + throw(JMA_BAD_FILE); + } + + //Decompress the data, cleanup memory on failure + if (!decompress_lzma_7z(compressed_buffer, compressed_size, + decompressed_buffer+size-remaining_size, + (remaining_size > chunk_size) ? chunk_size : remaining_size)) + { + delete[] compressed_buffer; + throw(JMA_DECOMPRESS_FAILED); + } + delete[] compressed_buffer; + + if (remaining_size <= chunk_size) //If we just decompressed the remainder + { + break; + } + } + } + else //Solidly compressed JMA + { + unsigned char int4_buffer[UINT_SIZE]; + + //Read the size of the compressed data + stream.read((char *)int4_buffer, UINT_SIZE); + size_t compressed_size = charp_to_uint(int4_buffer); + + //Get decompressed size + size_t size = get_total_size(files); + + //Setup access methods for decompression + ISequentialInStream_Istream compressed_data(stream); + ISequentialOutStream_Array decompressed_data(reinterpret_cast(decompressed_buffer), size); + + //Decompress the data + if (!decompress_lzma_7z(compressed_data, compressed_size, decompressed_data, size)) + { + throw(JMA_DECOMPRESS_FAILED); + } + + /* + //Allocate memory of the right size to hold the compressed data in the JMA + try + { + compressed_buffer = new unsigned char[compressed_size]; + } + catch (bad_alloc xa) + { + throw(JMA_NO_MEM_ALLOC); + } + + //Copy the compressed data into memory + stream.read((char *)compressed_buffer, compressed_size); + size_t size = get_total_size(files); + + //Read the CRC of the compressed data + stream.read((char *)int4_buffer, UINT_SIZE); + + //If it doesn't match, complain + if (CRC32lib::CRC32(compressed_buffer, compressed_size) != charp_to_uint(int4_buffer)) + { + delete[] compressed_buffer; + throw(JMA_BAD_FILE); + } + + //Decompress the data + if (!decompress_lzma_7z(compressed_buffer, compressed_size, decompressed_buffer, size)) + { + delete[] compressed_buffer; + throw(JMA_DECOMPRESS_FAILED); + } + delete[] compressed_buffer; + */ + } + + vector file_pointers; + size_t size = 0; + + //For each file, add it's pointer to the vector, size is pointer offset in the buffer + for (vector::iterator i = files.begin(); i != files.end(); i++) + { + i->buffer = decompressed_buffer+size; + file_pointers.push_back(decompressed_buffer+size); + size += i->size; + } + + //Return the vector of pointers + return(file_pointers); + } + + //Extracts the file with a given name found in the archive to the given buffer + void jma_open::extract_file(string& name, unsigned char *buffer) throw(jma_errors) + { + if (!stream.is_open()) + { + throw(JMA_NO_OPEN); + } + + size_t size_to_skip = 0; + size_t our_file_size = 0; + + //Search through the vector of file information + for (vector::iterator i = files.begin(); i != files.end(); i++) + { + if (i->name == name) + { + //Set the variable so we can tell we found it + our_file_size = i->size; + break; + } + + //Keep a running total of size + size_to_skip += i->size; + } + + if (!our_file_size) //File with the specified name was not found in the archive + { + throw(JMA_FILE_NOT_FOUND); + } + + //If the JMA only contains one file, we can skip a lot of overhead + if (files.size() == 1) + { + get_all_files(buffer); + return; + } + + if (chunk_size) //we are using non-solid archive.. + { + unsigned int chunks_to_skip = size_to_skip / chunk_size; + + //skip over requisite number of chunks + chunk_seek(chunks_to_skip); + + //Allocate memory for compressed and decompressed data + unsigned char *comp_buffer = 0, *decomp_buffer = 0; + try + { + //Compressed data size is <= non compressed size + unsigned char *combined_buffer = new unsigned char[chunk_size*2]; + comp_buffer = combined_buffer; + decomp_buffer = combined_buffer+chunk_size; + } + catch (bad_alloc xa) + { + throw(JMA_NO_MEM_ALLOC); + } + + size_t first_chunk_offset = size_to_skip % chunk_size; + unsigned char int4_buffer[UINT_SIZE]; + for (size_t i = 0; i < our_file_size;) + { + //Get size + stream.read((char *)int4_buffer, UINT_SIZE); + size_t compressed_size = charp_to_uint(int4_buffer); + + //Read all the compressed data in + stream.read((char *)comp_buffer, compressed_size); + + //Read the CRC of the compressed data + stream.read((char *)int4_buffer, UINT_SIZE); + + //If it doesn't match, complain + if (CRC32lib::CRC32(comp_buffer, compressed_size) != charp_to_uint(int4_buffer)) + { + delete[] comp_buffer; + throw(JMA_BAD_FILE); + } + + //Decompress chunk + if (!decompress_lzma_7z(comp_buffer, compressed_size, decomp_buffer, chunk_size)) + { + delete[] comp_buffer; + throw(JMA_DECOMPRESS_FAILED); + } + + size_t copy_amount = our_file_size-i > chunk_size-first_chunk_offset ? chunk_size-first_chunk_offset : our_file_size-i; + + memcpy(buffer+i, decomp_buffer+first_chunk_offset, copy_amount); + first_chunk_offset = 0; //Set to zero since this is only for the first iteration + i += copy_amount; + } + delete[] comp_buffer; + } + else //Solid JMA + { + unsigned char *decomp_buffer = 0; + try + { + decomp_buffer = new unsigned char[get_total_size(files)]; + } + catch (bad_alloc xa) + { + throw(JMA_NO_MEM_ALLOC); + } + + get_all_files(decomp_buffer); + + memcpy(buffer, decomp_buffer+size_to_skip, our_file_size); + + delete[] decomp_buffer; + } + } + + bool jma_open::is_solid() + { + return(chunk_size ? false : true); + } + + const char *jma_error_text(jma_errors error) + { + switch (error) + { + case JMA_NO_CREATE: + return("JMA could not be created"); + + case JMA_NO_MEM_ALLOC: + return("Memory for JMA could be allocated"); + + case JMA_NO_OPEN: + return("JMA could not be opened"); + + case JMA_BAD_FILE: + return("Invalid/Corrupt JMA"); + + case JMA_UNSUPPORTED_VERSION: + return("JMA version not supported"); + + case JMA_COMPRESS_FAILED: + return("JMA compression failed"); + + case JMA_DECOMPRESS_FAILED: + return("JMA decompression failed"); + + case JMA_FILE_NOT_FOUND: + return("File not found in JMA"); + } + return("Unknown error"); + } + +} + + diff --git a/snesreader/libjma/jma.h b/snesreader/libjma/jma.h new file mode 100644 index 00000000..2aaa5ca1 --- /dev/null +++ b/snesreader/libjma/jma.h @@ -0,0 +1,88 @@ +/* +Copyright (C) 2005-2007 NSRT Team ( http://nsrt.edgeemu.com ) + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +version 2 as published by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#ifndef JMA_H +#define JMA_H + +#include +#include +#include +#include + +namespace JMA +{ + enum jma_errors { JMA_NO_CREATE, JMA_NO_MEM_ALLOC, JMA_NO_OPEN, JMA_BAD_FILE, + JMA_UNSUPPORTED_VERSION, JMA_COMPRESS_FAILED, JMA_DECOMPRESS_FAILED, + JMA_FILE_NOT_FOUND }; + + struct jma_file_info_base + { + std::string name; + std::string comment; + size_t size; + unsigned int crc32; + }; + + struct jma_public_file_info : jma_file_info_base + { + time_t datetime; + }; + + struct jma_file_info : jma_file_info_base + { + unsigned short date; + unsigned short time; + const unsigned char *buffer; + }; + + template + inline size_t get_total_size(std::vector& files) + { + size_t size = 0; + for (typename std::vector::iterator i = files.begin(); i != files.end(); i++) + { + size += i->size; //We do have a problem if this wraps around + } + + return(size); + } + + class jma_open + { + public: + jma_open(const char *) throw(jma_errors); + ~jma_open(); + + std::vector get_files_info(); + std::vector get_all_files(unsigned char *) throw(jma_errors); + void extract_file(std::string& name, unsigned char *) throw(jma_errors); + bool is_solid(); + + private: + std::ifstream stream; + std::vector files; + size_t chunk_size; + unsigned char *decompressed_buffer; + unsigned char *compressed_buffer; + + void chunk_seek(unsigned int) throw(jma_errors); + void retrieve_file_block() throw(jma_errors); + }; + + const char *jma_error_text(jma_errors); +} +#endif diff --git a/snesreader/libjma/lencoder.h b/snesreader/libjma/lencoder.h new file mode 100644 index 00000000..6f30e478 --- /dev/null +++ b/snesreader/libjma/lencoder.h @@ -0,0 +1,93 @@ +/* +Copyright (C) 2005-2007 NSRT Team ( http://nsrt.edgeemu.com ) +Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net ) +Copyright (C) 2001-4 Igor Pavlov ( http://www.7-zip.org ) + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License version 2.1 as published by the Free Software Foundation. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef __LENCODER_H +#define __LENCODER_H + +#include "btreecd.h" + +namespace NLength { + +const UINT32 kNumPosStatesBitsMax = 4; +const int kNumPosStatesMax = (1 << kNumPosStatesBitsMax); + + +const int kNumPosStatesBitsEncodingMax = 4; +const int kNumPosStatesEncodingMax = (1 << kNumPosStatesBitsEncodingMax); + + +const int kNumMoveBits = 5; + +const int kNumLenBits = 3; +const int kNumLowSymbols = 1 << kNumLenBits; +const int kNumMidBits = 3; +const int kNumMidSymbols = 1 << kNumMidBits; + +const int kNumHighBits = 8; + +const int kNumSymbolsTotal = kNumLowSymbols + kNumMidSymbols + (1 << kNumHighBits); + +const int kNumSpecSymbols = kNumLowSymbols + kNumMidSymbols; + +class CDecoder +{ + CMyBitDecoder m_Choice; + CBitTreeDecoder m_LowCoder[kNumPosStatesMax]; + CMyBitDecoder m_Choice2; + CBitTreeDecoder m_MidCoder[kNumPosStatesMax]; + CBitTreeDecoder m_HighCoder; + UINT32 m_NumPosStates; +public: + void Create(UINT32 aNumPosStates) + { m_NumPosStates = aNumPosStates; } + void Init() + { + m_Choice.Init(); + for (UINT32 aPosState = 0; aPosState < m_NumPosStates; aPosState++) + { + m_LowCoder[aPosState].Init(); + m_MidCoder[aPosState].Init(); + } + m_Choice2.Init(); + m_HighCoder.Init(); + } + UINT32 Decode(CMyRangeDecoder *aRangeDecoder, UINT32 aPosState) + { + if(m_Choice.Decode(aRangeDecoder) == 0) + return m_LowCoder[aPosState].Decode(aRangeDecoder); + else + { + UINT32 aSymbol = kNumLowSymbols; + if(m_Choice2.Decode(aRangeDecoder) == 0) + aSymbol += m_MidCoder[aPosState].Decode(aRangeDecoder); + else + { + aSymbol += kNumMidSymbols; + aSymbol += m_HighCoder.Decode(aRangeDecoder); + } + return aSymbol; + } + } + +}; + +} + + +#endif diff --git a/snesreader/libjma/litcoder.h b/snesreader/libjma/litcoder.h new file mode 100644 index 00000000..639d6c55 --- /dev/null +++ b/snesreader/libjma/litcoder.h @@ -0,0 +1,122 @@ +/* +Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net ) +Copyright (C) 2001-4 Igor Pavlov ( http://www.7-zip.org ) + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License version 2.1 as published by the Free Software Foundation. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef __LITERALCODER_H +#define __LITERALCODER_H + +#include "aribitcd.h" +#include "rcdefs.h" + +namespace NLiteral { + +const int kNumMoveBits = 5; + +class CDecoder2 +{ + CMyBitDecoder m_Decoders[3][1 << 8]; +public: + void Init() + { + for (int i = 0; i < 3; i++) + for (int j = 1; j < (1 << 8); j++) + m_Decoders[i][j].Init(); + } + + BYTE DecodeNormal(CMyRangeDecoder *aRangeDecoder) + { + UINT32 aSymbol = 1; + RC_INIT_VAR + do + { + // aSymbol = (aSymbol << 1) | m_Decoders[0][aSymbol].Decode(aRangeDecoder); + RC_GETBIT(kNumMoveBits, m_Decoders[0][aSymbol].m_Probability, aSymbol) + } + while (aSymbol < 0x100); + RC_FLUSH_VAR + return aSymbol; + } + + BYTE DecodeWithMatchByte(CMyRangeDecoder *aRangeDecoder, BYTE aMatchByte) + { + UINT32 aSymbol = 1; + RC_INIT_VAR + do + { + UINT32 aMatchBit = (aMatchByte >> 7) & 1; + aMatchByte <<= 1; + // UINT32 aBit = m_Decoders[1 + aMatchBit][aSymbol].Decode(aRangeDecoder); + // aSymbol = (aSymbol << 1) | aBit; + UINT32 aBit; + RC_GETBIT2(kNumMoveBits, m_Decoders[1 + aMatchBit][aSymbol].m_Probability, aSymbol, + aBit = 0, aBit = 1) + if (aMatchBit != aBit) + { + while (aSymbol < 0x100) + { + // aSymbol = (aSymbol << 1) | m_Decoders[0][aSymbol].Decode(aRangeDecoder); + RC_GETBIT(kNumMoveBits, m_Decoders[0][aSymbol].m_Probability, aSymbol) + } + break; + } + } + while (aSymbol < 0x100); + RC_FLUSH_VAR + return aSymbol; + } +}; + +class CDecoder +{ + CDecoder2 *m_Coders; + UINT32 m_NumPrevBits; + UINT32 m_NumPosBits; + UINT32 m_PosMask; +public: + CDecoder(): m_Coders(0) {} + ~CDecoder() { Free(); } + void Free() + { + delete []m_Coders; + m_Coders = 0; + } + void Create(UINT32 aNumPosBits, UINT32 aNumPrevBits) + { + Free(); + m_NumPosBits = aNumPosBits; + m_PosMask = (1 << aNumPosBits) - 1; + m_NumPrevBits = aNumPrevBits; + UINT32 aNumStates = 1 << (m_NumPrevBits + m_NumPosBits); + m_Coders = new CDecoder2[aNumStates]; + } + void Init() + { + UINT32 aNumStates = 1 << (m_NumPrevBits + m_NumPosBits); + for (UINT32 i = 0; i < aNumStates; i++) + m_Coders[i].Init(); + } + UINT32 GetState(UINT32 aPos, BYTE aPrevByte) const + { return ((aPos & m_PosMask) << m_NumPrevBits) + (aPrevByte >> (8 - m_NumPrevBits)); } + BYTE DecodeNormal(CMyRangeDecoder *aRangeDecoder, UINT32 aPos, BYTE aPrevByte) + { return m_Coders[GetState(aPos, aPrevByte)].DecodeNormal(aRangeDecoder); } + BYTE DecodeWithMatchByte(CMyRangeDecoder *aRangeDecoder, UINT32 aPos, BYTE aPrevByte, BYTE aMatchByte) + { return m_Coders[GetState(aPos, aPrevByte)].DecodeWithMatchByte(aRangeDecoder, aMatchByte); } +}; + +} + +#endif diff --git a/snesreader/libjma/lzma.cpp b/snesreader/libjma/lzma.cpp new file mode 100644 index 00000000..d020ed27 --- /dev/null +++ b/snesreader/libjma/lzma.cpp @@ -0,0 +1,41 @@ +/* +Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net ) +Copyright (C) 2001-4 Igor Pavlov ( http://www.7-zip.org ) + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License version 2.1 as published by the Free Software Foundation. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include "lzma.h" + +namespace NCompress { +namespace NLZMA { + +UINT32 kDistStart[kDistTableSizeMax]; + +static class CConstInit +{ +public: + CConstInit() + { + UINT32 aStartValue = 0; + int i; + for (i = 0; i < kDistTableSizeMax; i++) + { + kDistStart[i] = aStartValue; + aStartValue += (1 << kDistDirectBits[i]); + } + } +} g_ConstInit; + +}} diff --git a/snesreader/libjma/lzma.h b/snesreader/libjma/lzma.h new file mode 100644 index 00000000..949b70b3 --- /dev/null +++ b/snesreader/libjma/lzma.h @@ -0,0 +1,124 @@ +/* +Copyright (C) 2005-2007 NSRT Team ( http://nsrt.edgeemu.com ) +Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net ) +Copyright (C) 2001-4 Igor Pavlov ( http://www.7-zip.org ) + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License version 2.1 as published by the Free Software Foundation. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include "lencoder.h" + +#ifndef __LZMA_H +#define __LZMA_H + +namespace NCompress { +namespace NLZMA { + +const UINT32 kNumRepDistances = 4; + +const BYTE kNumStates = 12; + +const BYTE kLiteralNextStates[kNumStates] = {0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 4, 5}; +const BYTE kMatchNextStates[kNumStates] = {7, 7, 7, 7, 7, 7, 7, 10, 10, 10, 10, 10}; +const BYTE kRepNextStates[kNumStates] = {8, 8, 8, 8, 8, 8, 8, 11, 11, 11, 11, 11}; +const BYTE kShortRepNextStates[kNumStates]= {9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 11, 11}; + +class CState +{ +public: + BYTE m_Index; + void Init() + { m_Index = 0; } + void UpdateChar() + { m_Index = kLiteralNextStates[m_Index]; } + void UpdateMatch() + { m_Index = kMatchNextStates[m_Index]; } + void UpdateRep() + { m_Index = kRepNextStates[m_Index]; } + void UpdateShortRep() + { m_Index = kShortRepNextStates[m_Index]; } +}; + +class CBaseCoder +{ +protected: + CState m_State; + BYTE m_PreviousByte; + bool m_PeviousIsMatch; + UINT32 m_RepDistances[kNumRepDistances]; + void Init() + { + m_State.Init(); + m_PreviousByte = 0; + m_PeviousIsMatch = false; + for(UINT32 i = 0 ; i < kNumRepDistances; i++) + m_RepDistances[i] = 0; + } +}; + +const int kNumPosSlotBits = 6; +const int kDicLogSizeMax = 28; +const int kDistTableSizeMax = kDicLogSizeMax * 2; + +extern UINT32 kDistStart[kDistTableSizeMax]; +const BYTE kDistDirectBits[kDistTableSizeMax] = +{ + 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, + 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, + 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26 +}; + +const UINT32 kNumLenToPosStates = 4; +inline UINT32 GetLenToPosState(UINT32 aLen) +{ + aLen -= 2; + if (aLen < kNumLenToPosStates) + return aLen; + return kNumLenToPosStates - 1; +} + +const int kMatchMinLen = 2; + +const int kMatchMaxLen = kMatchMinLen + NLength::kNumSymbolsTotal - 1; + +const int kNumAlignBits = 4; +const int kAlignTableSize = 1 << kNumAlignBits; +const UINT32 kAlignMask = (kAlignTableSize - 1); + +const int kStartPosModelIndex = 4; +const int kEndPosModelIndex = 14; +const int kNumPosModels = kEndPosModelIndex - kStartPosModelIndex; + +const int kNumFullDistances = 1 << (kEndPosModelIndex / 2); + + +const int kMainChoiceLiteralIndex = 0; +const int kMainChoiceMatchIndex = 1; + +const int kMatchChoiceDistanceIndex= 0; +const int kMatchChoiceRepetitionIndex = 1; + +const int kNumMoveBitsForMainChoice = 5; +const int kNumMoveBitsForPosCoders = 5; + +const int kNumMoveBitsForAlignCoders = 5; + +const int kNumMoveBitsForPosSlotCoder = 5; + +const int kNumLitPosStatesBitsEncodingMax = 4; +const int kNumLitContextBitsMax = 8; + +}} + +#endif diff --git a/snesreader/libjma/lzmadec.h b/snesreader/libjma/lzmadec.h new file mode 100644 index 00000000..bb91912e --- /dev/null +++ b/snesreader/libjma/lzmadec.h @@ -0,0 +1,82 @@ +/* +Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net ) +Copyright (C) 2001-4 Igor Pavlov ( http://www.7-zip.org ) + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License version 2.1 as published by the Free Software Foundation. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef __LZARITHMETIC_DECODER_H +#define __LZARITHMETIC_DECODER_H + +#include "winout.h" +#include "lzma.h" +#include "lencoder.h" +#include "litcoder.h" + +namespace NCompress { +namespace NLZMA { + +typedef CMyBitDecoder CMyBitDecoder2; + +class CDecoder +{ + NStream::NWindow::COut m_OutWindowStream; + CMyRangeDecoder m_RangeDecoder; + + CMyBitDecoder2 m_MainChoiceDecoders[kNumStates][NLength::kNumPosStatesMax]; + CMyBitDecoder2 m_MatchChoiceDecoders[kNumStates]; + CMyBitDecoder2 m_MatchRepChoiceDecoders[kNumStates]; + CMyBitDecoder2 m_MatchRep1ChoiceDecoders[kNumStates]; + CMyBitDecoder2 m_MatchRep2ChoiceDecoders[kNumStates]; + CMyBitDecoder2 m_MatchRepShortChoiceDecoders[kNumStates][NLength::kNumPosStatesMax]; + + CBitTreeDecoder m_PosSlotDecoder[kNumLenToPosStates]; + + CReverseBitTreeDecoder2 m_PosDecoders[kNumPosModels]; + CReverseBitTreeDecoder m_PosAlignDecoder; + // CBitTreeDecoder2 m_PosDecoders[kNumPosModels]; + // CBitTreeDecoder m_PosAlignDecoder; + + NLength::CDecoder m_LenDecoder; + NLength::CDecoder m_RepMatchLenDecoder; + + NLiteral::CDecoder m_LiteralDecoder; + + UINT32 m_DictionarySize; + + UINT32 m_PosStateMask; + + HRESULT Create(); + + HRESULT Init(ISequentialInStream *anInStream, ISequentialOutStream *anOutStream); + + HRESULT Flush() { return m_OutWindowStream.Flush(); } + + HRESULT CodeReal(ISequentialInStream *anInStream, ISequentialOutStream *anOutStream, const UINT64 *anInSize, const UINT64 *anOutSize); + +public: + + CDecoder(); + + HRESULT Code(ISequentialInStream *anInStream, ISequentialOutStream *anOutStream, const UINT64 *anInSize, const UINT64 *anOutSize); + HRESULT ReadCoderProperties(ISequentialInStream *anInStream); + + HRESULT SetDictionarySize(UINT32 aDictionarySize); + HRESULT SetLiteralProperties(UINT32 aLiteralPosStateBits, UINT32 aLiteralContextBits); + HRESULT SetPosBitsProperties(UINT32 aNumPosStateBits); +}; + +}} + +#endif diff --git a/snesreader/libjma/lzmadecode.cpp b/snesreader/libjma/lzmadecode.cpp new file mode 100644 index 00000000..ad6b5709 --- /dev/null +++ b/snesreader/libjma/lzmadecode.cpp @@ -0,0 +1,298 @@ +/* +Copyright (C) 2005-2007 NSRT Team ( http://nsrt.edgeemu.com ) +Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net ) +Copyright (C) 2001-4 Igor Pavlov ( http://www.7-zip.org ) + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License version 2.1 as published by the Free Software Foundation. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include "portable.h" +#include "lzmadec.h" + +#define RETURN_E_OUTOFMEMORY_IF_FALSE(x) { if (!(x)) return E_OUTOFMEMORY; } + +namespace NCompress { +namespace NLZMA { + +HRESULT CDecoder::SetDictionarySize(UINT32 aDictionarySize) +{ + if (aDictionarySize > (1 << kDicLogSizeMax)) + return E_INVALIDARG; + + UINT32 aWindowReservSize = MyMax(aDictionarySize, UINT32(1 << 21)); + + if (m_DictionarySize != aDictionarySize) + { + m_OutWindowStream.Create(aDictionarySize, kMatchMaxLen, aWindowReservSize); + m_DictionarySize = aDictionarySize; + } + return S_OK; +} + +HRESULT CDecoder::SetLiteralProperties( + UINT32 aLiteralPosStateBits, UINT32 aLiteralContextBits) +{ + if (aLiteralPosStateBits > 8) + return E_INVALIDARG; + if (aLiteralContextBits > 8) + return E_INVALIDARG; + m_LiteralDecoder.Create(aLiteralPosStateBits, aLiteralContextBits); + return S_OK; +} + +HRESULT CDecoder::SetPosBitsProperties(UINT32 aNumPosStateBits) +{ + if (aNumPosStateBits > NLength::kNumPosStatesBitsMax) + return E_INVALIDARG; + UINT32 aNumPosStates = 1 << aNumPosStateBits; + m_LenDecoder.Create(aNumPosStates); + m_RepMatchLenDecoder.Create(aNumPosStates); + m_PosStateMask = aNumPosStates - 1; + return S_OK; +} + +CDecoder::CDecoder(): + m_DictionarySize((UINT32)-1) +{ + Create(); +} + +HRESULT CDecoder::Create() +{ + for(int i = 0; i < kNumPosModels; i++) + { + RETURN_E_OUTOFMEMORY_IF_FALSE( + m_PosDecoders[i].Create(kDistDirectBits[kStartPosModelIndex + i])); + } + return S_OK; +} + + +HRESULT CDecoder::Init(ISequentialInStream *anInStream, + ISequentialOutStream *anOutStream) +{ + m_RangeDecoder.Init(anInStream); + + m_OutWindowStream.Init(anOutStream); + + int i; + for(i = 0; i < kNumStates; i++) + { + for (UINT32 j = 0; j <= m_PosStateMask; j++) + { + m_MainChoiceDecoders[i][j].Init(); + m_MatchRepShortChoiceDecoders[i][j].Init(); + } + m_MatchChoiceDecoders[i].Init(); + m_MatchRepChoiceDecoders[i].Init(); + m_MatchRep1ChoiceDecoders[i].Init(); + m_MatchRep2ChoiceDecoders[i].Init(); + } + + m_LiteralDecoder.Init(); + + // m_RepMatchLenDecoder.Init(); + + for (i = 0; (UINT32) i < kNumLenToPosStates; i++) + m_PosSlotDecoder[i].Init(); + + for(i = 0; i < kNumPosModels; i++) + m_PosDecoders[i].Init(); + + m_LenDecoder.Init(); + m_RepMatchLenDecoder.Init(); + + m_PosAlignDecoder.Init(); + return S_OK; + +} + +HRESULT CDecoder::CodeReal(ISequentialInStream *anInStream, + ISequentialOutStream *anOutStream, + const UINT64 *anInSize, const UINT64 *anOutSize) +{ + if (anOutSize == NULL) + return E_INVALIDARG; + + Init(anInStream, anOutStream); + + CState aState; + aState.Init(); + bool aPeviousIsMatch = false; + BYTE aPreviousByte = 0; + UINT32 aRepDistances[kNumRepDistances]; + for(UINT32 i = 0 ; i < kNumRepDistances; i++) + aRepDistances[i] = 0; + + UINT64 aNowPos64 = 0; + UINT64 aSize = *anOutSize; + while(aNowPos64 < aSize) + { + UINT64 aNext = MyMin(aNowPos64 + (1 << 18), aSize); + while(aNowPos64 < aNext) + { + UINT32 aPosState = UINT32(aNowPos64) & m_PosStateMask; + if (m_MainChoiceDecoders[aState.m_Index][aPosState].Decode(&m_RangeDecoder) == (UINT32) kMainChoiceLiteralIndex) + { + // aCounts[0]++; + aState.UpdateChar(); + if(aPeviousIsMatch) + { + BYTE aMatchByte = m_OutWindowStream.GetOneByte(0 - aRepDistances[0] - 1); + aPreviousByte = m_LiteralDecoder.DecodeWithMatchByte(&m_RangeDecoder, + UINT32(aNowPos64), aPreviousByte, aMatchByte); + aPeviousIsMatch = false; + } + else + aPreviousByte = m_LiteralDecoder.DecodeNormal(&m_RangeDecoder, + UINT32(aNowPos64), aPreviousByte); + m_OutWindowStream.PutOneByte(aPreviousByte); + aNowPos64++; + } + else + { + aPeviousIsMatch = true; + UINT32 aDistance, aLen; + if(m_MatchChoiceDecoders[aState.m_Index].Decode(&m_RangeDecoder) == + (UINT32) kMatchChoiceRepetitionIndex) + { + if(m_MatchRepChoiceDecoders[aState.m_Index].Decode(&m_RangeDecoder) == 0) + { + if(m_MatchRepShortChoiceDecoders[aState.m_Index][aPosState].Decode(&m_RangeDecoder) == 0) + { + aState.UpdateShortRep(); + aPreviousByte = m_OutWindowStream.GetOneByte(0 - aRepDistances[0] - 1); + m_OutWindowStream.PutOneByte(aPreviousByte); + aNowPos64++; + // aCounts[3 + 4]++; + continue; + } + // aCounts[3 + 0]++; + aDistance = aRepDistances[0]; + } + else + { + if(m_MatchRep1ChoiceDecoders[aState.m_Index].Decode(&m_RangeDecoder) == 0) + { + aDistance = aRepDistances[1]; + aRepDistances[1] = aRepDistances[0]; + // aCounts[3 + 1]++; + } + else + { + if (m_MatchRep2ChoiceDecoders[aState.m_Index].Decode(&m_RangeDecoder) == 0) + { + // aCounts[3 + 2]++; + aDistance = aRepDistances[2]; + } + else + { + // aCounts[3 + 3]++; + aDistance = aRepDistances[3]; + aRepDistances[3] = aRepDistances[2]; + } + aRepDistances[2] = aRepDistances[1]; + aRepDistances[1] = aRepDistances[0]; + } + aRepDistances[0] = aDistance; + } + aLen = m_RepMatchLenDecoder.Decode(&m_RangeDecoder, aPosState) + kMatchMinLen; + // aCounts[aLen]++; + aState.UpdateRep(); + } + else + { + aLen = kMatchMinLen + m_LenDecoder.Decode(&m_RangeDecoder, aPosState); + aState.UpdateMatch(); + UINT32 aPosSlot = m_PosSlotDecoder[GetLenToPosState(aLen)].Decode(&m_RangeDecoder); + // aCounts[aPosSlot]++; + if (aPosSlot >= (UINT32) kStartPosModelIndex) + { + aDistance = kDistStart[aPosSlot]; + if (aPosSlot < (UINT32) kEndPosModelIndex) + aDistance += m_PosDecoders[aPosSlot - kStartPosModelIndex].Decode(&m_RangeDecoder); + else + { + aDistance += (m_RangeDecoder.DecodeDirectBits(kDistDirectBits[aPosSlot] - + kNumAlignBits) << kNumAlignBits); + aDistance += m_PosAlignDecoder.Decode(&m_RangeDecoder); + } + } + else + aDistance = aPosSlot; + + + aRepDistances[3] = aRepDistances[2]; + aRepDistances[2] = aRepDistances[1]; + aRepDistances[1] = aRepDistances[0]; + + aRepDistances[0] = aDistance; + // UpdateStat(aLen, aPosSlot); + } + if (aDistance >= aNowPos64) + throw E_INVALIDDATA; + m_OutWindowStream.CopyBackBlock(aDistance, aLen); + aNowPos64 += aLen; + aPreviousByte = m_OutWindowStream.GetOneByte(0 - 1); + } + } + } + return Flush(); +} + +HRESULT CDecoder::Code(ISequentialInStream *anInStream, ISequentialOutStream *anOutStream, const UINT64 *anInSize, const UINT64 *anOutSize) +{ + try { + return CodeReal(anInStream, anOutStream, anInSize, anOutSize); + } catch (HRESULT& e) { + return e; + } catch (...) { + return E_FAIL; + } +} + +HRESULT CDecoder::ReadCoderProperties(ISequentialInStream *anInStream) +{ + UINT32 aNumPosStateBits; + UINT32 aLiteralPosStateBits; + UINT32 aLiteralContextBits; + UINT32 aDictionarySize; + + UINT32 aProcessesedSize; + + BYTE aByte; + RETURN_IF_NOT_S_OK(anInStream->Read(&aByte, sizeof(aByte), &aProcessesedSize)); + if (aProcessesedSize != sizeof(aByte)) + return E_INVALIDARG; + + aLiteralContextBits = aByte % 9; + BYTE aRemainder = aByte / 9; + aLiteralPosStateBits = aRemainder % 5; + aNumPosStateBits = aRemainder / 5; + + UINT8 uint_buffer[UINT_SIZE]; + RETURN_IF_NOT_S_OK(anInStream->Read(uint_buffer, sizeof(aDictionarySize), &aProcessesedSize)); + aDictionarySize = charp_to_uint(uint_buffer); + + if (aProcessesedSize != sizeof(aDictionarySize)) + return E_INVALIDARG; + + RETURN_IF_NOT_S_OK(SetDictionarySize(aDictionarySize)); + RETURN_IF_NOT_S_OK(SetLiteralProperties(aLiteralPosStateBits, aLiteralContextBits)); + RETURN_IF_NOT_S_OK(SetPosBitsProperties(aNumPosStateBits)); + + return S_OK; +} + +}} diff --git a/snesreader/libjma/portable.h b/snesreader/libjma/portable.h new file mode 100644 index 00000000..12416c7f --- /dev/null +++ b/snesreader/libjma/portable.h @@ -0,0 +1,83 @@ +/* +Copyright (C) 2004-2007 NSRT Team ( http://nsrt.edgeemu.com ) +Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net ) + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +version 2 as published by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#ifndef __PORTABLE_H +#define __PORTABLE_H + +#include + +typedef signed char INT8; +typedef unsigned char UINT8; +typedef short INT16; +typedef unsigned short UINT16; +typedef long INT32; +typedef unsigned long UINT32; +typedef long long INT64; +typedef unsigned long long UINT64; + +typedef UINT8 BYTE; +typedef UINT16 WORD; +typedef UINT32 DWORD; + +typedef unsigned UINT_PTR; + +typedef int BOOL; +#define FALSE 0 +#define TRUE 1 + +#define HRESULT int +#define S_OK 0 +#define E_INVALIDARG -1 +#define E_OUTOFMEMORY -2 +#define E_FAIL -3 +#define E_INTERNAL_ERROR -4 +#define E_INVALIDDATA -5 + +template inline T MyMin(T a, T b) { + return a < b ? a : b; +} + +template inline T MyMax(T a, T b) { + return a > b ? a : b; +} + +#define RETURN_IF_NOT_S_OK(x) { HRESULT __aResult_ = (x); if(__aResult_ != S_OK) return __aResult_; } + + +#define UINT_SIZE (4) +#define USHORT_SIZE (2) + +//Convert an array of 4 bytes back into an integer +inline unsigned int charp_to_uint(const unsigned char buffer[UINT_SIZE]) +{ + unsigned int num = (unsigned int)buffer[3]; + num |= ((unsigned int)buffer[2]) << 8; + num |= ((unsigned int)buffer[1]) << 16; + num |= ((unsigned int)buffer[0]) << 24; + return(num); +} + +//Convert an array of 2 bytes back into a short integer +inline unsigned short charp_to_ushort(const unsigned char buffer[USHORT_SIZE]) +{ + unsigned short num = (unsigned short)buffer[1]; + num |= ((unsigned short)buffer[0]) << 8; + return(num); +} + +#endif diff --git a/snesreader/libjma/rcdefs.h b/snesreader/libjma/rcdefs.h new file mode 100644 index 00000000..6106b57a --- /dev/null +++ b/snesreader/libjma/rcdefs.h @@ -0,0 +1,60 @@ +/* +Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net ) +Copyright (C) 2001-4 Igor Pavlov ( http://www.7-zip.org ) + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License version 2.1 as published by the Free Software Foundation. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef __RCDEFS_H +#define __RCDEFS_H + +#include "aribitcd.h" +#include "ariconst.h" + +#define RC_INIT_VAR \ + UINT32 aRange = aRangeDecoder->m_Range; \ + UINT32 aCode = aRangeDecoder->m_Code; + +#define RC_FLUSH_VAR \ + aRangeDecoder->m_Range = aRange; \ + aRangeDecoder->m_Code = aCode; + +#define RC_NORMALIZE \ + if (aRange < NCompression::NArithmetic::kTopValue) \ + { \ + aCode = (aCode << 8) | aRangeDecoder->m_Stream.ReadByte(); \ + aRange <<= 8; } + +#define RC_GETBIT2(aNumMoveBits, aProb, aModelIndex, Action0, Action1) \ + {UINT32 aNewBound = (aRange >> NCompression::NArithmetic::kNumBitModelTotalBits) * aProb; \ + if (aCode < aNewBound) \ + { \ + Action0; \ + aRange = aNewBound; \ + aProb += (NCompression::NArithmetic::kBitModelTotal - aProb) >> aNumMoveBits; \ + aModelIndex <<= 1; \ + } \ + else \ + { \ + Action1; \ + aRange -= aNewBound; \ + aCode -= aNewBound; \ + aProb -= (aProb) >> aNumMoveBits; \ + aModelIndex = (aModelIndex << 1) + 1; \ + }} \ + RC_NORMALIZE + +#define RC_GETBIT(aNumMoveBits, aProb, aModelIndex) RC_GETBIT2(aNumMoveBits, aProb, aModelIndex, ; , ;) + +#endif diff --git a/snesreader/libjma/rngcoder.h b/snesreader/libjma/rngcoder.h new file mode 100644 index 00000000..711c2de8 --- /dev/null +++ b/snesreader/libjma/rngcoder.h @@ -0,0 +1,143 @@ +/* +Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net ) +Copyright (C) 2001-4 Igor Pavlov ( http://www.7-zip.org ) + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License version 2.1 as published by the Free Software Foundation. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef __COMPRESSION_RANGECODER_H +#define __COMPRESSION_RANGECODER_H + +#include "inbyte.h" + +namespace NCompression { +namespace NArithmetic { + +const UINT32 kNumTopBits = 24; +const UINT32 kTopValue = (1 << kNumTopBits); + +class CRangeDecoder +{ +public: + NStream::CInByte m_Stream; + UINT32 m_Range; + UINT32 m_Code; + UINT32 m_Word; + void Normalize() + { + while (m_Range < kTopValue) + { + m_Code = (m_Code << 8) | m_Stream.ReadByte(); + m_Range <<= 8; + } + } + + void Init(ISequentialInStream *aStream) + { + m_Stream.Init(aStream); + m_Code = 0; + m_Range = UINT32(-1); + for(int i = 0; i < 5; i++) + m_Code = (m_Code << 8) | m_Stream.ReadByte(); + } + + UINT32 GetThreshold(UINT32 aTotal) + { + return (m_Code) / ( m_Range /= aTotal); + } + + void Decode(UINT32 aStart, UINT32 aSize, UINT32 aTotal) + { + m_Code -= aStart * m_Range; + m_Range *= aSize; + Normalize(); + } + + /* + UINT32 DecodeDirectBitsDiv(UINT32 aNumTotalBits) + { + m_Range >>= aNumTotalBits; + UINT32 aThreshold = m_Code / m_Range; + m_Code -= aThreshold * m_Range; + + Normalize(); + return aThreshold; + } + + UINT32 DecodeDirectBitsDiv2(UINT32 aNumTotalBits) + { + if (aNumTotalBits <= kNumBottomBits) + return DecodeDirectBitsDiv(aNumTotalBits); + UINT32 aResult = DecodeDirectBitsDiv(aNumTotalBits - kNumBottomBits) << kNumBottomBits; + return (aResult | DecodeDirectBitsDiv(kNumBottomBits)); + } + */ + + UINT32 DecodeDirectBits(UINT32 aNumTotalBits) + { + UINT32 aRange = m_Range; + UINT32 aCode = m_Code; + UINT32 aResult = 0; + for (UINT32 i = aNumTotalBits; i > 0; i--) + { + aRange >>= 1; + /* + aResult <<= 1; + if (aCode >= aRange) + { + aCode -= aRange; + aResult |= 1; + } + */ + UINT32 t = (aCode - aRange) >> 31; + aCode -= aRange & (t - 1); + // aRange = aRangeTmp + ((aRange & 1) & (1 - t)); + aResult = (aResult << 1) | (1 - t); + + if (aRange < kTopValue) + { + aCode = (aCode << 8) | m_Stream.ReadByte(); + aRange <<= 8; + } + } + m_Range = aRange; + m_Code = aCode; + return aResult; + } + + UINT32 DecodeBit(UINT32 aSize0, UINT32 aNumTotalBits) + { + UINT32 aNewBound = (m_Range >> aNumTotalBits) * aSize0; + UINT32 aSymbol; + if (m_Code < aNewBound) + { + aSymbol = 0; + m_Range = aNewBound; + } + else + { + aSymbol = 1; + m_Code -= aNewBound; + m_Range -= aNewBound; + } + Normalize(); + return aSymbol; + } + + UINT64 GetProcessedSize() {return m_Stream.GetProcessedSize(); } +}; + +}} + +#endif diff --git a/snesreader/libjma/winout.cpp b/snesreader/libjma/winout.cpp new file mode 100644 index 00000000..1f33885c --- /dev/null +++ b/snesreader/libjma/winout.cpp @@ -0,0 +1,89 @@ +/* +Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net ) +Copyright (C) 2001-4 Igor Pavlov ( http://www.7-zip.org ) + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License version 2.1 as published by the Free Software Foundation. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include "winout.h" + +namespace NStream { +namespace NWindow { + +void COut::Create(UINT32 aKeepSizeBefore, UINT32 aKeepSizeAfter, UINT32 aKeepSizeReserv) +{ + m_Pos = 0; + m_PosLimit = aKeepSizeReserv + aKeepSizeBefore; + m_KeepSizeBefore = aKeepSizeBefore; + m_KeepSizeAfter = aKeepSizeAfter; + m_KeepSizeReserv = aKeepSizeReserv; + m_StreamPos = 0; + m_MoveFrom = m_KeepSizeReserv; + m_WindowSize = aKeepSizeBefore; + UINT32 aBlockSize = m_KeepSizeBefore + m_KeepSizeAfter + m_KeepSizeReserv; + delete []m_Buffer; + m_Buffer = new BYTE[aBlockSize]; +} + +COut::~COut() +{ + delete []m_Buffer; +} + +void COut::SetWindowSize(UINT32 aWindowSize) +{ + m_WindowSize = aWindowSize; + m_MoveFrom = m_KeepSizeReserv + m_KeepSizeBefore - aWindowSize; +} + +void COut::Init(ISequentialOutStream *aStream, bool aSolid) +{ + m_Stream = aStream; + + if(aSolid) + m_StreamPos = m_Pos; + else + { + m_Pos = 0; + m_PosLimit = m_KeepSizeReserv + m_KeepSizeBefore; + m_StreamPos = 0; + } +} + +HRESULT COut::Flush() +{ + UINT32 aSize = m_Pos - m_StreamPos; + if(aSize == 0) + return S_OK; + UINT32 aProcessedSize; + HRESULT aResult = m_Stream->Write(m_Buffer + m_StreamPos, aSize, &aProcessedSize); + if (aResult != S_OK) + return aResult; + if (aSize != aProcessedSize) + return E_FAIL; + m_StreamPos = m_Pos; + return S_OK; +} + +void COut::MoveBlockBackward() +{ + HRESULT aResult = Flush(); + if (aResult != S_OK) + throw aResult; + memmove(m_Buffer, m_Buffer + m_MoveFrom, m_WindowSize + m_KeepSizeAfter); + m_Pos -= m_MoveFrom; + m_StreamPos -= m_MoveFrom; +} + +}} diff --git a/snesreader/libjma/winout.h b/snesreader/libjma/winout.h new file mode 100644 index 00000000..38e06bdf --- /dev/null +++ b/snesreader/libjma/winout.h @@ -0,0 +1,89 @@ +/* +Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net ) +Copyright (C) 2001-4 Igor Pavlov ( http://www.7-zip.org ) + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License version 2.1 as published by the Free Software Foundation. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef __STREAM_WINDOWOUT_H +#define __STREAM_WINDOWOUT_H + +#include "iiostrm.h" + +namespace NStream { +namespace NWindow { + +// m_KeepSizeBefore: how mach BYTEs must be in buffer before m_Pos; +// m_KeepSizeAfter: how mach BYTEs must be in buffer after m_Pos; +// m_KeepSizeReserv: how mach BYTEs must be in buffer for Moving Reserv; +// must be >= aKeepSizeAfter; // test it + +class COut +{ + BYTE *m_Buffer; + UINT32 m_Pos; + UINT32 m_PosLimit; + UINT32 m_KeepSizeBefore; + UINT32 m_KeepSizeAfter; + UINT32 m_KeepSizeReserv; + UINT32 m_StreamPos; + + UINT32 m_WindowSize; + UINT32 m_MoveFrom; + + ISequentialOutStream *m_Stream; + + virtual void MoveBlockBackward(); +public: + COut(): m_Buffer(0), m_Stream(0) {} + virtual ~COut(); + void Create(UINT32 aKeepSizeBefore, + UINT32 aKeepSizeAfter, UINT32 aKeepSizeReserv = (1<<17)); + void SetWindowSize(UINT32 aWindowSize); + + void Init(ISequentialOutStream *aStream, bool aSolid = false); + HRESULT Flush(); + + UINT32 GetCurPos() const { return m_Pos; } + const BYTE *GetPointerToCurrentPos() const { return m_Buffer + m_Pos;}; + + void CopyBackBlock(UINT32 aDistance, UINT32 aLen) + { + if (m_Pos >= m_PosLimit) + MoveBlockBackward(); + BYTE *p = m_Buffer + m_Pos; + aDistance++; + for(UINT32 i = 0; i < aLen; i++) + p[i] = p[i - aDistance]; + m_Pos += aLen; + } + + void PutOneByte(BYTE aByte) + { + if (m_Pos >= m_PosLimit) + MoveBlockBackward(); + m_Buffer[m_Pos++] = aByte; + } + + BYTE GetOneByte(UINT32 anIndex) const + { + return m_Buffer[m_Pos + anIndex]; + } + + BYTE *GetBuffer() const { return m_Buffer; } +}; + +}} + +#endif diff --git a/snesreader/micro-bunzip/micro-bunzip.c b/snesreader/micro-bunzip/micro-bunzip.c new file mode 100644 index 00000000..e7f6f7dc --- /dev/null +++ b/snesreader/micro-bunzip/micro-bunzip.c @@ -0,0 +1,515 @@ +/* vi: set sw=4 ts=4: */ +/* micro-bunzip, a small, simple bzip2 decompression implementation. + Copyright 2003 by Rob Landley (rob@landley.net). + + Based on bzip2 decompression code by Julian R Seward (jseward@acm.org), + which also acknowledges contributions by Mike Burrows, David Wheeler, + Peter Fenwick, Alistair Moffat, Radford Neal, Ian H. Witten, + Robert Sedgewick, and Jon L. Bentley. + + I hereby release this code under the GNU Library General Public License + (LGPL) version 2, available at http://www.gnu.org/copyleft/lgpl.html +*/ + +#include +#include +#include +#include +#include + +/* Constants for huffman coding */ +#define MAX_GROUPS 6 +#define GROUP_SIZE 50 /* 64 would have been more efficient */ +#define MAX_HUFCODE_BITS 20 /* Longest huffman code allowed */ +#define MAX_SYMBOLS 258 /* 256 literals + RUNA + RUNB */ +#define SYMBOL_RUNA 0 +#define SYMBOL_RUNB 1 + +/* Status return values */ +#define RETVAL_OK 0 +#define RETVAL_LAST_BLOCK (-1) +#define RETVAL_NOT_BZIP_DATA (-2) +#define RETVAL_UNEXPECTED_INPUT_EOF (-3) +#define RETVAL_UNEXPECTED_OUTPUT_EOF (-4) +#define RETVAL_DATA_ERROR (-5) +#define RETVAL_OUT_OF_MEMORY (-6) +#define RETVAL_OBSOLETE_INPUT (-7) + +/* Other housekeeping constants */ +#define IOBUF_SIZE 4096 + +char *bunzip_errors[]={NULL,"Bad file checksum","Not bzip data", + "Unexpected input EOF","Unexpected output EOF","Data error", + "Out of memory","Obsolete (pre 0.9.5) bzip format not supported."}; + +/* This is what we know about each huffman coding group */ +struct group_data { + int limit[MAX_HUFCODE_BITS],base[MAX_HUFCODE_BITS],permute[MAX_SYMBOLS]; + char minLen, maxLen; +}; + +/* Structure holding all the housekeeping data, including IO buffers and + memory that persists between calls to bunzip */ +typedef struct { + /* For I/O error handling */ + jmp_buf jmpbuf; + /* Input stream, input buffer, input bit buffer */ + int in_fd,inbufCount,inbufPos; + unsigned char *inbuf; + unsigned int inbufBitCount, inbufBits; + /* Output buffer */ + char outbuf[IOBUF_SIZE]; + int outbufPos; + /* The CRC values stored in the block header and calculated from the data */ + unsigned int crc32Table[256],headerCRC, dataCRC, totalCRC; + /* Intermediate buffer and its size (in bytes) */ + unsigned int *dbuf, dbufSize; + /* State for interrupting output loop */ + int writePos,writeRun,writeCount,writeCurrent; + + /* These things are a bit too big to go on the stack */ + unsigned char selectors[32768]; /* nSelectors=15 bits */ + struct group_data groups[MAX_GROUPS]; /* huffman coding tables */ +} bunzip_data; + +/* Return the next nnn bits of input. All reads from the compressed input + are done through this function. All reads are big endian */ +static unsigned int get_bits(bunzip_data *bd, char bits_wanted) +{ + unsigned int bits=0; + + /* If we need to get more data from the byte buffer, do so. (Loop getting + one byte at a time to enforce endianness and avoid unaligned access.) */ + while (bd->inbufBitCountinbufPos==bd->inbufCount) { + if(!(bd->inbufCount = read(bd->in_fd, bd->inbuf, IOBUF_SIZE))) + longjmp(bd->jmpbuf,RETVAL_UNEXPECTED_INPUT_EOF); + bd->inbufPos=0; + } + /* Avoid 32-bit overflow (dump bit buffer to top of output) */ + if(bd->inbufBitCount>=24) { + bits=bd->inbufBits&((1<inbufBitCount)-1); + bits_wanted-=bd->inbufBitCount; + bits<<=bits_wanted; + bd->inbufBitCount=0; + } + /* Grab next 8 bits of input from buffer. */ + bd->inbufBits=(bd->inbufBits<<8)|bd->inbuf[bd->inbufPos++]; + bd->inbufBitCount+=8; + } + /* Calculate result */ + bd->inbufBitCount-=bits_wanted; + bits|=(bd->inbufBits>>bd->inbufBitCount)&((1<headerCRC=get_bits(bd,32); + /* Is this the last block (with CRC for file)? */ + if(!strcmp(mtfSymbol,"\x17\x72\x45\x38\x50\x90")) + return RETVAL_LAST_BLOCK; + /* If it's not a valid data block, barf. */ + if(strcmp(mtfSymbol,"\x31\x41\x59\x26\x53\x59")) + return RETVAL_NOT_BZIP_DATA; + + dbuf=bd->dbuf; + dbufSize=bd->dbufSize; + selectors=bd->selectors; + /* We can add support for blockRandomised if anybody complains. There was + some code for this in busybox 1.0.0-pre3, but nobody ever noticed that + it didn't actually work. */ + if(get_bits(bd,1)) return RETVAL_OBSOLETE_INPUT; + if((origPtr=get_bits(bd,24)) > dbufSize) return RETVAL_DATA_ERROR; + /* mapping table: if some byte values are never used (encoding things + like ascii text), the compression code removes the gaps to have fewer + symbols to deal with, and writes a sparse bitfield indicating which + values were present. We make a translation table to convert the symbols + back to the corresponding bytes. */ + t=get_bits(bd, 16); + memset(symToByte,0,256); + symTotal=0; + for (i=0;i<16;i++) { + if(t&(1<<(15-i))) { + k=get_bits(bd,16); + for(j=0;j<16;j++) + if(k&(1<<(15-j))) symToByte[symTotal++]=(16*i)+j; + } + } + /* How many different huffman coding groups does this block use? */ + groupCount=get_bits(bd,3); + if (groupCount<2 || groupCount>MAX_GROUPS) return RETVAL_DATA_ERROR; + /* nSelectors: Every GROUP_SIZE many symbols we select a new huffman coding + group. Read in the group selector list, which is stored as MTF encoded + bit runs. */ + if(!(nSelectors=get_bits(bd, 15))) return RETVAL_DATA_ERROR; + for(i=0; i=groupCount) return RETVAL_DATA_ERROR; + /* Decode MTF to get the next selector */ + uc = mtfSymbol[j]; + memmove(mtfSymbol+1,mtfSymbol,j); + mtfSymbol[0]=selectors[i]=uc; + } + /* Read the huffman coding tables for each group, which code for symTotal + literal symbols, plus two run symbols (RUNA, RUNB) */ + symCount=symTotal+2; + for (j=0; j MAX_HUFCODE_BITS) return RETVAL_DATA_ERROR; + if(!get_bits(bd, 1)) break; + if(!get_bits(bd, 1)) t++; + else t--; + } + length[i] = t; + } + /* Find largest and smallest lengths in this group */ + minLen=maxLen=length[0]; + for(i = 1; i < symCount; i++) { + if(length[i] > maxLen) maxLen = length[i]; + else if(length[i] < minLen) minLen = length[i]; + } + /* Calculate permute[], base[], and limit[] tables from length[]. + * + * permute[] is the lookup table for converting huffman coded symbols + * into decoded symbols. base[] is the amount to subtract from the + * value of a huffman symbol of a given length when using permute[]. + * + * limit[] indicates the largest numerical value a symbol with a given + * number of bits can have. It lets us know when to stop reading. + * + * To use these, keep reading bits until value<=limit[bitcount] or + * you've read over 20 bits (error). Then the decoded symbol + * equals permute[hufcode_value-base[hufcode_bitcount]]. + */ + hufGroup=bd->groups+j; + hufGroup->minLen = minLen; + hufGroup->maxLen = maxLen; + /* Note that minLen can't be smaller than 1, so we adjust the base + and limit array pointers so we're not always wasting the first + entry. We do this again when using them (during symbol decoding).*/ + base=hufGroup->base-1; + limit=hufGroup->limit-1; + /* Calculate permute[] */ + pp = 0; + for(i=minLen;i<=maxLen;i++) + for(t=0;tpermute[pp++] = t; + /* Count cumulative symbols coded for at each bit length */ + for (i=minLen;i<=maxLen;i++) temp[i]=limit[i]=0; + for (i=0;i=nSelectors) return RETVAL_DATA_ERROR; + hufGroup=bd->groups+selectors[selector++]; + base=hufGroup->base-1; + limit=hufGroup->limit-1; + } + /* Read next huffman-coded symbol */ + i = hufGroup->minLen; + j=get_bits(bd, i); + for(;;) { + if (i > hufGroup->maxLen) return RETVAL_DATA_ERROR; + if (j <= limit[i]) break; + i++; + + j = (j << 1) | get_bits(bd,1); + } + /* Huffman decode nextSym (with bounds checking) */ + j-=base[i]; + if (j < 0 || j >= MAX_SYMBOLS) return RETVAL_DATA_ERROR; + nextSym = hufGroup->permute[j]; + /* If this is a repeated run, loop collecting data */ + if (nextSym == SYMBOL_RUNA || nextSym == SYMBOL_RUNB) { + /* If this is the start of a new run, zero out counter */ + if(!runPos) { + runPos = 1; + t = 0; + } + /* Neat trick that saves 1 symbol: instead of or-ing 0 or 1 at + each bit position, add 1 or 2 instead. For example, + 1011 is 1<<0 + 1<<1 + 2<<2. 1010 is 2<<0 + 2<<1 + 1<<2. + You can make any bit pattern that way using 1 less symbol than + the basic or 0/1 method (except all bits 0, which would use no + symbols, but a run of length 0 doesn't mean anything in this + context). Thus space is saved. */ + if (nextSym == SYMBOL_RUNA) t += runPos; + else t += 2*runPos; + runPos <<= 1; + continue; + } + /* When we hit the first non-run symbol after a run, we now know + how many times to repeat the last literal, so append that many + copies to our buffer of decoded symbols (dbuf) now. (The last + literal used is the one at the head of the mtfSymbol array.) */ + if(runPos) { + runPos=0; + if(dbufCount+t>=dbufSize) return RETVAL_DATA_ERROR; + + uc = symToByte[mtfSymbol[0]]; + byteCount[uc] += t; + while(t--) dbuf[dbufCount++]=uc; + } + /* Is this the terminating symbol? */ + if(nextSym>symTotal) break; + /* At this point, the symbol we just decoded indicates a new literal + character. Subtract one to get the position in the MTF array + at which this literal is currently to be found. (Note that the + result can't be -1 or 0, because 0 and 1 are RUNA and RUNB. + Another instance of the first symbol in the mtf array, position 0, + would have been handled as part of a run.) */ + if(dbufCount>=dbufSize) return RETVAL_DATA_ERROR; + i = nextSym - 1; + uc = mtfSymbol[i]; + memmove(mtfSymbol+1,mtfSymbol,i); + mtfSymbol[0] = uc; + uc=symToByte[uc]; + /* We have our literal byte. Save it into dbuf. */ + byteCount[uc]++; + dbuf[dbufCount++] = (unsigned int)uc; + } + /* At this point, we've finished reading huffman-coded symbols and + compressed runs from the input stream. There are dbufCount many of + them in dbuf[]. Now undo the Burrows-Wheeler transform on dbuf. + See http://dogma.net/markn/articles/bwt/bwt.htm + */ + + /* Now we know what dbufCount is, do a better sanity check on origPtr. */ + if (origPtr<0 || origPtr>=dbufCount) return RETVAL_DATA_ERROR; + /* Turn byteCount into cumulative occurrence counts of 0 to n-1. */ + j=0; + for(i=0;i<256;i++) { + k=j+byteCount[i]; + byteCount[i] = j; + j=k; + } + /* Figure out what order dbuf would be in if we sorted it. */ + for (i=0;idataCRC = 0xffffffffL; + /* Decode first byte by hand to initialize "previous" byte. Note that it + doesn't get output, and if the first three characters are identical + it doesn't qualify as a run (hence uc=255, which will either wrap + to 1 or get reset). */ + if(dbufCount) { + bd->writePos=dbuf[origPtr]; + bd->writeCurrent=(unsigned char)(bd->writePos&0xff); + bd->writePos>>=8; + bd->writeRun=-1; + } + bd->writeCount=dbufCount; + + return RETVAL_OK; +} + +/* Flush output buffer to disk */ +extern void flush_bunzip_outbuf(bunzip_data *bd, int out_fd) +{ + if(bd->outbufPos) { + if(write(out_fd, bd->outbuf, bd->outbufPos) != bd->outbufPos) + longjmp(bd->jmpbuf,RETVAL_UNEXPECTED_OUTPUT_EOF); + bd->outbufPos=0; + } +} + + +/* Undo burrows-wheeler transform on intermediate buffer to produce output. + If !len, write up to len bytes of data to buf. Otherwise write to out_fd. + Returns len ? bytes written : RETVAL_OK. Notice all errors negative #'s. */ +extern int write_bunzip_data(bunzip_data *bd, int out_fd, char *outbuf, int len) +{ + unsigned int *dbuf=bd->dbuf; + int count,pos,current, run,copies,outbyte,previous,gotcount=0; + + for(;;) { + /* If last read was short due to end of file, return last block now */ + if(bd->writeCount<0) return bd->writeCount; + /* If we need to refill dbuf, do it. */ + if(!bd->writeCount) { + int i=read_bunzip_data(bd); + if(i) { + if(i==RETVAL_LAST_BLOCK) { + bd->writeCount=i; + return gotcount; + } else return i; + } + } + /* Loop generating output */ + count=bd->writeCount; + pos=bd->writePos; + current=bd->writeCurrent; + run=bd->writeRun; + while(count) { + /* If somebody (like busybox tar) wants a certain number of bytes of + data from memory instead of written to a file, humor them */ + if(len && bd->outbufPos>=len) goto dataus_interruptus; + count--; + /* Follow sequence vector to undo Burrows-Wheeler transform */ + previous=current; + pos=dbuf[pos]; + current=pos&0xff; + pos>>=8; + /* Whenever we see 3 consecutive copies of the same byte, + the 4th is a repeat count */ + if(run++==3) { + copies=current; + outbyte=previous; + current=-1; + } else { + copies=1; + outbyte=current; + } + /* Output bytes to buffer, flushing to file if necessary */ + while(copies--) { + if(bd->outbufPos == IOBUF_SIZE) flush_bunzip_outbuf(bd,out_fd); + bd->outbuf[bd->outbufPos++] = outbyte; + bd->dataCRC = (bd->dataCRC << 8) + ^ bd->crc32Table[(bd->dataCRC >> 24) ^ outbyte]; + } + if(current!=previous) run=0; + } + /* Decompression of this block completed successfully */ + bd->dataCRC=~(bd->dataCRC); + bd->totalCRC=((bd->totalCRC << 1) | (bd->totalCRC >> 31)) ^ bd->dataCRC; + /* If this block had a CRC error, force file level CRC error. */ + if(bd->dataCRC!=bd->headerCRC) { + bd->totalCRC=bd->headerCRC+1; + return RETVAL_LAST_BLOCK; + } +dataus_interruptus: + bd->writeCount=count; + if(len) { + gotcount+=bd->outbufPos; + memcpy(outbuf,bd->outbuf,len); + /* If we got enough data, checkpoint loop state and return */ + if((len-=bd->outbufPos)<1) { + bd->outbufPos-=len; + if(bd->outbufPos) + memmove(bd->outbuf,bd->outbuf+len,bd->outbufPos); + bd->writePos=pos; + bd->writeCurrent=current; + bd->writeRun=run; + return gotcount; + } + } + } +} + +/* Allocate the structure, read file header. If !len, src_fd contains + filehandle to read from. Else inbuf contains data. */ +extern int start_bunzip(bunzip_data **bdp, int src_fd, char *inbuf, int len) +{ + bunzip_data *bd; + unsigned int i,j,c; + + /* Figure out how much data to allocate */ + i=sizeof(bunzip_data); + if(!len) i+=IOBUF_SIZE; + /* Allocate bunzip_data. Most fields initialize to zero. */ + if(!(bd=*bdp=malloc(i))) return RETVAL_OUT_OF_MEMORY; + memset(bd,0,sizeof(bunzip_data)); + if(len) { + bd->inbuf=inbuf; + bd->inbufCount=len; + bd->in_fd=-1; + } else { + bd->inbuf=(char *)(bd+1); + bd->in_fd=src_fd; + } + /* Init the CRC32 table (big endian) */ + for(i=0;i<256;i++) { + c=i<<24; + for(j=8;j;j--) + c=c&0x80000000 ? (c<<1)^0x04c11db7 : (c<<1); + bd->crc32Table[i]=c; + } + /* Setup for I/O error handling via longjmp */ + i=setjmp(bd->jmpbuf); + if(i) return i; + /* Ensure that file starts with "BZh" */ + for(i=0;i<3;i++) if(get_bits(bd,8)!="BZh"[i]) return RETVAL_NOT_BZIP_DATA; + /* Next byte ascii '1'-'9', indicates block size in units of 100k of + uncompressed data. Allocate intermediate buffer for block. */ + i=get_bits(bd,8); + if (i<'1' || i>'9') return RETVAL_NOT_BZIP_DATA; + bd->dbufSize=100000*(i-'0'); + if(!(bd->dbuf=malloc(bd->dbufSize * sizeof(int)))) + return RETVAL_OUT_OF_MEMORY; + return RETVAL_OK; +} + +/* Example usage: decompress src_fd to dst_fd. (Stops at end of bzip data, + not end of file.) */ +extern char *uncompressStream(int src_fd, int dst_fd) +{ + bunzip_data *bd; + int i; + + if(!(i=start_bunzip(&bd,src_fd,0,0))) { + i=write_bunzip_data(bd,dst_fd,0,0); + if(i==RETVAL_LAST_BLOCK && bd->headerCRC==bd->totalCRC) i=RETVAL_OK; + } + flush_bunzip_outbuf(bd,dst_fd); + if(bd->dbuf) free(bd->dbuf); + free(bd); + return bunzip_errors[-i]; +} + +/* Dumb little test thing, decompress stdin to stdout */ +/*int main(int argc, char *argv[]) +{ + char *c=uncompressStream(0,1); + fprintf(stderr,"\n%s\n", c ? c : "Completed OK"); +}*/ diff --git a/snesreader/nall/Makefile b/snesreader/nall/Makefile new file mode 100644 index 00000000..82dc00a5 --- /dev/null +++ b/snesreader/nall/Makefile @@ -0,0 +1,109 @@ +# Makefile +# author: byuu +# license: public domain + +[A-Z] = A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +[a-z] = a b c d e f g h i j k l m n o p q r s t u v w x y z +[0-9] = 0 1 2 3 4 5 6 7 8 9 +[markup] = ` ~ ! @ \# $$ % ^ & * ( ) - _ = + [ { ] } \ | ; : ' " , < . > / ? +[all] = $([A-Z]) $([a-z]) $([0-9]) $([markup]) +[space] := +[space] += + +##### +# platform detection +##### + +ifeq ($(platform),) + uname := $(shell uname -a) + ifeq ($(uname),) + platform := win + delete = del $(subst /,\,$1) + else ifneq ($(findstring Darwin,$(uname)),) + platform := osx + delete = rm -f $1 + else + platform := x + delete = rm -f $1 + endif +endif + +ifeq ($(compiler),) + compiler := gcc +endif + +ifeq ($(prefix),) + prefix := /usr/local +endif + +##### +# function rwildcard(directory, pattern) +##### +rwildcard = \ + $(strip \ + $(filter $(if $2,$2,%), \ + $(foreach f, \ + $(wildcard $1*), \ + $(eval t = $(call rwildcard,$f/)) \ + $(if $t,$t,$f) \ + ) \ + ) \ + ) + +##### +# function strtr(source, from, to) +##### +strtr = \ + $(eval __temp := $1) \ + $(strip \ + $(foreach c, \ + $(join $(addsuffix :,$2),$3), \ + $(eval __temp := \ + $(subst $(word 1,$(subst :, ,$c)),$(word 2,$(subst :, ,$c)),$(__temp)) \ + ) \ + ) \ + $(__temp) \ + ) + +##### +# function strupper(source) +##### +strupper = $(call strtr,$1,$([a-z]),$([A-Z])) + +##### +# function strlower(source) +##### +strlower = $(call strtr,$1,$([A-Z]),$([a-z])) + +##### +# function strlen(source) +##### +strlen = \ + $(eval __temp := $(subst $([space]),_,$1)) \ + $(words \ + $(strip \ + $(foreach c, \ + $([all]), \ + $(eval __temp := \ + $(subst $c,$c ,$(__temp)) \ + ) \ + ) \ + $(__temp) \ + ) \ + ) + +##### +# function streq(source) +##### +streq = $(if $(filter-out xx,x$(subst $1,,$2)$(subst $2,,$1)x),,1) + +##### +# function strne(source) +##### +strne = $(if $(filter-out xx,x$(subst $1,,$2)$(subst $2,,$1)x),1,) + +##### +# function ifhas(needle, haystack, true, false) +##### +ifhas = $(if $(findstring $1,$2),$3,$4) + diff --git a/snesreader/nall/Makefile-qt b/snesreader/nall/Makefile-qt new file mode 100644 index 00000000..7cf21c9e --- /dev/null +++ b/snesreader/nall/Makefile-qt @@ -0,0 +1,55 @@ +# requires nall/Makefile + +# exports the following symbols: +# $(moc) -- meta-object compiler +# $(rcc) -- resource compiler +# $(qtinc) -- includes for compiling +# $(qtlib) -- libraries for linking + +ifeq ($(moc),) +moc := moc +endif + +ifeq ($(rcc),) +rcc := rcc +endif + +ifeq ($(platform),x) + qtinc := `pkg-config --cflags QtCore QtGui` + qtlib := `pkg-config --libs QtCore QtGui` +else ifeq ($(platform),osx) + qtinc := -I/Library/Frameworks/QtCore.framework/Versions/4/Headers + qtinc += -I/Library/Frameworks/QtGui.framework/Versions/4/Headers + qtinc += -I/Library/Frameworks/QtOpenGL.framework/Versions/4/Headers + + qtlib := -L/Library/Frameworks + qtlib += -framework QtCore + qtlib += -framework QtGui + qtlib += -framework QtOpenGL + qtlib += -framework Carbon + qtlib += -framework Cocoa + qtlib += -framework OpenGL + qtlib += -framework AppKit + qtlib += -framework ApplicationServices +else ifeq ($(platform),win) + ifeq ($(qtpath),) + # find Qt install directory from PATH environment variable + qtpath := $(foreach path,$(subst ;, ,$(PATH)),$(if $(wildcard $(path)/$(moc).exe),$(path))) + qtpath := $(strip $(qtpath)) + qtpath := $(subst \,/,$(qtpath)) + qtpath := $(patsubst %/bin,%,$(qtpath)) + endif + + qtinc := -I$(qtpath)/include + qtinc += -I$(qtpath)/include/QtCore + qtinc += -I$(qtpath)/include/QtGui + + qtlib := -L$(qtpath)/lib + qtlib += -L$(qtpath)/plugins/imageformats + + qtlib += -lmingw32 -lqtmain -lQtGui4 -lcomdlg32 -loleaut32 -limm32 -lwinmm + qtlib += -lwinspool -lmsimg32 -lQtCore4 -lole32 -ladvapi32 -lws2_32 -luuid -lgdi32 + + # optional image-file support: + # qtlib += -lqjpeg -lqmng +endif diff --git a/snesreader/nall/algorithm.hpp b/snesreader/nall/algorithm.hpp new file mode 100644 index 00000000..98b39528 --- /dev/null +++ b/snesreader/nall/algorithm.hpp @@ -0,0 +1,23 @@ +#ifndef NALL_ALGORITHM_HPP +#define NALL_ALGORITHM_HPP + +#undef min +#undef max + +namespace nall { + template T min(const T& t, const U& u) { + return t < u ? t : u; + } + + template T max(const T& t, const U& u) { + return t > u ? t : u; + } + + //pseudo-random number generator + inline unsigned prng() { + static unsigned n = 0; + return n = (n >> 1) ^ (((n & 1) - 1) & 0xedb88320); + } +} + +#endif diff --git a/snesreader/nall/any.hpp b/snesreader/nall/any.hpp new file mode 100644 index 00000000..9689af13 --- /dev/null +++ b/snesreader/nall/any.hpp @@ -0,0 +1,74 @@ +#ifndef NALL_ANY_HPP +#define NALL_ANY_HPP + +#include +#include +#include + +namespace nall { + class any { + public: + bool empty() const { return container; } + const std::type_info& type() const { return container ? container->type() : typeid(void); } + + template any& operator=(const T& value_) { + typedef typename static_if< + is_array::value, + typename remove_extent::type>::type*, + T + >::type auto_t; + + if(type() == typeid(auto_t)) { + static_cast*>(container)->value = (auto_t)value_; + } else { + if(container) delete container; + container = new holder((auto_t)value_); + } + + return *this; + } + + any() : container(0) {} + template any(const T& value_) : container(0) { operator=(value_); } + + private: + struct placeholder { + virtual const std::type_info& type() const = 0; + } *container; + + template struct holder : placeholder { + T value; + const std::type_info& type() const { return typeid(T); } + holder(const T& value_) : value(value_) {} + }; + + template friend T any_cast(any&); + template friend T any_cast(const any&); + template friend T* any_cast(any*); + template friend const T* any_cast(const any*); + }; + + template T any_cast(any &value) { + typedef typename remove_reference::type nonref; + if(value.type() != typeid(nonref)) throw; + return static_cast*>(value.container)->value; + } + + template T any_cast(const any &value) { + typedef const typename remove_reference::type nonref; + if(value.type() != typeid(nonref)) throw; + return static_cast*>(value.container)->value; + } + + template T* any_cast(any *value) { + if(!value || value->type() != typeid(T)) return 0; + return &static_cast*>(value->container)->value; + } + + template const T* any_cast(const any *value) { + if(!value || value->type() != typeid(T)) return 0; + return &static_cast*>(value->container)->value; + } +} + +#endif diff --git a/snesreader/nall/array.hpp b/snesreader/nall/array.hpp new file mode 100644 index 00000000..50a03f66 --- /dev/null +++ b/snesreader/nall/array.hpp @@ -0,0 +1,94 @@ +#ifndef NALL_ARRAY_HPP +#define NALL_ARRAY_HPP + +#include +#include +#include + +namespace nall { + //dynamic vector array + //neither constructor nor destructor is ever invoked; + //thus, this should only be used for POD objects. + template class array { + protected: + T *pool; + unsigned poolsize, buffersize; + + public: + unsigned size() const { return buffersize; } + unsigned capacity() const { return poolsize; } + + void reset() { + if(pool) free(pool); + pool = 0; + poolsize = 0; + buffersize = 0; + } + + void reserve(unsigned newsize) { + if(newsize == poolsize) return; + + pool = (T*)realloc(pool, newsize * sizeof(T)); + poolsize = newsize; + buffersize = min(buffersize, newsize); + } + + void resize(unsigned newsize) { + if(newsize > poolsize) reserve(bit::round(newsize)); //round reserve size up to power of 2 + buffersize = newsize; + } + + T* get(unsigned minsize = 0) { + if(minsize > buffersize) resize(minsize); + if(minsize > buffersize) throw "array[] out of bounds"; + return pool; + } + + void add(const T data) { + operator[](buffersize) = data; + } + + signed find(const T data) { + for(unsigned i = 0; i < size(); i++) if(pool[i] == data) return i; + return -1; //not found + } + + void clear() { + memset(pool, 0, buffersize * sizeof(T)); + } + + array() { + pool = 0; + poolsize = 0; + buffersize = 0; + } + + ~array() { reset(); } + + array(const array &source) : pool(0) { + operator=(source); + } + + array& operator=(const array &source) { + if(pool) free(pool); + buffersize = source.buffersize; + poolsize = source.poolsize; + pool = (T*)malloc(sizeof(T) * poolsize); //allocate entire pool size, + memcpy(pool, source.pool, sizeof(T) * buffersize); //... but only copy used pool objects + return *this; + } + + inline T& operator[](unsigned index) { + if(index >= buffersize) resize(index + 1); + if(index >= buffersize) throw "array[] out of bounds"; + return pool[index]; + } + + inline const T& operator[](unsigned index) const { + if(index >= buffersize) throw "array[] out of bounds"; + return pool[index]; + } + }; +} + +#endif diff --git a/snesreader/nall/base64.hpp b/snesreader/nall/base64.hpp new file mode 100644 index 00000000..e41c87b7 --- /dev/null +++ b/snesreader/nall/base64.hpp @@ -0,0 +1,90 @@ +#ifndef NALL_BASE64_HPP +#define NALL_BASE64_HPP + +#include +#include + +namespace nall { + class base64 { + public: + static bool encode(char *&output, const uint8_t* input, unsigned inlength) { + output = new char[inlength * 8 / 6 + 6](); + + unsigned i = 0, o = 0; + while(i < inlength) { + switch(i % 3) { + case 0: { + output[o++] = enc(input[i] >> 2); + output[o] = enc((input[i] & 3) << 4); + } break; + + case 1: { + uint8_t prev = dec(output[o]); + output[o++] = enc(prev + (input[i] >> 4)); + output[o] = enc((input[i] & 15) << 2); + } break; + + case 2: { + uint8_t prev = dec(output[o]); + output[o++] = enc(prev + (input[i] >> 6)); + output[o++] = enc(input[i] & 63); + } break; + } + + i++; + } + + return true; + } + + static bool decode(uint8_t *&output, unsigned &outlength, const char *input) { + unsigned inlength = strlen(input), infix = 0; + output = new uint8_t[inlength](); + + unsigned i = 0, o = 0; + while(i < inlength) { + uint8_t x = dec(input[i]); + + switch(i++ & 3) { + case 0: { + output[o] = x << 2; + } break; + + case 1: { + output[o++] |= x >> 4; + output[o] = (x & 15) << 4; + } break; + + case 2: { + output[o++] |= x >> 2; + output[o] = (x & 3) << 6; + } break; + + case 3: { + output[o++] |= x; + } break; + } + } + + outlength = o; + return true; + } + + private: + static char enc(uint8_t n) { + static char lookup_table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; + return lookup_table[n & 63]; + } + + static uint8_t dec(char n) { + if(n >= 'A' && n <= 'Z') return n - 'A'; + if(n >= 'a' && n <= 'z') return n - 'a' + 26; + if(n >= '0' && n <= '9') return n - '0' + 52; + if(n == '-') return 62; + if(n == '_') return 63; + return 0; + } + }; +} + +#endif diff --git a/snesreader/nall/bit.hpp b/snesreader/nall/bit.hpp new file mode 100644 index 00000000..169fc144 --- /dev/null +++ b/snesreader/nall/bit.hpp @@ -0,0 +1,51 @@ +#ifndef NALL_BIT_HPP +#define NALL_BIT_HPP + +namespace nall { + template inline unsigned uclamp(const unsigned x) { + enum { y = (1U << bits) - 1 }; + return y + ((x - y) & -(x < y)); //min(x, y); + } + + template inline unsigned uclip(const unsigned x) { + enum { m = (1U << bits) - 1 }; + return (x & m); + } + + template inline signed sclamp(const signed x) { + enum { b = 1U << (bits - 1), m = (1U << (bits - 1)) - 1 }; + return (x > m) ? m : (x < -b) ? -b : x; + } + + template inline signed sclip(const signed x) { + enum { b = 1U << (bits - 1), m = (1U << bits) - 1 }; + return ((x & m) ^ b) - b; + } + + namespace bit { + //lowest(0b1110) == 0b0010 + template inline T lowest(const T x) { + return x & -x; + } + + //clear_lowest(0b1110) == 0b1100 + template inline T clear_lowest(const T x) { + return x & (x - 1); + } + + //set_lowest(0b0101) == 0b0111 + template inline T set_lowest(const T x) { + return x | (x + 1); + } + + //round up to next highest single bit: + //round(15) == 16, round(16) == 16, round(17) == 32 + inline unsigned round(unsigned x) { + if((x & (x - 1)) == 0) return x; + while(x & (x - 1)) x &= x - 1; + return x << 1; + } + } +} + +#endif diff --git a/snesreader/nall/config.hpp b/snesreader/nall/config.hpp new file mode 100644 index 00000000..10494e65 --- /dev/null +++ b/snesreader/nall/config.hpp @@ -0,0 +1,124 @@ +#ifndef NALL_CONFIG_HPP +#define NALL_CONFIG_HPP + +#include +#include +#include + +namespace nall { + namespace configuration_traits { + template struct is_boolean { enum { value = false }; }; + template<> struct is_boolean { enum { value = true }; }; + + template struct is_signed { enum { value = false }; }; + template<> struct is_signed { enum { value = true }; }; + + template struct is_unsigned { enum { value = false }; }; + template<> struct is_unsigned { enum { value = true }; }; + + template struct is_double { enum { value = false }; }; + template<> struct is_double { enum { value = true }; }; + + template struct is_string { enum { value = false }; }; + template<> struct is_string { enum { value = true }; }; + } + + class configuration { + public: + enum type_t { boolean_t, signed_t, unsigned_t, double_t, string_t, unknown_t }; + struct item_t { + uintptr_t data; + string name; + string desc; + type_t type; + + string get() const { + switch(type) { + case boolean_t: return string() << *(bool*)data; + case signed_t: return string() << *(signed*)data; + case unsigned_t: return string() << *(unsigned*)data; + case double_t: return string() << *(double*)data; + case string_t: return string() << "\"" << *(string*)data << "\""; + } + return "???"; + } + + void set(string s) { + switch(type) { + case boolean_t: *(bool*)data = (s == "true"); break; + case signed_t: *(signed*)data = strsigned(s); break; + case unsigned_t: *(unsigned*)data = strunsigned(s); break; + case double_t: *(double*)data = strdouble(s); break; + case string_t: trim(s, "\""); *(string*)data = s; break; + } + } + }; + vector list; + + template + void attach(T &data, const char *name, const char *desc = "") { + unsigned n = list.size(); + list[n].data = (uintptr_t)&data; + list[n].name = name; + list[n].desc = desc; + + if(configuration_traits::is_boolean::value) list[n].type = boolean_t; + else if(configuration_traits::is_signed::value) list[n].type = signed_t; + else if(configuration_traits::is_unsigned::value) list[n].type = unsigned_t; + else if(configuration_traits::is_double::value) list[n].type = double_t; + else if(configuration_traits::is_string::value) list[n].type = string_t; + else list[n].type = unknown_t; + } + + virtual bool load(const char *filename) { + string data; + if(data.readfile(filename) == true) { + data.replace("\r", ""); + lstring line; + line.split("\n", data); + + for(unsigned i = 0; i < line.size(); i++) { + int position = qstrpos(line[i], "#"); + if(position >= 0) line[i][position] = 0; + if(qstrpos(line[i], " = ") < 0) continue; + + lstring part; + part.qsplit(" = ", line[i]); + trim(part[0]); + trim(part[1]); + + for(unsigned n = 0; n < list.size(); n++) { + if(part[0] == list[n].name) { + list[n].set(part[1]); + break; + } + } + } + + return true; + } else { + return false; + } + } + + virtual bool save(const char *filename) const { + file fp; + if(fp.open(filename, file::mode_write)) { + for(unsigned i = 0; i < list.size(); i++) { + string output; + output << list[i].name << " = " << list[i].get(); + if(list[i].desc != "") output << " # " << list[i].desc; + output << "\r\n"; + fp.print(output); + } + + fp.close(); + return true; + } else { + return false; + } + } + }; +} + +#endif diff --git a/snesreader/nall/crc32.hpp b/snesreader/nall/crc32.hpp new file mode 100644 index 00000000..ad36fbf6 --- /dev/null +++ b/snesreader/nall/crc32.hpp @@ -0,0 +1,66 @@ +#ifndef NALL_CRC32_HPP +#define NALL_CRC32_HPP + +#include + +namespace nall { + const uint32_t crc32_table[256] = { + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, + 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, + 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, + 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, + 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, + 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, + 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, + 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, + 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, + 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, + 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, + 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, + 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, + 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, + 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, + 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, + 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, + 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, + 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, + 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, + 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, + 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, + 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, + 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, + 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, + 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, + 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, + 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, + 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, + 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, + 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, + 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, + 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, + 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, + 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d + }; + + inline uint32_t crc32_adjust(uint32_t crc32, uint8_t input) { + return ((crc32 >> 8) & 0x00ffffff) ^ crc32_table[(crc32 ^ input) & 0xff]; + } + + inline uint32_t crc32_calculate(const uint8_t *data, unsigned length) { + uint32_t crc32 = ~0; + for(unsigned i = 0; i < length; i++) { + crc32 = crc32_adjust(crc32, data[i]); + } + return ~crc32; + } +} + +#endif diff --git a/snesreader/nall/detect.hpp b/snesreader/nall/detect.hpp new file mode 100644 index 00000000..b4991aaf --- /dev/null +++ b/snesreader/nall/detect.hpp @@ -0,0 +1,30 @@ +#ifndef NALL_DETECT_HPP +#define NALL_DETECT_HPP + +/* Compiler detection */ + +#if defined(__GNUC__) + #define COMPILER_GCC +#elif defined(_MSC_VER) + #define COMPILER_VISUALC +#endif + +/* Platform detection */ + +#if defined(_WIN32) + #define PLATFORM_WIN +#elif defined(__APPLE__) + #define PLATFORM_OSX +#elif defined(linux) || defined(__sun__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) + #define PLATFORM_X +#endif + +/* Endian detection */ + +#if defined(__i386__) || defined(__amd64__) || defined(_M_IX86) || defined(_M_AMD64) + #define ARCH_LSB +#elif defined(__powerpc__) || defined(_M_PPC) || defined(__BIG_ENDIAN__) + #define ARCH_MSB +#endif + +#endif diff --git a/snesreader/nall/dictionary.hpp b/snesreader/nall/dictionary.hpp new file mode 100644 index 00000000..35128c2f --- /dev/null +++ b/snesreader/nall/dictionary.hpp @@ -0,0 +1,73 @@ +#ifndef NALL_DICTIONARY_HPP +#define NALL_DICTIONARY_HPP + +#include +#include +#include + +namespace nall { + class dictionary : noncopyable { + public: + string operator[](const char *input) { + for(unsigned i = 0; i < index_input.size(); i++) { + if(index_input[i] == input) return index_output[i]; + } + + //no match, use input; remove input identifier, if one exists + if(strbegin(input, "{{")) { + int pos = strpos(input, "}}"); + if(pos >= 0) { + string temp = substr(input, pos + 2); + return temp; + } + } + + return input; + } + + bool import(const char *filename) { + string data; + if(data.readfile(filename) == false) return false; + ltrim_once(data, "\xef\xbb\xbf"); //remove UTF-8 marker, if it exists + data.replace("\r", ""); + + lstring line; + line.split("\n", data); + for(unsigned i = 0; i < line.size(); i++) { + lstring part; + //format: "Input" = "Output" + part.qsplit("=", line[i]); + if(part.size() != 2) continue; + + //remove whitespace + trim(part[0]); + trim(part[1]); + + //remove quotes + trim_once(part[0], "\""); + trim_once(part[1], "\""); + + unsigned n = index_input.size(); + index_input[n] = part[0]; + index_output[n] = part[1]; + } + + return true; + } + + void reset() { + index_input.reset(); + index_output.reset(); + } + + ~dictionary() { + reset(); + } + + protected: + lstring index_input; + lstring index_output; + }; +} + +#endif diff --git a/snesreader/nall/dl.hpp b/snesreader/nall/dl.hpp new file mode 100644 index 00000000..4048a50a --- /dev/null +++ b/snesreader/nall/dl.hpp @@ -0,0 +1,88 @@ +#ifndef NALL_DL_HPP +#define NALL_DL_HPP + +//dynamic linking support + +#include +#include +#include +#include + +#if defined(PLATFORM_X) + #include +#elif defined(PLATFORM_WIN) + #include + #include +#endif + +namespace nall { + struct library : noncopyable { + bool opened() const { return handle; } + bool open(const char*); + void* sym(const char*); + void close(); + + library() : handle(0) {} + ~library() { close(); } + + private: + uintptr_t handle; + }; + + #if defined(PLATFORM_X) + inline bool library::open(const char *name) { + if(handle) close(); + char *t = new char[strlen(name) + 256]; + strcpy(t, "lib"); + strcat(t, name); + strcat(t, ".so"); + handle = (uintptr_t)dlopen(t, RTLD_LAZY); + if(!handle) { + strcpy(t, "/usr/local/lib/lib"); + strcat(t, name); + strcat(t, ".so"); + handle = (uintptr_t)dlopen(t, RTLD_LAZY); + } + delete[] t; + return handle; + } + + inline void* library::sym(const char *name) { + if(!handle) return 0; + return dlsym((void*)handle, name); + } + + inline void library::close() { + if(!handle) return; + dlclose((void*)handle); + handle = 0; + } + #elif defined(PLATFORM_WIN) + inline bool library::open(const char *name) { + if(handle) close(); + char *t = new char[strlen(name) + 8]; + strcpy(t, name); + strcat(t, ".dll"); + handle = (uintptr_t)LoadLibraryW(utf16_t(t)); + delete[] t; + return handle; + } + + inline void* library::sym(const char *name) { + if(!handle) return 0; + return (void*)GetProcAddress((HMODULE)handle, name); + } + + inline void library::close() { + if(!handle) return; + FreeLibrary((HMODULE)handle); + handle = 0; + } + #else + inline bool library::open(const char*) { return false; } + inline void* library::sym(const char*) { return 0; } + inline void library::close() {} + #endif +}; + +#endif diff --git a/snesreader/nall/endian.hpp b/snesreader/nall/endian.hpp new file mode 100644 index 00000000..40d15633 --- /dev/null +++ b/snesreader/nall/endian.hpp @@ -0,0 +1,38 @@ +#ifndef NALL_ENDIAN_HPP +#define NALL_ENDIAN_HPP + +#if !defined(ARCH_MSB) + //little-endian: uint8_t[] { 0x01, 0x02, 0x03, 0x04 } == 0x04030201 + #define order_lsb2(a,b) a,b + #define order_lsb3(a,b,c) a,b,c + #define order_lsb4(a,b,c,d) a,b,c,d + #define order_lsb5(a,b,c,d,e) a,b,c,d,e + #define order_lsb6(a,b,c,d,e,f) a,b,c,d,e,f + #define order_lsb7(a,b,c,d,e,f,g) a,b,c,d,e,f,g + #define order_lsb8(a,b,c,d,e,f,g,h) a,b,c,d,e,f,g,h + #define order_msb2(a,b) b,a + #define order_msb3(a,b,c) c,b,a + #define order_msb4(a,b,c,d) d,c,b,a + #define order_msb5(a,b,c,d,e) e,d,c,b,a + #define order_msb6(a,b,c,d,e,f) f,e,d,c,b,a + #define order_msb7(a,b,c,d,e,f,g) g,f,e,d,c,b,a + #define order_msb8(a,b,c,d,e,f,g,h) h,g,f,e,d,c,b,a +#else + //big-endian: uint8_t[] { 0x01, 0x02, 0x03, 0x04 } == 0x01020304 + #define order_lsb2(a,b) b,a + #define order_lsb3(a,b,c) c,b,a + #define order_lsb4(a,b,c,d) d,c,b,a + #define order_lsb5(a,b,c,d,e) e,d,c,b,a + #define order_lsb6(a,b,c,d,e,f) f,e,d,c,b,a + #define order_lsb7(a,b,c,d,e,f,g) g,f,e,d,c,b,a + #define order_lsb8(a,b,c,d,e,f,g,h) h,g,f,e,d,c,b,a + #define order_msb2(a,b) a,b + #define order_msb3(a,b,c) a,b,c + #define order_msb4(a,b,c,d) a,b,c,d + #define order_msb5(a,b,c,d,e) a,b,c,d,e + #define order_msb6(a,b,c,d,e,f) a,b,c,d,e,f + #define order_msb7(a,b,c,d,e,f,g) a,b,c,d,e,f,g + #define order_msb8(a,b,c,d,e,f,g,h) a,b,c,d,e,f,g,h +#endif + +#endif diff --git a/snesreader/nall/file.hpp b/snesreader/nall/file.hpp new file mode 100644 index 00000000..29be589c --- /dev/null +++ b/snesreader/nall/file.hpp @@ -0,0 +1,256 @@ +#ifndef NALL_FILE_HPP +#define NALL_FILE_HPP + +#include +#include + +#if !defined(_WIN32) + #include +#else + #include +#endif + +#include +#include +#include + +namespace nall { + inline FILE* fopen_utf8(const char *utf8_filename, const char *mode) { + #if !defined(_WIN32) + return fopen(utf8_filename, mode); + #else + return _wfopen(utf16_t(utf8_filename), utf16_t(mode)); + #endif + } + + class file : noncopyable { + public: + enum FileMode { mode_read, mode_write, mode_readwrite, mode_writeread }; + enum SeekMode { seek_absolute, seek_relative }; + + uint8_t read() { + if(!fp) return 0xff; //file not open + if(file_mode == mode_write) return 0xff; //reads not permitted + if(file_offset >= file_size) return 0xff; //cannot read past end of file + buffer_sync(); + return buffer[(file_offset++) & buffer_mask]; + } + + uintmax_t readl(unsigned length = 1) { + uintmax_t data = 0; + for(int i = 0; i < length; i++) { + data |= (uintmax_t)read() << (i << 3); + } + return data; + } + + uintmax_t readm(unsigned length = 1) { + uintmax_t data = 0; + while(length--) { + data <<= 8; + data |= read(); + } + return data; + } + + void read(uint8_t *buffer, unsigned length) { + while(length--) *buffer++ = read(); + } + + void write(uint8_t data) { + if(!fp) return; //file not open + if(file_mode == mode_read) return; //writes not permitted + buffer_sync(); + buffer[(file_offset++) & buffer_mask] = data; + buffer_dirty = true; + if(file_offset > file_size) file_size = file_offset; + } + + void writel(uintmax_t data, unsigned length = 1) { + while(length--) { + write(data); + data >>= 8; + } + } + + void writem(uintmax_t data, unsigned length = 1) { + for(int i = length - 1; i >= 0; i--) { + write(data >> (i << 3)); + } + } + + void write(const uint8_t *buffer, unsigned length) { + while(length--) write(*buffer++); + } + + void print(const char *string) { + if(!string) return; + while(*string) write(*string++); + } + + void flush() { + buffer_flush(); + fflush(fp); + } + + void seek(int offset, SeekMode mode = seek_absolute) { + if(!fp) return; //file not open + buffer_flush(); + + uintmax_t req_offset = file_offset; + switch(mode) { + case seek_absolute: req_offset = offset; break; + case seek_relative: req_offset += offset; break; + } + + if(req_offset < 0) req_offset = 0; //cannot seek before start of file + if(req_offset > file_size) { + if(file_mode == mode_read) { //cannot seek past end of file + req_offset = file_size; + } else { //pad file to requested location + file_offset = file_size; + while(file_size < req_offset) write(0x00); + } + } + + file_offset = req_offset; + } + + int offset() { + if(!fp) return -1; //file not open + return file_offset; + } + + int size() { + if(!fp) return -1; //file not open + return file_size; + } + + bool truncate(unsigned size) { + if(!fp) return false; //file not open + #if !defined(_WIN32) + return ftruncate(fileno(fp), size) == 0; + #else + return _chsize(fileno(fp), size) == 0; + #endif + } + + bool end() { + if(!fp) return true; //file not open + return file_offset >= file_size; + } + + static bool exists(const char *fn) { + #if !defined(_WIN32) + FILE *fp = fopen(fn, "rb"); + #else + FILE *fp = _wfopen(utf16_t(fn), L"rb"); + #endif + if(fp) { + fclose(fp); + return true; + } + return false; + } + + static unsigned size(const char *fn) { + #if !defined(_WIN32) + FILE *fp = fopen(fn, "rb"); + #else + FILE *fp = _wfopen(utf16_t(fn), L"rb"); + #endif + unsigned filesize = 0; + if(fp) { + fseek(fp, 0, SEEK_END); + filesize = ftell(fp); + fclose(fp); + } + return filesize; + } + + bool open() { + return fp; + } + + bool open(const char *fn, FileMode mode) { + if(fp) return false; + + switch(file_mode = mode) { + #if !defined(_WIN32) + case mode_read: fp = fopen(fn, "rb"); break; + case mode_write: fp = fopen(fn, "wb+"); break; //need read permission for buffering + case mode_readwrite: fp = fopen(fn, "rb+"); break; + case mode_writeread: fp = fopen(fn, "wb+"); break; + #else + case mode_read: fp = _wfopen(utf16_t(fn), L"rb"); break; + case mode_write: fp = _wfopen(utf16_t(fn), L"wb+"); break; + case mode_readwrite: fp = _wfopen(utf16_t(fn), L"rb+"); break; + case mode_writeread: fp = _wfopen(utf16_t(fn), L"wb+"); break; + #endif + } + if(!fp) return false; + buffer_offset = -1; //invalidate buffer + file_offset = 0; + fseek(fp, 0, SEEK_END); + file_size = ftell(fp); + fseek(fp, 0, SEEK_SET); + return true; + } + + void close() { + if(!fp) return; + buffer_flush(); + fclose(fp); + fp = 0; + } + + file() { + memset(buffer, 0, sizeof buffer); + buffer_offset = -1; + buffer_dirty = false; + fp = 0; + file_offset = 0; + file_size = 0; + file_mode = mode_read; + } + + ~file() { + close(); + } + + private: + enum { buffer_size = 1 << 12, buffer_mask = buffer_size - 1 }; + char buffer[buffer_size]; + int buffer_offset; + bool buffer_dirty; + FILE *fp; + unsigned file_offset; + unsigned file_size; + FileMode file_mode; + + void buffer_sync() { + if(!fp) return; //file not open + if(buffer_offset != (file_offset & ~buffer_mask)) { + buffer_flush(); + buffer_offset = file_offset & ~buffer_mask; + fseek(fp, buffer_offset, SEEK_SET); + unsigned length = (buffer_offset + buffer_size) <= file_size ? buffer_size : (file_size & buffer_mask); + if(length) unsigned unused = fread(buffer, 1, length, fp); + } + } + + void buffer_flush() { + if(!fp) return; //file not open + if(file_mode == mode_read) return; //buffer cannot be written to + if(buffer_offset < 0) return; //buffer unused + if(buffer_dirty == false) return; //buffer unmodified since read + fseek(fp, buffer_offset, SEEK_SET); + unsigned length = (buffer_offset + buffer_size) <= file_size ? buffer_size : (file_size & buffer_mask); + if(length) unsigned unused = fwrite(buffer, 1, length, fp); + buffer_offset = -1; //invalidate buffer + buffer_dirty = false; + } + }; +} + +#endif diff --git a/snesreader/nall/filemap.hpp b/snesreader/nall/filemap.hpp new file mode 100644 index 00000000..a05f0eb7 --- /dev/null +++ b/snesreader/nall/filemap.hpp @@ -0,0 +1,190 @@ +#ifndef NALL_FILEMAP_HPP +#define NALL_FILEMAP_HPP + +#include +#include + +#include +#include +#if defined(_WIN32) + #include +#else + #include + #include + #include + #include + #include +#endif + +namespace nall { + class filemap { + public: + enum filemode { mode_read, mode_write, mode_readwrite, mode_writeread }; + + bool open(const char *filename, filemode mode) { return p_open(filename, mode); } + void close() { return p_close(); } + unsigned size() const { return p_size; } + uint8_t* handle() { return p_handle; } + const uint8_t* handle() const { return p_handle; } + filemap() : p_size(0), p_handle(0) { p_ctor(); } + ~filemap() { p_dtor(); } + + private: + unsigned p_size; + uint8_t *p_handle; + + #if defined(_WIN32) + //============= + //MapViewOfFile + //============= + + HANDLE p_filehandle, p_maphandle; + + bool p_open(const char *filename, filemode mode) { + int desired_access, creation_disposition, flprotect, map_access; + + switch(mode) { + default: return false; + case mode_read: + desired_access = GENERIC_READ; + creation_disposition = OPEN_EXISTING; + flprotect = PAGE_READONLY; + map_access = FILE_MAP_READ; + break; + case mode_write: + //write access requires read access + desired_access = GENERIC_WRITE; + creation_disposition = CREATE_ALWAYS; + flprotect = PAGE_READWRITE; + map_access = FILE_MAP_ALL_ACCESS; + break; + case mode_readwrite: + desired_access = GENERIC_READ | GENERIC_WRITE; + creation_disposition = OPEN_EXISTING; + flprotect = PAGE_READWRITE; + map_access = FILE_MAP_ALL_ACCESS; + break; + case mode_writeread: + desired_access = GENERIC_READ | GENERIC_WRITE; + creation_disposition = CREATE_NEW; + flprotect = PAGE_READWRITE; + map_access = FILE_MAP_ALL_ACCESS; + break; + } + + p_filehandle = CreateFileW(utf16_t(filename), desired_access, FILE_SHARE_READ, NULL, + creation_disposition, FILE_ATTRIBUTE_NORMAL, NULL); + if(p_filehandle == INVALID_HANDLE_VALUE) return false; + + p_size = GetFileSize(p_filehandle, NULL); + + p_maphandle = CreateFileMapping(p_filehandle, NULL, flprotect, 0, p_size, NULL); + if(p_maphandle == INVALID_HANDLE_VALUE) { + CloseHandle(p_filehandle); + p_filehandle = INVALID_HANDLE_VALUE; + return false; + } + + p_handle = (uint8_t*)MapViewOfFile(p_maphandle, map_access, 0, 0, p_size); + return p_handle; + } + + void p_close() { + if(p_handle) { + UnmapViewOfFile(p_handle); + p_handle = 0; + } + + if(p_maphandle != INVALID_HANDLE_VALUE) { + CloseHandle(p_maphandle); + p_maphandle = INVALID_HANDLE_VALUE; + } + + if(p_filehandle != INVALID_HANDLE_VALUE) { + CloseHandle(p_filehandle); + p_filehandle = INVALID_HANDLE_VALUE; + } + } + + void p_ctor() { + p_filehandle = INVALID_HANDLE_VALUE; + p_maphandle = INVALID_HANDLE_VALUE; + } + + void p_dtor() { + close(); + } + + #else + //==== + //mmap + //==== + + int p_fd; + + bool p_open(const char *filename, filemode mode) { + int open_flags, mmap_flags; + + switch(mode) { + default: return false; + case mode_read: + open_flags = O_RDONLY; + mmap_flags = PROT_READ; + break; + case mode_write: + open_flags = O_RDWR | O_CREAT; //mmap() requires read access + mmap_flags = PROT_WRITE; + break; + case mode_readwrite: + open_flags = O_RDWR; + mmap_flags = PROT_READ | PROT_WRITE; + break; + case mode_writeread: + open_flags = O_RDWR | O_CREAT; + mmap_flags = PROT_READ | PROT_WRITE; + break; + } + + p_fd = ::open(filename, open_flags); + if(p_fd < 0) return false; + + struct stat p_stat; + fstat(p_fd, &p_stat); + p_size = p_stat.st_size; + + p_handle = (uint8_t*)mmap(0, p_size, mmap_flags, MAP_SHARED, p_fd, 0); + if(p_handle == MAP_FAILED) { + p_handle = 0; + ::close(p_fd); + p_fd = -1; + return false; + } + + return p_handle; + } + + void p_close() { + if(p_handle) { + munmap(p_handle, p_size); + p_handle = 0; + } + + if(p_fd >= 0) { + ::close(p_fd); + p_fd = -1; + } + } + + void p_ctor() { + p_fd = -1; + } + + void p_dtor() { + p_close(); + } + + #endif + }; +} + +#endif diff --git a/snesreader/nall/function.hpp b/snesreader/nall/function.hpp new file mode 100644 index 00000000..79195f70 --- /dev/null +++ b/snesreader/nall/function.hpp @@ -0,0 +1,190 @@ +#ifndef NALL_FUNCTION_HPP +#define NALL_FUNCTION_HPP + +#include + +//prologue + +#define TN typename + +namespace nall { + template class function; +} + +//parameters = 0 + +#define cat(n) n +#define TL typename R +#define PL +#define CL + +#include "function.hpp" + +//parameters = 1 + +#define cat(n) , n +#define TL TN R, TN P1 +#define PL P1 p1 +#define CL p1 + +#include "function.hpp" + +//parameters = 2 + +#define cat(n) , n +#define TL TN R, TN P1, TN P2 +#define PL P1 p1, P2 p2 +#define CL p1, p2 + +#include "function.hpp" + +//parameters = 3 + +#define cat(n) , n +#define TL TN R, TN P1, TN P2, TN P3 +#define PL P1 p1, P2 p2, P3 p3 +#define CL p1, p2, p3 + +#include "function.hpp" + +//parameters = 4 + +#define cat(n) , n +#define TL TN R, TN P1, TN P2, TN P3, TN P4 +#define PL P1 p1, P2 p2, P3 p3, P4 p4 +#define CL p1, p2, p3, p4 + +#include "function.hpp" + +//parameters = 5 + +#define cat(n) , n +#define TL TN R, TN P1, TN P2, TN P3, TN P4, TN P5 +#define PL P1 p1, P2 p2, P3 p3, P4 p4, P5 p5 +#define CL p1, p2, p3, p4, p5 + +#include "function.hpp" + +//parameters = 6 + +#define cat(n) , n +#define TL TN R, TN P1, TN P2, TN P3, TN P4, TN P5, TN P6 +#define PL P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6 +#define CL p1, p2, p3, p4, p5, p6 + +#include "function.hpp" + +//parameters = 7 + +#define cat(n) , n +#define TL TN R, TN P1, TN P2, TN P3, TN P4, TN P5, TN P6, TN P7 +#define PL P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7 +#define CL p1, p2, p3, p4, p5, p6, p7 + +#include "function.hpp" + +//parameters = 8 + +#define cat(n) , n +#define TL TN R, TN P1, TN P2, TN P3, TN P4, TN P5, TN P6, TN P7, TN P8 +#define PL P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8 +#define CL p1, p2, p3, p4, p5, p6, p7, p8 + +#include "function.hpp" + +//epilogue + +#undef TN +#define NALL_FUNCTION_T + +#elif !defined(NALL_FUNCTION_T) + +//function implementation template class + +namespace nall { + template + class function { + private: + struct base1 { virtual void func1(PL) {} }; + struct base2 { virtual void func2(PL) {} }; + struct derived : base1, virtual base2 {}; + + struct data_t { + R (*fn_call)(const data_t& cat(PL)); + union { + R (*fn_global)(PL); + struct { + R (derived::*fn_member)(PL); + void *object; + }; + }; + } data; + + static R fn_call_global(const data_t &d cat(PL)) { + return d.fn_global(CL); + } + + template + static R fn_call_member(const data_t &d cat(PL)) { + return (((C*)d.object)->*((R (C::*&)(PL))d.fn_member))(CL); + } + + public: + R operator()(PL) const { return data.fn_call(data cat(CL)); } + operator bool() const { return data.fn_call; } + + function() { data.fn_call = 0; } + + function(void *fn) { + data.fn_call = &fn_call_global; + data.fn_global = (R (*)(PL))fn; + } + + function(R (*fn)(PL)) { + data.fn_call = &fn_call_global; + data.fn_global = fn; + } + + template + function(R (C::*fn)(PL), C *obj) { + data.fn_call = &fn_call_member; + (R (C::*&)(PL))data.fn_member = fn; + assert(sizeof data.fn_member >= sizeof fn); + data.object = obj; + } + + template + function(R (C::*fn)(PL) const, C *obj) { + data.fn_call = &fn_call_member; + (R (C::*&)(PL))data.fn_member = (R (C::*&)(PL))fn; + assert(sizeof data.fn_member >= sizeof fn); + data.object = obj; + } + + function& operator=(void *fn) { return operator=(function(fn)); } + function& operator=(const function &source) { memcpy(&data, &source.data, sizeof(data_t)); return *this; } + function(const function &source) { memcpy(&data, &source.data, sizeof(data_t)); } + }; + + template + function bind(R (*fn)(PL)) { + return function(fn); + } + + template + function bind(R (C::*fn)(PL), C *obj) { + return function(fn, obj); + } + + template + function bind(R (C::*fn)(PL) const, C *obj) { + return function(fn, obj); + } +} + +#undef cat +#undef TL +#undef PL +#undef CL + +#endif diff --git a/snesreader/nall/input.hpp b/snesreader/nall/input.hpp new file mode 100644 index 00000000..b3ce9ebf --- /dev/null +++ b/snesreader/nall/input.hpp @@ -0,0 +1,386 @@ +#ifndef NALL_INPUT_HPP +#define NALL_INPUT_HPP + +#include +#include +#include + +#include +#include + +namespace nall { + +struct Keyboard; +Keyboard& keyboard(unsigned = 0); + +static const char KeyboardScancodeName[][64] = { + "Escape", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", + "PrintScreen", "ScrollLock", "Pause", "Tilde", + "Num1", "Num2", "Num3", "Num4", "Num5", "Num6", "Num7", "Num8", "Num9", "Num0", + "Dash", "Equal", "Backspace", + "Insert", "Delete", "Home", "End", "PageUp", "PageDown", + "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", + "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", + "LeftBracket", "RightBracket", "Backslash", "Semicolon", "Apostrophe", "Comma", "Period", "Slash", + "Keypad1", "Keypad2", "Keypad3", "Keypad4", "Keypad5", "Keypad6", "Keypad7", "Keypad8", "Keypad9", "Keypad0", + "Point", "Enter", "Add", "Subtract", "Multiply", "Divide", + "NumLock", "CapsLock", + "Up", "Down", "Left", "Right", + "Tab", "Return", "Spacebar", "Menu", + "Shift", "Control", "Alt", "Super", +}; + +struct Keyboard { + const unsigned ID; + enum { Base = 1 }; + enum { Count = 8, Size = 128 }; + + enum Scancode { + Escape, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, + PrintScreen, ScrollLock, Pause, Tilde, + Num1, Num2, Num3, Num4, Num5, Num6, Num7, Num8, Num9, Num0, + Dash, Equal, Backspace, + Insert, Delete, Home, End, PageUp, PageDown, + A, B, C, D, E, F, G, H, I, J, K, L, M, + N, O, P, Q, R, S, T, U, V, W, X, Y, Z, + LeftBracket, RightBracket, Backslash, Semicolon, Apostrophe, Comma, Period, Slash, + Keypad1, Keypad2, Keypad3, Keypad4, Keypad5, Keypad6, Keypad7, Keypad8, Keypad9, Keypad0, + Point, Enter, Add, Subtract, Multiply, Divide, + NumLock, CapsLock, + Up, Down, Left, Right, + Tab, Return, Spacebar, Menu, + Shift, Control, Alt, Super, + Limit, + }; + + static signed numberDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(keyboard(i).belongsTo(scancode)) return i; + } + return -1; + } + + static signed keyDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(keyboard(i).isKey(scancode)) return scancode - keyboard(i).key(Escape); + } + return -1; + } + + static signed modifierDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(keyboard(i).isModifier(scancode)) return scancode - keyboard(i).key(Shift); + } + return -1; + } + + static bool isAnyKey(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(keyboard(i).isKey(scancode)) return true; + } + return false; + } + + static bool isAnyModifier(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(keyboard(i).isModifier(scancode)) return true; + } + return false; + } + + static uint16_t decode(const char *name) { + string s(name); + if(!strbegin(name, "KB")) return 0; + ltrim(s, "KB"); + unsigned id = strunsigned(s); + int pos = strpos(s, "::"); + if(pos < 0) return 0; + s = substr(s, pos + 2); + for(unsigned i = 0; i < Limit; i++) { + if(s == KeyboardScancodeName[i]) return Base + Size * id + i; + } + return 0; + } + + string encode(uint16_t code) const { + unsigned index = 0; + for(unsigned i = 0; i < Count; i++) { + if(code >= Base + Size * i && code < Base + Size * (i + 1)) { + index = code - (Base + Size * i); + break; + } + } + return string() << "KB" << ID << "::" << KeyboardScancodeName[index]; + } + + uint16_t operator[](Scancode code) const { return Base + ID * Size + code; } + uint16_t key(unsigned id) const { return Base + Size * ID + id; } + bool isKey(unsigned id) const { return id >= key(Escape) && id <= key(Menu); } + bool isModifier(unsigned id) const { return id >= key(Shift) && id <= key(Super); } + bool belongsTo(uint16_t scancode) const { return isKey(scancode) || isModifier(scancode); } + + Keyboard(unsigned ID_) : ID(ID_) {} +}; + +inline Keyboard& keyboard(unsigned id) { + static Keyboard kb0(0), kb1(1), kb2(2), kb3(3), kb4(4), kb5(5), kb6(6), kb7(7); + switch(id) { default: + case 0: return kb0; case 1: return kb1; case 2: return kb2; case 3: return kb3; + case 4: return kb4; case 5: return kb5; case 6: return kb6; case 7: return kb7; + } +} + +static const char MouseScancodeName[][64] = { + "Xaxis", "Yaxis", "Zaxis", + "Button0", "Button1", "Button2", "Button3", "Button4", "Button5", "Button6", "Button7", +}; + +struct Mouse; +Mouse& mouse(unsigned = 0); + +struct Mouse { + const unsigned ID; + enum { Base = Keyboard::Base + Keyboard::Size * Keyboard::Count }; + enum { Count = 8, Size = 16 }; + enum { Axes = 3, Buttons = 8 }; + + enum Scancode { + Xaxis, Yaxis, Zaxis, + Button0, Button1, Button2, Button3, Button4, Button5, Button6, Button7, + Limit, + }; + + static signed numberDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(mouse(i).belongsTo(scancode)) return i; + } + return -1; + } + + static signed axisDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(mouse(i).isAxis(scancode)) return scancode - mouse(i).axis(0); + } + return -1; + } + + static signed buttonDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(mouse(i).isButton(scancode)) return scancode - mouse(i).button(0); + } + return -1; + } + + static bool isAnyAxis(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(mouse(i).isAxis(scancode)) return true; + } + return false; + } + + static bool isAnyButton(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(mouse(i).isButton(scancode)) return true; + } + return false; + } + + static uint16_t decode(const char *name) { + string s(name); + if(!strbegin(name, "MS")) return 0; + ltrim(s, "MS"); + unsigned id = strunsigned(s); + int pos = strpos(s, "::"); + if(pos < 0) return 0; + s = substr(s, pos + 2); + for(unsigned i = 0; i < Limit; i++) { + if(s == MouseScancodeName[i]) return Base + Size * id + i; + } + return 0; + } + + string encode(uint16_t code) const { + unsigned index = 0; + for(unsigned i = 0; i < Count; i++) { + if(code >= Base + Size * i && code < Base + Size * (i + 1)) { + index = code - (Base + Size * i); + break; + } + } + return string() << "MS" << ID << "::" << MouseScancodeName[index]; + } + + uint16_t operator[](Scancode code) const { return Base + ID * Size + code; } + uint16_t axis(unsigned id) const { return Base + Size * ID + Xaxis + id; } + uint16_t button(unsigned id) const { return Base + Size * ID + Button0 + id; } + bool isAxis(unsigned id) const { return id >= axis(0) && id <= axis(2); } + bool isButton(unsigned id) const { return id >= button(0) && id <= button(7); } + bool belongsTo(uint16_t scancode) const { return isAxis(scancode) || isButton(scancode); } + + Mouse(unsigned ID_) : ID(ID_) {} +}; + +inline Mouse& mouse(unsigned id) { + static Mouse ms0(0), ms1(1), ms2(2), ms3(3), ms4(4), ms5(5), ms6(6), ms7(7); + switch(id) { default: + case 0: return ms0; case 1: return ms1; case 2: return ms2; case 3: return ms3; + case 4: return ms4; case 5: return ms5; case 6: return ms6; case 7: return ms7; + } +} + +static const char JoypadScancodeName[][64] = { + "Hat0", "Hat1", "Hat2", "Hat3", "Hat4", "Hat5", "Hat6", "Hat7", + "Axis0", "Axis1", "Axis2", "Axis3", "Axis4", "Axis5", "Axis6", "Axis7", + "Axis8", "Axis9", "Axis10", "Axis11", "Axis12", "Axis13", "Axis14", "Axis15", + "Button0", "Button1", "Button2", "Button3", "Button4", "Button5", "Button6", "Button7", + "Button8", "Button9", "Button10", "Button11", "Button12", "Button13", "Button14", "Button15", + "Button16", "Button17", "Button18", "Button19", "Button20", "Button21", "Button22", "Button23", + "Button24", "Button25", "Button26", "Button27", "Button28", "Button29", "Button30", "Button31", +}; + +struct Joypad; +Joypad& joypad(unsigned = 0); + +struct Joypad { + const unsigned ID; + enum { Base = Mouse::Base + Mouse::Size * Mouse::Count }; + enum { Count = 8, Size = 64 }; + enum { Hats = 8, Axes = 16, Buttons = 32 }; + + enum Scancode { + Hat0, Hat1, Hat2, Hat3, Hat4, Hat5, Hat6, Hat7, + Axis0, Axis1, Axis2, Axis3, Axis4, Axis5, Axis6, Axis7, + Axis8, Axis9, Axis10, Axis11, Axis12, Axis13, Axis14, Axis15, + Button0, Button1, Button2, Button3, Button4, Button5, Button6, Button7, + Button8, Button9, Button10, Button11, Button12, Button13, Button14, Button15, + Button16, Button17, Button18, Button19, Button20, Button21, Button22, Button23, + Button24, Button25, Button26, Button27, Button28, Button29, Button30, Button31, + Limit, + }; + + enum Hat { HatCenter = 0, HatUp = 1, HatRight = 2, HatDown = 4, HatLeft = 8 }; + + static signed numberDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(joypad(i).belongsTo(scancode)) return i; + } + return -1; + } + + static signed hatDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(joypad(i).isHat(scancode)) return scancode - joypad(i).hat(0); + } + return -1; + } + + static signed axisDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(joypad(i).isAxis(scancode)) return scancode - joypad(i).axis(0); + } + return -1; + } + + static signed buttonDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(joypad(i).isButton(scancode)) return scancode - joypad(i).button(0); + } + return -1; + } + + static bool isAnyHat(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(joypad(i).isHat(scancode)) return true; + } + return false; + } + + static bool isAnyAxis(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(joypad(i).isAxis(scancode)) return true; + } + return false; + } + + static bool isAnyButton(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(joypad(i).isButton(scancode)) return true; + } + return false; + } + + static uint16_t decode(const char *name) { + string s(name); + if(!strbegin(name, "JP")) return 0; + ltrim(s, "JP"); + unsigned id = strunsigned(s); + int pos = strpos(s, "::"); + if(pos < 0) return 0; + s = substr(s, pos + 2); + for(unsigned i = 0; i < Limit; i++) { + if(s == JoypadScancodeName[i]) return Base + Size * id + i; + } + return 0; + } + + string encode(uint16_t code) const { + unsigned index = 0; + for(unsigned i = 0; i < Count; i++) { + if(code >= Base + Size * i && code < Base + Size * (i + 1)) { + index = code - (Base + Size * i); + } + } + return string() << "JP" << ID << "::" << JoypadScancodeName[index]; + } + + uint16_t operator[](Scancode code) const { return Base + ID * Size + code; } + uint16_t hat(unsigned id) const { return Base + Size * ID + Hat0 + id; } + uint16_t axis(unsigned id) const { return Base + Size * ID + Axis0 + id; } + uint16_t button(unsigned id) const { return Base + Size * ID + Button0 + id; } + bool isHat(unsigned id) const { return id >= hat(0) && id <= hat(7); } + bool isAxis(unsigned id) const { return id >= axis(0) && id <= axis(15); } + bool isButton(unsigned id) const { return id >= button(0) && id <= button(31); } + bool belongsTo(uint16_t scancode) const { return isHat(scancode) || isAxis(scancode) || isButton(scancode); } + + Joypad(unsigned ID_) : ID(ID_) {} +}; + +inline Joypad& joypad(unsigned id) { + static Joypad jp0(0), jp1(1), jp2(2), jp3(3), jp4(4), jp5(5), jp6(6), jp7(7); + switch(id) { default: + case 0: return jp0; case 1: return jp1; case 2: return jp2; case 3: return jp3; + case 4: return jp4; case 5: return jp5; case 6: return jp6; case 7: return jp7; + } +} + +struct Scancode { + enum { None = 0, Limit = Joypad::Base + Joypad::Size * Joypad::Count }; + + static uint16_t decode(const char *name) { + uint16_t code; + code = Keyboard::decode(name); + if(code) return code; + code = Mouse::decode(name); + if(code) return code; + code = Joypad::decode(name); + if(code) return code; + return None; + } + + static string encode(uint16_t code) { + for(unsigned i = 0; i < Keyboard::Count; i++) { + if(keyboard(i).belongsTo(code)) return keyboard(i).encode(code); + } + for(unsigned i = 0; i < Mouse::Count; i++) { + if(mouse(i).belongsTo(code)) return mouse(i).encode(code); + } + for(unsigned i = 0; i < Joypad::Count; i++) { + if(joypad(i).belongsTo(code)) return joypad(i).encode(code); + } + return "None"; + } +}; + +} + +#endif diff --git a/snesreader/nall/lzss.hpp b/snesreader/nall/lzss.hpp new file mode 100644 index 00000000..202bc814 --- /dev/null +++ b/snesreader/nall/lzss.hpp @@ -0,0 +1,81 @@ +#ifndef NALL_LZSS_HPP +#define NALL_LZSS_HPP + +#include +#include +#include + +namespace nall { + class lzss { + public: + static bool encode(uint8_t *&output, unsigned &outlength, const uint8_t *input, unsigned inlength) { + output = new(zeromemory) uint8_t[inlength * 9 / 8 + 9]; + + unsigned i = 0, o = 0; + while(i < inlength) { + unsigned flagoffset = o++; + uint8_t flag = 0x00; + + for(unsigned b = 0; b < 8 && i < inlength; b++) { + unsigned longest = 0, pointer; + for(unsigned index = 1; index < 4096; index++) { + unsigned count = 0; + while(true) { + if(count >= 15 + 3) break; //verify pattern match is not longer than max length + if(i + count >= inlength) break; //verify pattern match does not read past end of input + if(i + count < index) break; //verify read is not before start of input + if(input[i + count] != input[i + count - index]) break; //verify pattern still matches + count++; + } + + if(count > longest) { + longest = count; + pointer = index; + } + } + + if(longest < 3) output[o++] = input[i++]; + else { + flag |= 1 << b; + uint16_t x = ((longest - 3) << 12) + pointer; + output[o++] = x; + output[o++] = x >> 8; + i += longest; + } + } + + output[flagoffset] = flag; + } + + outlength = o; + return true; + } + + static bool decode(uint8_t *&output, const uint8_t *input, unsigned length) { + output = new(zeromemory) uint8_t[length]; + + unsigned i = 0, o = 0; + while(o < length) { + uint8_t flag = input[i++]; + + for(unsigned b = 0; b < 8 && o < length; b++) { + if(!(flag & (1 << b))) output[o++] = input[i++]; + else { + uint16_t offset = input[i++]; + offset += input[i++] << 8; + uint16_t lookuplength = (offset >> 12) + 3; + offset &= 4095; + for(unsigned index = 0; index < lookuplength && o + index < length; index++) { + output[o + index] = output[o + index - offset]; + } + o += lookuplength; + } + } + } + + return true; + } + }; +} + +#endif diff --git a/snesreader/nall/moduloarray.hpp b/snesreader/nall/moduloarray.hpp new file mode 100644 index 00000000..be549ae9 --- /dev/null +++ b/snesreader/nall/moduloarray.hpp @@ -0,0 +1,40 @@ +#ifndef NALL_MODULO_HPP +#define NALL_MODULO_HPP + +#include + +namespace nall { + template class modulo_array { + public: + inline T operator[](int index) const { + return buffer[size + index]; + } + + inline T read(int index) const { + return buffer[size + index]; + } + + inline void write(unsigned index, const T value) { + buffer[index] = + buffer[index + size] = + buffer[index + size + size] = value; + } + + void serialize(serializer &s) { + s.array(buffer, size * 3); + } + + modulo_array() { + buffer = new T[size * 3](); + } + + ~modulo_array() { + delete[] buffer; + } + + private: + T *buffer; + }; +} + +#endif diff --git a/snesreader/nall/platform.hpp b/snesreader/nall/platform.hpp new file mode 100644 index 00000000..0bd62895 --- /dev/null +++ b/snesreader/nall/platform.hpp @@ -0,0 +1,77 @@ +#ifndef NALL_PLATFORM_HPP +#define NALL_PLATFORM_HPP + +//========================= +//standard platform headers +//========================= + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(_WIN32) + #include + #include + #include + #undef interface +#else + #include + #include + #include +#endif + +//================== +//warning supression +//================== + +//Visual C++ +#if defined(_MSC_VER) + //disable libc "deprecation" warnings + #pragma warning(disable:4996) +#endif + +//================ +//POSIX compliance +//================ + +#if defined(_MSC_VER) + #define PATH_MAX _MAX_PATH + #define va_copy(dest, src) ((dest) = (src)) +#endif + +#if defined(_WIN32) + #define getcwd _getcwd + #define ftruncate _chsize + #define putenv _putenv + #define rmdir _rmdir + #define vsnprintf _vsnprintf + #define usleep(n) Sleep(n / 1000) +#endif + +//================ +//inline expansion +//================ + +#if defined(__GNUC__) + #define noinline __attribute__((noinline)) + #define inline inline + #define alwaysinline inline __attribute__((always_inline)) +#elif defined(_MSC_VER) + #define noinline __declspec(noinline) + #define inline inline + #define alwaysinline inline __forceinline +#else + #define noinline + #define inline inline + #define alwaysinline inline +#endif + +#endif + diff --git a/snesreader/nall/priorityqueue.hpp b/snesreader/nall/priorityqueue.hpp new file mode 100644 index 00000000..7f33e23b --- /dev/null +++ b/snesreader/nall/priorityqueue.hpp @@ -0,0 +1,106 @@ +#ifndef NALL_PRIORITYQUEUE_HPP +#define NALL_PRIORITYQUEUE_HPP + +#include +#include +#include +#include + +namespace nall { + template void priority_queue_nocallback(type_t) {} + + //priority queue implementation using binary min-heap array; + //does not require normalize() function. + //O(1) find (tick) + //O(log n) insert (enqueue) + //O(log n) remove (dequeue) + template class priority_queue : noncopyable { + public: + inline void tick(unsigned ticks) { + basecounter += ticks; + while(heapsize && gte(basecounter, heap[0].counter)) callback(dequeue()); + } + + //counter is relative to current time (eg enqueue(64, ...) fires in 64 ticks); + //counter cannot exceed std::numeric_limits::max() >> 1. + void enqueue(unsigned counter, type_t event) { + unsigned child = heapsize++; + counter += basecounter; + + while(child) { + unsigned parent = (child - 1) >> 1; + if(gte(counter, heap[parent].counter)) break; + + heap[child].counter = heap[parent].counter; + heap[child].event = heap[parent].event; + child = parent; + } + + heap[child].counter = counter; + heap[child].event = event; + } + + type_t dequeue() { + type_t event(heap[0].event); + unsigned parent = 0; + unsigned counter = heap[--heapsize].counter; + + while(true) { + unsigned child = (parent << 1) + 1; + if(child >= heapsize) break; + if(child + 1 < heapsize && gte(heap[child].counter, heap[child + 1].counter)) child++; + if(gte(heap[child].counter, counter)) break; + + heap[parent].counter = heap[child].counter; + heap[parent].event = heap[child].event; + parent = child; + } + + heap[parent].counter = counter; + heap[parent].event = heap[heapsize].event; + return event; + } + + void reset() { + basecounter = 0; + heapsize = 0; + } + + void serialize(serializer &s) { + s.integer(basecounter); + s.integer(heapsize); + for(unsigned n = 0; n < heapcapacity; n++) { + s.integer(heap[n].counter); + s.integer(heap[n].event); + } + } + + priority_queue(unsigned size, function callback_ = &priority_queue_nocallback) + : callback(callback_) { + heap = new heap_t[size]; + heapcapacity = size; + reset(); + } + + ~priority_queue() { + delete[] heap; + } + + private: + function callback; + unsigned basecounter; + unsigned heapsize; + unsigned heapcapacity; + struct heap_t { + unsigned counter; + type_t event; + } *heap; + + //return true if x is greater than or equal to y + inline bool gte(unsigned x, unsigned y) { + return x - y < (std::numeric_limits::max() >> 1); + } + }; +} + +#endif diff --git a/snesreader/nall/property.hpp b/snesreader/nall/property.hpp new file mode 100644 index 00000000..0099939c --- /dev/null +++ b/snesreader/nall/property.hpp @@ -0,0 +1,45 @@ +#ifndef NALL_PROPERTY_HPP +#define NALL_PROPERTY_HPP + +//nall::property implements a variable container that disallows write access +//to non-derived objects. This requires use of property::set(), as C++ lacks +//the ability to make this implementation completely transparent. + +namespace nall { + class property { + public: + template class property_t; + + protected: + template T& get(property_t&); + template property_t& set(property_t&, const T); + + public: + template + class property_t { + public: + const T& operator()() const { return value; } + property_t() : value() {} + property_t(const T value_) : value(value_) {} + + protected: + T value; + operator T&() { return value; } + property_t& operator=(const T newValue) { value = newValue; return *this; } + friend T& property::get(property_t&); + friend property_t& property::set(property_t&, const T); + }; + }; + + template + T& property::get(property::property_t &p) { + return p.operator T&(); + } + + template + property::property_t& property::set(property::property_t &p, const T value) { + return p.operator=(value); + } +} + +#endif diff --git a/snesreader/nall/serial.hpp b/snesreader/nall/serial.hpp new file mode 100644 index 00000000..6f5cf6d6 --- /dev/null +++ b/snesreader/nall/serial.hpp @@ -0,0 +1,80 @@ +#ifndef NALL_SERIAL_HPP +#define NALL_SERIAL_HPP + +#include +#include +#include +#include + +#include + +namespace nall { + class serial { + public: + //-1 on error, otherwise return bytes read + int read(uint8_t *data, unsigned length) { + if(port_open == false) return -1; + return ::read(port, (void*)data, length); + } + + //-1 on error, otherwise return bytes written + int write(const uint8_t *data, unsigned length) { + if(port_open == false) return -1; + return ::write(port, (void*)data, length); + } + + bool open(const char *portname, unsigned rate) { + close(); + + port = ::open(portname, O_RDWR | O_NOCTTY | O_NDELAY | O_NONBLOCK); + if(port == -1) return false; + + if(ioctl(port, TIOCEXCL) == -1) { close(); return false; } + if(fcntl(port, F_SETFL, 0) == -1) { close(); return false; } + if(tcgetattr(port, &original_attr) == -1) { close(); return false; } + + termios attr = original_attr; + cfmakeraw(&attr); + cfsetspeed(&attr, rate); + + attr.c_lflag &=~ (ECHO | ECHONL | ISIG | ICANON | IEXTEN); + attr.c_iflag &=~ (BRKINT | PARMRK | INPCK | ISTRIP | INLCR | IGNCR | ICRNL | IXON | IXOFF | IXANY); + attr.c_iflag |= (IGNBRK | IGNPAR); + attr.c_oflag &=~ (OPOST); + attr.c_cflag &=~ (CSIZE | CSTOPB | PARENB); + attr.c_cflag |= (CS8 | CREAD | CLOCAL); + attr.c_cc[VTIME] = attr.c_cc[VMIN] = 0; + + if(tcsetattr(port, TCSANOW, &attr) == -1) { close(); return false; } + return port_open = true; + } + + void close() { + if(port != -1) { + tcdrain(port); + if(port_open == true) { + tcsetattr(port, TCSANOW, &original_attr); + port_open = false; + } + ::close(port); + port = -1; + } + } + + serial() { + port = -1; + port_open = false; + } + + ~serial() { + close(); + } + + private: + int port; + bool port_open; + termios original_attr; + }; +} + +#endif diff --git a/snesreader/nall/serializer.hpp b/snesreader/nall/serializer.hpp new file mode 100644 index 00000000..521e7d2e --- /dev/null +++ b/snesreader/nall/serializer.hpp @@ -0,0 +1,126 @@ +#ifndef NALL_SERIALIZER_HPP +#define NALL_SERIALIZER_HPP + +#include +#include +#include + +namespace nall { + + //serializer: a class designed to save and restore the state of classes. + // + //benefits: + //- data() will be portable in size (it is not necessary to specify type sizes.) + //- data() will be portable in endianness (always stored internally as little-endian.) + //- one serialize function can both save and restore class states. + // + //caveats: + //- only plain-old-data can be stored. complex classes must provide serialize(serializer&); + //- floating-point usage is not portable across platforms + + class serializer { + public: + enum mode_t { Load, Save, Size }; + + mode_t mode() const { + return imode; + } + + const uint8_t* data() const { + return idata; + } + + unsigned size() const { + return isize; + } + + unsigned capacity() const { + return icapacity; + } + + template void floatingpoint(T &value) { + enum { size = sizeof(T) }; + //this is rather dangerous, and not cross-platform safe; + //but there is no standardized way to export FP-values + uint8_t *p = (uint8_t*)&value; + if(imode == Save) { + for(unsigned n = 0; n < size; n++) idata[isize++] = p[n]; + } else if(imode == Load) { + for(unsigned n = 0; n < size; n++) p[n] = idata[isize++]; + } else { + isize += size; + } + } + + template void integer(T &value) { + enum { size = is_bool::value ? 1 : sizeof(T) }; + if(imode == Save) { + for(unsigned n = 0; n < size; n++) idata[isize++] = value >> (n << 3); + } else if(imode == Load) { + value = 0; + for(unsigned n = 0; n < size; n++) value |= idata[isize++] << (n << 3); + } else if(imode == Size) { + isize += size; + } + } + + template void array(T &array) { + enum { size = sizeof(T) / sizeof(typename remove_extent::type) }; + for(unsigned n = 0; n < size; n++) integer(array[n]); + } + + template void array(T array, unsigned size) { + for(unsigned n = 0; n < size; n++) integer(array[n]); + } + + serializer& operator=(const serializer &s) { + if(idata) delete[] idata; + + imode = s.imode; + idata = new uint8_t[s.icapacity]; + isize = s.isize; + icapacity = s.icapacity; + + memcpy(idata, s.idata, s.icapacity); + return *this; + } + + serializer(const serializer &s) : idata(0) { + operator=(s); + } + + serializer() { + imode = Size; + idata = 0; + isize = 0; + } + + serializer(unsigned capacity) { + imode = Save; + idata = new uint8_t[capacity](); + isize = 0; + icapacity = capacity; + } + + serializer(const uint8_t *data, unsigned capacity) { + imode = Load; + idata = new uint8_t[capacity]; + isize = 0; + icapacity = capacity; + memcpy(idata, data, capacity); + } + + ~serializer() { + if(idata) delete[] idata; + } + + private: + mode_t imode; + uint8_t *idata; + unsigned isize; + unsigned icapacity; + }; + +}; + +#endif diff --git a/snesreader/nall/sha256.hpp b/snesreader/nall/sha256.hpp new file mode 100644 index 00000000..7f41f04e --- /dev/null +++ b/snesreader/nall/sha256.hpp @@ -0,0 +1,143 @@ +#ifndef NALL_SHA256_HPP +#define NALL_SHA256_HPP + +//author: vladitx + +namespace nall { + #define PTR(t, a) ((t*)(a)) + + #define SWAP32(x) ((uint32_t)( \ + (((uint32_t)(x) & 0x000000ff) << 24) | \ + (((uint32_t)(x) & 0x0000ff00) << 8) | \ + (((uint32_t)(x) & 0x00ff0000) >> 8) | \ + (((uint32_t)(x) & 0xff000000) >> 24) \ + )) + + #define ST32(a, d) *PTR(uint32_t, a) = (d) + #define ST32BE(a, d) ST32(a, SWAP32(d)) + + #define LD32(a) *PTR(uint32_t, a) + #define LD32BE(a) SWAP32(LD32(a)) + + #define LSL32(x, n) ((uint32_t)(x) << (n)) + #define LSR32(x, n) ((uint32_t)(x) >> (n)) + #define ROR32(x, n) (LSR32(x, n) | LSL32(x, 32 - (n))) + + //first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19 + static const uint32_t T_H[8] = { + 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19, + }; + + //first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311 + static const uint32_t T_K[64] = { + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2, + }; + + struct sha256_ctx { + uint8_t in[64]; + unsigned inlen; + + uint32_t w[64]; + uint32_t h[8]; + uint64_t len; + }; + + void sha256_init(sha256_ctx *p) { + memset(p, 0, sizeof(sha256_ctx)); + memcpy(p->h, T_H, sizeof(T_H)); + } + + static void sha256_block(sha256_ctx *p) { + unsigned i; + uint32_t s0, s1; + uint32_t a, b, c, d, e, f, g, h; + uint32_t t1, t2, maj, ch; + + for(i = 0; i < 16; i++) p->w[i] = LD32BE(p->in + i * 4); + + for(i = 16; i < 64; i++) { + s0 = ROR32(p->w[i - 15], 7) ^ ROR32(p->w[i - 15], 18) ^ LSR32(p->w[i - 15], 3); + s1 = ROR32(p->w[i - 2], 17) ^ ROR32(p->w[i - 2], 19) ^ LSR32(p->w[i - 2], 10); + p->w[i] = p->w[i - 16] + s0 + p->w[i - 7] + s1; + } + + a = p->h[0]; b = p->h[1]; c = p->h[2]; d = p->h[3]; + e = p->h[4]; f = p->h[5]; g = p->h[6]; h = p->h[7]; + + for(i = 0; i < 64; i++) { + s0 = ROR32(a, 2) ^ ROR32(a, 13) ^ ROR32(a, 22); + maj = (a & b) ^ (a & c) ^ (b & c); + t2 = s0 + maj; + s1 = ROR32(e, 6) ^ ROR32(e, 11) ^ ROR32(e, 25); + ch = (e & f) ^ (~e & g); + t1 = h + s1 + ch + T_K[i] + p->w[i]; + + h = g; g = f; f = e; e = d + t1; + d = c; c = b; b = a; a = t1 + t2; + } + + p->h[0] += a; p->h[1] += b; p->h[2] += c; p->h[3] += d; + p->h[4] += e; p->h[5] += f; p->h[6] += g; p->h[7] += h; + + //next block + p->inlen = 0; + } + + void sha256_chunk(sha256_ctx *p, const uint8_t *s, unsigned len) { + unsigned l; + p->len += len; + + while(len) { + l = 64 - p->inlen; + l = (len < l) ? len : l; + + memcpy(p->in + p->inlen, s, l); + s += l; + p->inlen += l; + len -= l; + + if(p->inlen == 64) sha256_block(p); + } + } + + void sha256_final(sha256_ctx *p) { + uint64_t len; + p->in[p->inlen++] = 0x80; + + if(p->inlen > 56) { + memset(p->in + p->inlen, 0, 64 - p->inlen); + sha256_block(p); + } + + memset(p->in + p->inlen, 0, 56 - p->inlen); + + len = p->len << 3; + ST32BE(p->in + 56, len >> 32); + ST32BE(p->in + 60, len); + sha256_block(p); + } + + void sha256_hash(sha256_ctx *p, uint8_t *s) { + uint32_t *t = (uint32_t*)s; + for(unsigned i = 0; i < 8; i++) ST32BE(t++, p->h[i]); + } + + #undef PTR + #undef SWAP32 + #undef ST32 + #undef ST32BE + #undef LD32 + #undef LD32BE + #undef LSL32 + #undef LSR32 + #undef ROR32 +} + +#endif diff --git a/snesreader/nall/sort.hpp b/snesreader/nall/sort.hpp new file mode 100644 index 00000000..23c317a5 --- /dev/null +++ b/snesreader/nall/sort.hpp @@ -0,0 +1,62 @@ +#ifndef NALL_SORT_HPP +#define NALL_SORT_HPP + +#include + +//class: merge sort +//average: O(n log n) +//worst: O(n log n) +//memory: O(n) +//stack: O(log n) +//stable?: yes + +//notes: +//there are two primary reasons for choosing merge sort +//over the (usually) faster quick sort*: +//1: it is a stable sort. +//2: it lacks O(n^2) worst-case overhead. +//(* which is also O(n log n) in the average case.) + +namespace nall { + template + void sort(T list[], unsigned length) { + if(length <= 1) return; //nothing to sort + + //use insertion sort to quickly sort smaller blocks + if(length < 64) { + for(unsigned i = 0; i < length; i++) { + unsigned min = i; + for(unsigned j = i + 1; j < length; j++) { + if(list[j] < list[min]) min = j; + } + if(min != i) swap(list[i], list[min]); + } + return; + } + + //split list in half and recursively sort both + unsigned middle = length / 2; + sort(list, middle); + sort(list + middle, length - middle); + + //left and right are sorted here; perform merge sort + T *buffer = new T[length]; + unsigned offset = 0; + unsigned left = 0; + unsigned right = middle; + while(left < middle && right < length) { + if(list[left] < list[right]) { + buffer[offset++] = list[left++]; + } else { + buffer[offset++] = list[right++]; + } + } + while(left < middle) buffer[offset++] = list[left++]; + while(right < length) buffer[offset++] = list[right++]; + + for(unsigned i = 0; i < length; i++) list[i] = buffer[i]; + delete[] buffer; + } +} + +#endif diff --git a/snesreader/nall/static.hpp b/snesreader/nall/static.hpp new file mode 100644 index 00000000..00c3664c --- /dev/null +++ b/snesreader/nall/static.hpp @@ -0,0 +1,17 @@ +#ifndef NALL_STATIC_HPP +#define NALL_STATIC_HPP + +namespace nall { + template struct static_assert; + template<> struct static_assert {}; + + template struct static_if { + typedef true_type type; + }; + + template struct static_if { + typedef false_type type; + }; +} + +#endif diff --git a/snesreader/nall/stdint.hpp b/snesreader/nall/stdint.hpp new file mode 100644 index 00000000..7e2c7a46 --- /dev/null +++ b/snesreader/nall/stdint.hpp @@ -0,0 +1,44 @@ +#ifndef NALL_STDINT_HPP +#define NALL_STDINT_HPP + +#include + +#if defined(_MSC_VER) + typedef signed char int8_t; + typedef signed short int16_t; + typedef signed int int32_t; + typedef signed long long int64_t; + typedef int64_t intmax_t; + #if defined(_WIN64) + typedef int64_t intptr_t; + #else + typedef int32_t intptr_t; + #endif + + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned int uint32_t; + typedef unsigned long long uint64_t; + typedef uint64_t uintmax_t; + #if defined(_WIN64) + typedef uint64_t uintptr_t; + #else + typedef uint32_t uintptr_t; + #endif +#else + #include +#endif + +namespace nall { + static static_assert int8_t_assert; + static static_assert int16_t_assert; + static static_assert int32_t_assert; + static static_assert int64_t_assert; + + static static_assert uint8_t_assert; + static static_assert uint16_t_assert; + static static_assert uint32_t_assert; + static static_assert uint64_t_assert; +} + +#endif diff --git a/snesreader/nall/string.hpp b/snesreader/nall/string.hpp new file mode 100644 index 00000000..94e65b68 --- /dev/null +++ b/snesreader/nall/string.hpp @@ -0,0 +1,18 @@ +#ifndef NALL_STRING_HPP +#define NALL_STRING_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif diff --git a/snesreader/nall/string/base.hpp b/snesreader/nall/string/base.hpp new file mode 100644 index 00000000..24a5b1d4 --- /dev/null +++ b/snesreader/nall/string/base.hpp @@ -0,0 +1,119 @@ +#ifndef NALL_STRING_BASE_HPP +#define NALL_STRING_BASE_HPP + +#include +#include +#include +#include +#include +#include + +inline char chrlower(char c); +inline char chrupper(char c); +inline int stricmp(const char *dest, const char *src); +inline int strpos (const char *str, const char *key); +inline int qstrpos(const char *str, const char *key); +inline bool strbegin (const char *str, const char *key); +inline bool stribegin(const char *str, const char *key); +inline bool strend (const char *str, const char *key); +inline bool striend(const char *str, const char *key); +inline char* strlower(char *str); +inline char* strupper(char *str); +inline char* strtr(char *dest, const char *before, const char *after); +inline uintmax_t strhex (const char *str); +inline intmax_t strsigned (const char *str); +inline uintmax_t strunsigned(const char *str); +inline uintmax_t strbin (const char *str); +inline double strdouble (const char *str); +inline size_t strhex (char *str, uintmax_t value, size_t length = 0); +inline size_t strsigned (char *str, intmax_t value, size_t length = 0); +inline size_t strunsigned(char *str, uintmax_t value, size_t length = 0); +inline size_t strbin (char *str, uintmax_t value, size_t length = 0); +inline size_t strdouble (char *str, double value, size_t length = 0); +inline bool match(const char *pattern, const char *str); +inline bool strint (const char *str, int &result); +inline bool strmath(const char *str, int &result); +inline size_t strlcpy(char *dest, const char *src, size_t length); +inline size_t strlcat(char *dest, const char *src, size_t length); +inline char* ltrim(char *str, const char *key = " "); +inline char* rtrim(char *str, const char *key = " "); +inline char* trim (char *str, const char *key = " "); +inline char* ltrim_once(char *str, const char *key = " "); +inline char* rtrim_once(char *str, const char *key = " "); +inline char* trim_once (char *str, const char *key = " "); + +namespace nall { + class string; + template inline string to_string(T); + + class string { + public: + inline void reserve(size_t); + inline unsigned length() const; + + inline string& assign(const char*); + inline string& append(const char*); + template inline string& operator= (T value); + template inline string& operator<<(T value); + + inline operator const char*() const; + inline char* operator()(); + inline char& operator[](int); + + inline bool operator==(const char*) const; + inline bool operator!=(const char*) const; + inline bool operator< (const char*) const; + inline bool operator<=(const char*) const; + inline bool operator> (const char*) const; + inline bool operator>=(const char*) const; + + inline string(); + inline string(const char*); + inline string(const string&); + inline string& operator=(const string&); + inline ~string(); + + inline bool readfile(const char*); + inline string& replace (const char*, const char*); + inline string& qreplace(const char*, const char*); + + protected: + char *data; + size_t size; + + #if defined(QT_CORE_LIB) + public: + inline operator QString() const; + #endif + }; + + class lstring : public vector { + public: + template inline lstring& operator<<(T value); + + inline int find(const char*); + inline void split (const char*, const char*, unsigned = 0); + inline void qsplit(const char*, const char*, unsigned = 0); + }; +}; + +inline size_t strlcpy(nall::string &dest, const char *src, size_t length); +inline size_t strlcat(nall::string &dest, const char *src, size_t length); +inline nall::string& strlower(nall::string &str); +inline nall::string& strupper(nall::string &str); +inline nall::string& strtr(nall::string &dest, const char *before, const char *after); +inline nall::string& ltrim(nall::string &str, const char *key = " "); +inline nall::string& rtrim(nall::string &str, const char *key = " "); +inline nall::string& trim (nall::string &str, const char *key = " "); +inline nall::string& ltrim_once(nall::string &str, const char *key = " "); +inline nall::string& rtrim_once(nall::string &str, const char *key = " "); +inline nall::string& trim_once (nall::string &str, const char *key = " "); + +inline nall::string substr(const char *src, size_t start = 0, size_t length = 0); +inline nall::string strhex (uintmax_t value); +inline nall::string strsigned (intmax_t value); +inline nall::string strunsigned(uintmax_t value); +inline nall::string strbin (uintmax_t value); +inline nall::string strdouble (double value); + +#endif diff --git a/snesreader/nall/string/cast.hpp b/snesreader/nall/string/cast.hpp new file mode 100644 index 00000000..0b490917 --- /dev/null +++ b/snesreader/nall/string/cast.hpp @@ -0,0 +1,30 @@ +#ifndef NALL_STRING_CAST_HPP +#define NALL_STRING_CAST_HPP + +namespace nall { + //this is needed, as C++98 does not support explicit template specialization inside classes; + //redundant memory allocation should hopefully be avoided via compiler optimizations. + template<> inline string to_string (bool v) { return v ? "true" : "false"; } + template<> inline string to_string (signed int v) { return strsigned(v); } + template<> inline string to_string (unsigned int v) { return strunsigned(v); } + template<> inline string to_string (double v) { return strdouble(v); } + template<> inline string to_string (char *v) { return v; } + template<> inline string to_string (const char *v) { return v; } + template<> inline string to_string (string v) { return v; } + template<> inline string to_string(const string &v) { return v; } + + template string& string::operator= (T value) { return assign(to_string(value)); } + template string& string::operator<<(T value) { return append(to_string(value)); } + + template lstring& lstring::operator<<(T value) { + operator[](size()).assign(to_string(value)); + return *this; + } + + #if defined(QT_CORE_LIB) + template<> inline string to_string(const QString &v) { return v.toUtf8().constData(); } + string::operator QString() const { return QString::fromUtf8(*this); } + #endif +}; + +#endif diff --git a/snesreader/nall/string/compare.hpp b/snesreader/nall/string/compare.hpp new file mode 100644 index 00000000..23d2ee39 --- /dev/null +++ b/snesreader/nall/string/compare.hpp @@ -0,0 +1,100 @@ +#ifndef NALL_STRING_COMPARE_HPP +#define NALL_STRING_COMPARE_HPP + +char chrlower(char c) { + return (c >= 'A' && c <= 'Z') ? c + ('a' - 'A') : c; +} + +char chrupper(char c) { + return (c >= 'a' && c <= 'z') ? c - ('a' - 'A') : c; +} + +int stricmp(const char *dest, const char *src) { + while(*dest) { + if(chrlower(*dest) != chrlower(*src)) break; + dest++; + src++; + } + + return (int)chrlower(*dest) - (int)chrlower(*src); +} + +int strpos(const char *str, const char *key) { + int ssl = strlen(str), ksl = strlen(key); + + if(ksl > ssl) return -1; + for(int i = 0; i <= ssl - ksl; i++) { + if(!memcmp(str + i, key, ksl)) { + return i; + } + } + return -1; +} + +int qstrpos(const char *str, const char *key) { + int ssl = strlen(str), ksl = strlen(key); + + if(ksl > ssl) return -1; + for(int i = 0; i <= ssl - ksl;) { + uint8_t x = str[i]; + if(x == '\"' || x == '\'') { + uint8_t z = i++; + while(str[i] != x && i < ssl) i++; + if(i >= ssl) i = z; + } + if(!memcmp(str + i, key, ksl)) { + return i; + } else { + i++; + } + } + return -1; +} + +bool strbegin(const char *str, const char *key) { + int i, ssl = strlen(str), ksl = strlen(key); + + if(ksl > ssl) return false; + return (!memcmp(str, key, ksl)); +} + +bool stribegin(const char *str, const char *key) { + int ssl = strlen(str), ksl = strlen(key); + + if(ksl > ssl) return false; + for(int i = 0; i < ksl; i++) { + if(str[i] >= 'A' && str[i] <= 'Z') { + if(str[i] != key[i] && str[i]+0x20 != key[i])return false; + } else if(str[i] >= 'a' && str[i] <= 'z') { + if(str[i] != key[i] && str[i]-0x20 != key[i])return false; + } else { + if(str[i] != key[i])return false; + } + } + return true; +} + +bool strend(const char *str, const char *key) { + int ssl = strlen(str), ksl = strlen(key); + + if(ksl > ssl) return false; + return (!memcmp(str + ssl - ksl, key, ksl)); +} + +bool striend(const char *str, const char *key) { + int ssl = strlen(str), ksl = strlen(key); + + if(ksl > ssl) return false; + for(int i = ssl - ksl, z = 0; i < ssl; i++, z++) { + if(str[i] >= 'A' && str[i] <= 'Z') { + if(str[i] != key[z] && str[i]+0x20 != key[z])return false; + } else if(str[i] >= 'a' && str[i] <= 'z') { + if(str[i] != key[z] && str[i]-0x20 != key[z])return false; + } else { + if(str[i] != key[z])return false; + } + } + return true; +} + +#endif diff --git a/snesreader/nall/string/convert.hpp b/snesreader/nall/string/convert.hpp new file mode 100644 index 00000000..da90bb09 --- /dev/null +++ b/snesreader/nall/string/convert.hpp @@ -0,0 +1,285 @@ +#ifndef NALL_STRING_CONVERT_HPP +#define NALL_STRING_CONVERT_HPP + +char* strlower(char *str) { + if(!str) return 0; + int i = 0; + while(str[i]) { + str[i] = chrlower(str[i]); + i++; + } + return str; +} + +char* strupper(char *str) { + if(!str) return 0; + int i = 0; + while(str[i]) { + str[i] = chrupper(str[i]); + i++; + } + return str; +} + +char* strtr(char *dest, const char *before, const char *after) { + if(!dest || !before || !after) return dest; + int sl = strlen(dest), bsl = strlen(before), asl = strlen(after); + + if(bsl != asl || bsl == 0) return dest; //patterns must be the same length for 1:1 replace + for(unsigned i = 0; i < sl; i++) { + for(unsigned l = 0; l < bsl; l++) { + if(dest[i] == before[l]) { + dest[i] = after[l]; + break; + } + } + } + + return dest; +} + +uintmax_t strhex(const char *str) { + if(!str) return 0; + uintmax_t result = 0; + + //skip hex identifiers 0x and $, if present + if(*str == '0' && (*(str + 1) == 'X' || *(str + 1) == 'x')) str += 2; + else if(*str == '$') str++; + + while(*str) { + uint8_t x = *str++; + if(x >= '0' && x <= '9') x -= '0'; + else if(x >= 'A' && x <= 'F') x -= 'A' - 10; + else if(x >= 'a' && x <= 'f') x -= 'a' - 10; + else break; //stop at first invalid character + result = result * 16 + x; + } + + return result; +} + +intmax_t strsigned(const char *str) { + if(!str) return 0; + intmax_t result = 0; + bool negate = false; + + //check for negation + if(*str == '-') { + negate = true; + str++; + } + + while(*str) { + uint8_t x = *str++; + if(x >= '0' && x <= '9') x -= '0'; + else break; //stop at first invalid character + result = result * 10 + x; + } + + return !negate ? result : -result; +} + +uintmax_t strunsigned(const char *str) { + if(!str) return 0; + uintmax_t result = 0; + + while(*str) { + uint8_t x = *str++; + if(x >= '0' && x <= '9') x -= '0'; + else break; //stop at first invalid character + result = result * 10 + x; + } + + return result; +} + +uintmax_t strbin(const char *str) { + if(!str) return 0; + uintmax_t result = 0; + + //skip bin identifiers 0b and %, if present + if(*str == '0' && (*(str + 1) == 'B' || *(str + 1) == 'b')) str += 2; + else if(*str == '%') str++; + + while(*str) { + uint8_t x = *str++; + if(x == '0' || x == '1') x -= '0'; + else break; //stop at first invalid character + result = result * 2 + x; + } + + return result; +} + +double strdouble(const char *str) { + if(!str) return 0.0; + bool negate = false; + + //check for negation + if(*str == '-') { + negate = true; + str++; + } + + intmax_t result_integral = 0; + while(*str) { + uint8_t x = *str++; + if(x >= '0' && x <= '9') x -= '0'; + else if(x == '.') break; //break loop and read fractional part + else return (double)result_integral; //invalid value, assume no fractional part + result_integral = result_integral * 10 + x; + } + + intmax_t result_fractional = 0; + while(*str) { + uint8_t x = *str++; + if(x >= '0' && x <= '9') x -= '0'; + else break; //stop at first invalid character + result_fractional = result_fractional * 10 + x; + } + + //calculate fractional portion + double result = (double)result_fractional; + while((uintmax_t)result > 0) result /= 10.0; + result += (double)result_integral; + + return !negate ? result : -result; +} + +// + +size_t strhex(char *str, uintmax_t value, size_t length /* = 0 */) { + if(length == 0) length -= 1U; //"infinite" length + size_t initial_length = length; + + //count number of digits in value + int digits_integral = 1; + uintmax_t digits_integral_ = value; + while(digits_integral_ /= 16) digits_integral++; + + int digits = digits_integral; + if(!str) return digits + 1; //only computing required length? + + length = nall::min(digits, length - 1); + str += length; //seek to end of target string + *str = 0; //set null terminator + + while(length--) { + uint8_t x = value % 16; + value /= 16; + *--str = x < 10 ? (x + '0') : (x + 'a' - 10); //iterate backwards to write string + } + + return nall::min(initial_length, digits + 1); +} + +size_t strsigned(char *str, intmax_t value_, size_t length /* = 0 */) { + if(length == 0) length = -1U; //"infinite" length + size_t initial_length = length; + + bool negate = value_ < 0; + uintmax_t value = value_ >= 0 ? value_ : -value_; + + //count number of digits in value + int digits_integral = 1; + uintmax_t digits_integral_ = value; + while(digits_integral_ /= 10) digits_integral++; + + int digits = (negate ? 1 : 0) + digits_integral; + if(!str) return digits + 1; //only computing required length? + + length = nall::min(digits, length - 1); + str += length; //seek to end of target string + *str = 0; //set null terminator + while(length && digits_integral--) { + uint8_t x = '0' + (value % 10); + value /= 10; + *--str = x; //iterate backwards to write string + length--; + } + + if(length && negate) { + *--str = '-'; + } + + return nall::min(initial_length, digits + 1); +} + +size_t strunsigned(char *str, uintmax_t value, size_t length /* = 0 */) { + if(length == 0) length = -1U; //"infinite" length + size_t initial_length = length; + + //count number of digits in value + int digits_integral = 1; + uintmax_t digits_integral_ = value; + while(digits_integral_ /= 10) digits_integral++; + + int digits = digits_integral; + if(!str) return digits_integral + 1; //only computing required length? + + length = nall::min(digits, length - 1); + str += length; //seek to end of target string + *str = 0; //set null terminator + + while(length--) { + uint8_t x = '0' + (value % 10); + value /= 10; + *--str = x; //iterate backwards to write string + } + + return nall::min(initial_length, digits + 1); +} + +size_t strbin(char *str, uintmax_t value, size_t length /* = 0 */) { + if(length == 0) length = -1U; //"infinite" length + size_t initial_length = length; + + //count number of digits in value + int digits_integral = 1; + uintmax_t digits_integral_ = value; + while(digits_integral_ /= 2) digits_integral++; + + int digits = digits_integral; + if(!str) return digits + 1; //only computing required length? + + length = nall::min(digits, length - 1); + str += length; //seek to end of target string + *str = 0; //set null terminator + + while(length--) { + uint8_t x = '0' + (value % 2); + value /= 2; + *--str = x; //iterate backwards to write string + } + + return nall::min(initial_length, digits + 1); +} + +//using sprintf is certainly not the most ideal method to convert +//a double to a string ... but attempting to parse a double by +//hand, digit-by-digit, results in subtle rounding errors. +// +//note: length parameter is currently ignored. +//it remains for consistency and possible future support. +size_t strdouble(char *str, double value, size_t length /* = 0 */) { + char buffer[256]; + sprintf(buffer, "%f", value); + + //remove excess 0's in fraction (2.500000 -> 2.5) + for(char *p = buffer; *p; p++) { + if(*p == '.') { + char *p = buffer + strlen(buffer) - 1; + while(*p == '0') { + if(*(p - 1) != '.') *p = 0; //... but not for eg 1.0 -> 1. + p--; + } + break; + } + } + + length = strlen(buffer); + if(str) strcpy(str, buffer); + return length + 1; +} + +#endif diff --git a/snesreader/nall/string/core.hpp b/snesreader/nall/string/core.hpp new file mode 100644 index 00000000..5c16ff5c --- /dev/null +++ b/snesreader/nall/string/core.hpp @@ -0,0 +1,109 @@ +#ifndef NALL_STRING_CORE_HPP +#define NALL_STRING_CORE_HPP + +namespace nall { + +void string::reserve(size_t size_) { + if(size_ > size) { + size = size_; + data = (char*)realloc(data, size + 1); + data[size] = 0; + } +} + +unsigned string::length() const { + return strlen(data); +} + +string& string::assign(const char *s) { + unsigned length = strlen(s); + reserve(length); + strcpy(data, s); + return *this; +} + +string& string::append(const char *s) { + unsigned length = strlen(data) + strlen(s); + reserve(length); + strcat(data, s); + return *this; +} + +string::operator const char*() const { + return data; +} + +char* string::operator()() { + return data; +} + +char& string::operator[](int index) { + reserve(index); + return data[index]; +} + +bool string::operator==(const char *str) const { return strcmp(data, str) == 0; } +bool string::operator!=(const char *str) const { return strcmp(data, str) != 0; } +bool string::operator< (const char *str) const { return strcmp(data, str) < 0; } +bool string::operator<=(const char *str) const { return strcmp(data, str) <= 0; } +bool string::operator> (const char *str) const { return strcmp(data, str) > 0; } +bool string::operator>=(const char *str) const { return strcmp(data, str) >= 0; } + +string::string() { + size = 64; + data = (char*)malloc(size + 1); + *data = 0; +} + +string::string(const char *value) { + size = strlen(value); + data = strdup(value); +} + +string::string(const string &value) { + size = strlen(value); + data = strdup(value); +} + +string& string::operator=(const string &value) { + assign(value); + return *this; +} + +string::~string() { + free(data); +} + +bool string::readfile(const char *filename) { + assign(""); + + #if !defined(_WIN32) + FILE *fp = fopen(filename, "rb"); + #else + FILE *fp = _wfopen(nall::utf16_t(filename), L"rb"); + #endif + if(!fp) return false; + + fseek(fp, 0, SEEK_END); + size_t size = ftell(fp); + rewind(fp); + char *fdata = new char[size + 1]; + unsigned unused = fread(fdata, 1, size, fp); + fclose(fp); + fdata[size] = 0; + assign(fdata); + delete[] fdata; + + return true; +} + +int lstring::find(const char *key) { + for(unsigned i = 0; i < size(); i++) { + if(operator[](i) == key) return i; + } + return -1; +} + +}; + +#endif diff --git a/snesreader/nall/string/filename.hpp b/snesreader/nall/string/filename.hpp new file mode 100644 index 00000000..29dc37d4 --- /dev/null +++ b/snesreader/nall/string/filename.hpp @@ -0,0 +1,48 @@ +#ifndef NALL_FILENAME_HPP +#define NALL_FILENAME_HPP + +namespace nall { + // "foo/bar.c" -> "foo/", "bar.c" -> "./" + inline string dir(char const *name) { + string result = name; + for(signed i = strlen(result); i >= 0; i--) { + if(result[i] == '/' || result[i] == '\\') { + result[i + 1] = 0; + break; + } + if(i == 0) result = "./"; + } + return result; + } + + // "foo/bar.c" -> "bar.c" + inline string notdir(char const *name) { + for(signed i = strlen(name); i >= 0; i--) { + if(name[i] == '/' || name[i] == '\\') { + name += i + 1; + break; + } + } + string result = name; + return result; + } + + // "foo/bar.c" -> "foo/bar" + inline string basename(char const *name) { + string result = name; + for(signed i = strlen(result); i >= 0; i--) { + if(result[i] == '/' || result[i] == '\\') { + //file has no extension + break; + } + + if(result[i] == '.') { + result[i] = 0; + break; + } + } + return result; + } +} + +#endif diff --git a/snesreader/nall/string/match.hpp b/snesreader/nall/string/match.hpp new file mode 100644 index 00000000..70184fec --- /dev/null +++ b/snesreader/nall/string/match.hpp @@ -0,0 +1,72 @@ +#ifndef NALL_STRING_MATCH_HPP +#define NALL_STRING_MATCH_HPP + +bool match(const char *p, const char *s) { + const char *p_ = 0, *s_ = 0; + + for(;;) { + if(!*s) { + while(*p == '*') p++; + return !*p; + } + + //wildcard match + if(*p == '*') { + p_ = p++, s_ = s; + continue; + } + + //any match + if(*p == '?') { + p++, s++; + continue; + } + + //ranged match + if(*p == '{') { + #define pattern(name_, rule_) \ + if(strbegin(p, name_)) { \ + if(rule_) { \ + p += sizeof(name_) - 1, s++; \ + continue; \ + } \ + goto failure; \ + } + + pattern("{alpha}", (*s >= 'A' && *s <= 'Z') || (*s >= 'a' && *s <= 'z')) + pattern("{alphanumeric}", (*s >= 'A' && *s <= 'Z') || (*s >= 'a' && *s <= 'z') || (*s >= '0' && *s <= '9')) + pattern("{binary}", (*s == '0' || *s == '1')) + pattern("{hex}", (*s >= '0' && *s <= '9') || (*s >= 'A' && *s <= 'F') || (*s >= 'a' && *s <= 'f')) + pattern("{lowercase}", (*s >= 'a' && *s <= 'z')) + pattern("{numeric}", (*s >= '0' && *s <= '9')) + pattern("{uppercase}", (*s >= 'A' && *s <= 'Z')) + pattern("{whitespace}", (*s == ' ' || *s == '\t')) + + #undef pattern + goto failure; + } + + //reserved character match + if(*p == '\\') { + p++; + //fallthrough + } + + //literal match + if(*p == *s) { + p++, *s++; + continue; + } + + //attempt wildcard rematch + failure: + if(p_) { + p = p_, s = s_ + 1; + continue; + } + + return false; + } +} + +#endif diff --git a/snesreader/nall/string/math.hpp b/snesreader/nall/string/math.hpp new file mode 100644 index 00000000..604b083e --- /dev/null +++ b/snesreader/nall/string/math.hpp @@ -0,0 +1,160 @@ +#ifndef NALL_STRING_MATH_HPP +#define NALL_STRING_MATH_HPP + +static int eval_integer(const char *&s) { + if(!*s) throw "unrecognized_integer"; + int value = 0, x = *s, y = *(s + 1); + + //hexadecimal + if(x == '0' && (y == 'X' || y == 'x')) { + s += 2; + while(true) { + if(*s >= '0' && *s <= '9') { value = value * 16 + (*s++ - '0'); continue; } + if(*s >= 'A' && *s <= 'F') { value = value * 16 + (*s++ - 'A' + 10); continue; } + if(*s >= 'a' && *s <= 'f') { value = value * 16 + (*s++ - 'a' + 10); continue; } + return value; + } + } + + //binary + if(x == '0' && (y == 'B' || y == 'b')) { + s += 2; + while(true) { + if(*s == '0' || *s == '1') { value = value * 2 + (*s++ - '0'); continue; } + return value; + } + } + + //octal (or decimal '0') + if(x == '0') { + s += 1; + while(true) { + if(*s >= '0' && *s <= '7') { value = value * 8 + (*s++ - '0'); continue; } + return value; + } + } + + //decimal + if(x >= '0' && x <= '9') { + while(true) { + if(*s >= '0' && *s <= '9') { value = value * 10 + (*s++ - '0'); continue; } + return value; + } + } + + //char + if(x == '\'' && y != '\'') { + s += 1; + while(true) { + value = value * 256 + *s++; + if(*s == '\'') { s += 1; return value; } + if(!*s) throw "mismatched_char"; + } + } + + throw "unrecognized_integer"; +} + +static int eval(const char *&s, int depth = 0) { + while(*s == ' ' || *s == '\t') s++; //trim whitespace + if(!*s) throw "unrecognized_token"; + int value = 0, x = *s, y = *(s + 1); + + if(*s == '(') { + value = eval(++s, 1); + if(*s++ != ')') throw "mismatched_group"; + } + + else if(x == '!') value = !eval(++s, 13); + else if(x == '~') value = ~eval(++s, 13); + else if(x == '+') value = +eval(++s, 13); + else if(x == '-') value = -eval(++s, 13); + + else if((x >= '0' && x <= '9') || x == '\'') value = eval_integer(s); + + else throw "unrecognized_token"; + + while(true) { + while(*s == ' ' || *s == '\t') s++; //trim whitespace + if(!*s) break; + x = *s, y = *(s + 1); + + if(depth >= 13) break; + if(x == '*') { value *= eval(++s, 13); continue; } + if(x == '/') { value /= eval(++s, 13); continue; } + if(x == '%') { value %= eval(++s, 13); continue; } + + if(depth >= 12) break; + if(x == '+') { value += eval(++s, 12); continue; } + if(x == '-') { value -= eval(++s, 12); continue; } + + if(depth >= 11) break; + if(x == '<' && y == '<') { value <<= eval(++++s, 11); continue; } + if(x == '>' && y == '>') { value >>= eval(++++s, 11); continue; } + + if(depth >= 10) break; + if(x == '<' && y == '=') { value = value <= eval(++++s, 10); continue; } + if(x == '>' && y == '=') { value = value >= eval(++++s, 10); continue; } + if(x == '<') { value = value < eval(++s, 10); continue; } + if(x == '>') { value = value > eval(++s, 10); continue; } + + if(depth >= 9) break; + if(x == '=' && y == '=') { value = value == eval(++++s, 9); continue; } + if(x == '!' && y == '=') { value = value != eval(++++s, 9); continue; } + + if(depth >= 8) break; + if(x == '&' && y != '&') { value = value & eval(++s, 8); continue; } + + if(depth >= 7) break; + if(x == '^' && y != '^') { value = value ^ eval(++s, 7); continue; } + + if(depth >= 6) break; + if(x == '|' && y != '|') { value = value | eval(++s, 6); continue; } + + if(depth >= 5) break; + if(x == '&' && y == '&') { value = eval(++++s, 5) && value; continue; } + + if(depth >= 4) break; + if(x == '^' && y == '^') { value = (!eval(++++s, 4) != !value); continue; } + + if(depth >= 3) break; + if(x == '|' && y == '|') { value = eval(++++s, 3) || value; continue; } + + if(x == '?') { + int lhs = eval(++s, 2); + if(*s != ':') throw "mismatched_ternary"; + int rhs = eval(++s, 2); + value = value ? lhs : rhs; + continue; + } + if(depth >= 2) break; + + if(depth > 0 && x == ')') break; + + throw "unrecognized_token"; + } + + return value; +} + +bool strint(const char *s, int &result) { + try { + result = eval_integer(s); + return true; + } catch(const char*) { + result = 0; + return false; + } +} + +bool strmath(const char *s, int &result) { + try { + result = eval(s); + return true; + } catch(const char*) { + result = 0; + return false; + } +} + +#endif diff --git a/snesreader/nall/string/replace.hpp b/snesreader/nall/string/replace.hpp new file mode 100644 index 00000000..db405a9b --- /dev/null +++ b/snesreader/nall/string/replace.hpp @@ -0,0 +1,103 @@ +#ifndef NALL_STRING_REPLACE_HPP +#define NALL_STRING_REPLACE_HPP + +namespace nall { + +string& string::replace(const char *key, const char *token) { + int i, z, ksl = strlen(key), tsl = strlen(token), ssl = length(); + unsigned int replace_count = 0, size = ssl; + char *buffer; + + if(ksl <= ssl) { + if(tsl > ksl) { //the new string may be longer than the old string... + for(i = 0; i <= ssl - ksl;) { //so let's find out how big of a string we'll need... + if(!memcmp(data + i, key, ksl)) { + replace_count++; + i += ksl; + } else i++; + } + size = ssl + ((tsl - ksl) * replace_count); + reserve(size); + } + + buffer = new char[size + 1]; + for(i = z = 0; i < ssl;) { + if(i <= ssl - ksl) { + if(!memcmp(data + i, key, ksl)) { + memcpy(buffer + z, token, tsl); + z += tsl; + i += ksl; + } else buffer[z++] = data[i++]; + } else buffer[z++] = data[i++]; + } + buffer[z] = 0; + + assign(buffer); + delete[] buffer; + } + + return *this; +} + +string& string::qreplace(const char *key, const char *token) { + int i, l, z, ksl = strlen(key), tsl = strlen(token), ssl = length(); + unsigned int replace_count = 0, size = ssl; + uint8_t x; + char *buffer; + + if(ksl <= ssl) { + if(tsl > ksl) { + for(i = 0; i <= ssl - ksl;) { + x = data[i]; + if(x == '\"' || x == '\'') { + l = i; + i++; + while(data[i++] != x) { + if(i == ssl) { + i = l; + break; + } + } + } + if(!memcmp(data + i, key, ksl)) { + replace_count++; + i += ksl; + } else i++; + } + size = ssl + ((tsl - ksl) * replace_count); + reserve(size); + } + + buffer = new char[size + 1]; + for(i = z = 0; i < ssl;) { + x = data[i]; + if(x == '\"' || x == '\'') { + l = i++; + while(data[i] != x && i < ssl)i++; + if(i >= ssl)i = l; + else { + memcpy(buffer + z, data + l, i - l); + z += i - l; + } + } + if(i <= ssl - ksl) { + if(!memcmp(data + i, key, ksl)) { + memcpy(buffer + z, token, tsl); + z += tsl; + i += ksl; + replace_count++; + } else buffer[z++] = data[i++]; + } else buffer[z++] = data[i++]; + } + buffer[z] = 0; + + assign(buffer); + delete[] buffer; + } + + return *this; +} + +}; + +#endif diff --git a/snesreader/nall/string/split.hpp b/snesreader/nall/string/split.hpp new file mode 100644 index 00000000..bb77dfcd --- /dev/null +++ b/snesreader/nall/string/split.hpp @@ -0,0 +1,56 @@ +#ifndef NALL_STRING_SPLIT_HPP +#define NALL_STRING_SPLIT_HPP + +namespace nall { + +void lstring::split(const char *key, const char *src, unsigned limit) { + reset(); + + int ssl = strlen(src), ksl = strlen(key); + int lp = 0, split_count = 0; + + for(int i = 0; i <= ssl - ksl;) { + if(!memcmp(src + i, key, ksl)) { + strlcpy(operator[](split_count++), src + lp, i - lp + 1); + i += ksl; + lp = i; + if(!--limit) break; + } else i++; + } + + operator[](split_count++) = src + lp; +} + +void lstring::qsplit(const char *key, const char *src, unsigned limit) { + reset(); + + int ssl = strlen(src), ksl = strlen(key); + int lp = 0, split_count = 0; + + for(int i = 0; i <= ssl - ksl;) { + uint8_t x = src[i]; + + if(x == '\"' || x == '\'') { + int z = i++; //skip opening quote + while(i < ssl && src[i] != x) i++; + if(i >= ssl) i = z; //failed match, rewind i + else { + i++; //skip closing quote + continue; //restart in case next char is also a quote + } + } + + if(!memcmp(src + i, key, ksl)) { + strlcpy(operator[](split_count++), src + lp, i - lp + 1); + i += ksl; + lp = i; + if(!--limit) break; + } else i++; + } + + operator[](split_count++) = src + lp; +} + +}; + +#endif diff --git a/snesreader/nall/string/strl.hpp b/snesreader/nall/string/strl.hpp new file mode 100644 index 00000000..329e8520 --- /dev/null +++ b/snesreader/nall/string/strl.hpp @@ -0,0 +1,48 @@ +#ifndef NALL_STRING_STRL_HPP +#define NALL_STRING_STRL_HPP + +//strlcpy, strlcat based on OpenBSD implementation by Todd C. Miller + +//return = strlen(src) +size_t strlcpy(char *dest, const char *src, size_t length) { + char *d = dest; + const char *s = src; + size_t n = length; + + if(n) { + while(--n && (*d++ = *s++)); //copy as many bytes as possible, or until null terminator reached + } + + if(!n) { + if(length) *d = 0; + while(*s++); //traverse rest of s, so that s - src == strlen(src) + } + + return (s - src - 1); //return length of copied string, sans null terminator +} + +//return = strlen(src) + min(length, strlen(dest)) +size_t strlcat(char *dest, const char *src, size_t length) { + char *d = dest; + const char *s = src; + size_t n = length; + + while(n-- && *d) d++; //find end of dest + size_t dlength = d - dest; + n = length - dlength; //subtract length of dest from maximum string length + + if(!n) return dlength + strlen(s); + + while(*s) { + if(n != 1) { + *d++ = *s; + n--; + } + s++; + } + *d = 0; + + return dlength + (s - src); //return length of resulting string, sans null terminator +} + +#endif diff --git a/snesreader/nall/string/trim.hpp b/snesreader/nall/string/trim.hpp new file mode 100644 index 00000000..8f218c54 --- /dev/null +++ b/snesreader/nall/string/trim.hpp @@ -0,0 +1,50 @@ +#ifndef NALL_STRING_TRIM_HPP +#define NALL_STRING_TRIM_HPP + +char* ltrim(char *str, const char *key) { + if(!key || !*key) return str; + while(strbegin(str, key)) { + char *dest = str, *src = str + strlen(key); + while(true) { + *dest = *src++; + if(!*dest) break; + dest++; + } + } + return str; +} + +char* rtrim(char *str, const char *key) { + if(!key || !*key) return str; + while(strend(str, key)) str[strlen(str) - strlen(key)] = 0; + return str; +} + +char* trim(char *str, const char *key) { + return ltrim(rtrim(str, key), key); +} + +char* ltrim_once(char *str, const char *key) { + if(!key || !*key) return str; + if(strbegin(str, key)) { + char *dest = str, *src = str + strlen(key); + while(true) { + *dest = *src++; + if(!*dest) break; + dest++; + } + } + return str; +} + +char* rtrim_once(char *str, const char *key) { + if(!key || !*key) return str; + if(strend(str, key)) str[strlen(str) - strlen(key)] = 0; + return str; +} + +char* trim_once(char *str, const char *key) { + return ltrim_once(rtrim_once(str, key), key); +} + +#endif diff --git a/snesreader/nall/string/utility.hpp b/snesreader/nall/string/utility.hpp new file mode 100644 index 00000000..1300d326 --- /dev/null +++ b/snesreader/nall/string/utility.hpp @@ -0,0 +1,75 @@ +#ifndef NALL_STRING_UTILITY_HPP +#define NALL_STRING_UTILITY_HPP + +size_t strlcpy(nall::string &dest, const char *src, size_t length) { + dest.reserve(length); + return strlcpy(dest(), src, length); +} + +size_t strlcat(nall::string &dest, const char *src, size_t length) { + dest.reserve(length); + return strlcat(dest(), src, length); +} + +nall::string substr(const char *src, size_t start, size_t length) { + nall::string dest; + if(length == 0) { + //copy entire string + dest = src + start; + } else { + //copy partial string + strlcpy(dest, src + start, length + 1); + } + return dest; +} + +/* very simplistic wrappers to return nall::string& instead of char* type */ + +nall::string& strlower(nall::string &str) { strlower(str()); return str; } +nall::string& strupper(nall::string &str) { strupper(str()); return str; } +nall::string& strtr(nall::string &dest, const char *before, const char *after) { strtr(dest(), before, after); return dest; } +nall::string& ltrim(nall::string &str, const char *key) { ltrim(str(), key); return str; } +nall::string& rtrim(nall::string &str, const char *key) { rtrim(str(), key); return str; } +nall::string& trim (nall::string &str, const char *key) { trim (str(), key); return str; } +nall::string& ltrim_once(nall::string &str, const char *key) { ltrim_once(str(), key); return str; } +nall::string& rtrim_once(nall::string &str, const char *key) { rtrim_once(str(), key); return str; } +nall::string& trim_once (nall::string &str, const char *key) { trim_once (str(), key); return str; } + +/* arithmetic <> string */ + +nall::string strhex(uintmax_t value) { + nall::string temp; + temp.reserve(strhex(0, value)); + strhex(temp(), value); + return temp; +} + +nall::string strsigned(intmax_t value) { + nall::string temp; + temp.reserve(strsigned(0, value)); + strsigned(temp(), value); + return temp; +} + +nall::string strunsigned(uintmax_t value) { + nall::string temp; + temp.reserve(strunsigned(0, value)); + strunsigned(temp(), value); + return temp; +} + +nall::string strbin(uintmax_t value) { + nall::string temp; + temp.reserve(strbin(0, value)); + strbin(temp(), value); + return temp; +} + +nall::string strdouble(double value) { + nall::string temp; + temp.reserve(strdouble(0, value)); + strdouble(temp(), value); + return temp; +} + +#endif diff --git a/snesreader/nall/traits.hpp b/snesreader/nall/traits.hpp new file mode 100644 index 00000000..0e7e0db3 --- /dev/null +++ b/snesreader/nall/traits.hpp @@ -0,0 +1,97 @@ +#ifndef NALL_TRAITS_HPP +#define NALL_TRAITS_HPP + +namespace nall { + //== + //is + //== + + template struct is_integral { enum { value = false }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + + template struct is_floating_point { enum { value = false }; }; + template<> struct is_floating_point { enum { value = true }; }; + template<> struct is_floating_point { enum { value = true }; }; + template<> struct is_floating_point { enum { value = true }; }; + + template struct is_bool { enum { value = false }; }; + template<> struct is_bool { enum { value = true }; }; + + template struct is_void { enum { value = false }; }; + template<> struct is_void { enum { value = true }; }; + + template struct is_arithmetic { + enum { value = is_integral::value || is_floating_point::value }; + }; + + template struct is_fundamental { + enum { value = is_integral::value || is_floating_point::value || is_void::value }; + }; + + template struct is_compound { + enum { value = !is_fundamental::value }; + }; + + template struct is_array { enum { value = false }; }; + template struct is_array { enum { value = true }; }; + template struct is_array { enum { value = true }; }; + + template struct is_const { enum { value = false }; }; + template struct is_const { enum { value = true }; }; + template struct is_const { enum { value = true }; }; + + template struct is_pointer { enum { value = false }; }; + template struct is_pointer { enum { value = true }; }; + + template struct is_reference { enum { value = false }; }; + template struct is_reference { enum { value = true }; }; + + template struct is_same { enum { value = false }; }; + template struct is_same { enum { value = true }; }; + + //=== + //add + //=== + + template struct add_const { typedef const T type; }; + template struct add_const { typedef const T type; }; + template struct add_const { typedef const T& type; }; + + template struct add_pointer { typedef T* type; }; + template struct add_pointer { typedef T** type; }; + + template struct add_reference { typedef T& type; }; + template struct add_reference { typedef T& type; }; + + //====== + //remove + //====== + + template struct remove_const { typedef T type; }; + template struct remove_const { typedef T type; }; + template struct remove_const { typedef T type; }; + + template struct remove_extent { typedef T type; }; + template struct remove_extent { typedef T type; }; + template struct remove_extent { typedef T type; }; + + template struct remove_pointer { typedef T type; }; + template struct remove_pointer { typedef T type; }; + + template struct remove_reference { typedef T type; }; + template struct remove_reference { typedef T type; }; +} + +#endif diff --git a/snesreader/nall/ups.hpp b/snesreader/nall/ups.hpp new file mode 100644 index 00000000..f255ecb3 --- /dev/null +++ b/snesreader/nall/ups.hpp @@ -0,0 +1,190 @@ +#ifndef NALL_UPS_HPP +#define NALL_UPS_HPP + +#include + +#include +#include +#include +#include + +namespace nall { + class ups { + public: + enum result { + ok, + patch_unreadable, + patch_unwritable, + patch_invalid, + input_invalid, + output_invalid, + patch_crc32_invalid, + input_crc32_invalid, + output_crc32_invalid, + }; + + ups::result create(const char *patch_fn, const uint8_t *x_data, unsigned x_size, const uint8_t *y_data, unsigned y_size) { + if(!fp.open(patch_fn, file::mode_write)) return patch_unwritable; + + crc32 = ~0; + uint32_t x_crc32 = crc32_calculate(x_data, x_size); + uint32_t y_crc32 = crc32_calculate(y_data, y_size); + + //header + write('U'); + write('P'); + write('S'); + write('1'); + encptr(x_size); + encptr(y_size); + + //body + unsigned max_size = max(x_size, y_size); + unsigned relative = 0; + for(unsigned i = 0; i < max_size;) { + uint8_t x = i < x_size ? x_data[i] : 0x00; + uint8_t y = i < y_size ? y_data[i] : 0x00; + + if(x == y) { + i++; + continue; + } + + encptr(i++ - relative); + write(x ^ y); + + while(true) { + if(i >= max_size) { + write(0x00); + break; + } + + x = i < x_size ? x_data[i] : 0x00; + y = i < y_size ? y_data[i] : 0x00; + i++; + write(x ^ y); + if(x == y) break; + } + + relative = i; + } + + //footer + for(unsigned i = 0; i < 4; i++) write(x_crc32 >> (i << 3)); + for(unsigned i = 0; i < 4; i++) write(y_crc32 >> (i << 3)); + uint32_t p_crc32 = ~crc32; + for(unsigned i = 0; i < 4; i++) write(p_crc32 >> (i << 3)); + + fp.close(); + return ok; + } + + ups::result apply(const uint8_t *p_data, unsigned p_size, const uint8_t *x_data, unsigned x_size, uint8_t *&y_data, unsigned &y_size) { + if(p_size < 18) return patch_invalid; + p_buffer = p_data; + + crc32 = ~0; + + //header + if(read() != 'U') return patch_invalid; + if(read() != 'P') return patch_invalid; + if(read() != 'S') return patch_invalid; + if(read() != '1') return patch_invalid; + + unsigned px_size = decptr(); + unsigned py_size = decptr(); + + //mirror + if(x_size != px_size && x_size != py_size) return input_invalid; + y_size = (x_size == px_size) ? py_size : px_size; + y_data = new uint8_t[y_size](); + + for(unsigned i = 0; i < x_size && i < y_size; i++) y_data[i] = x_data[i]; + for(unsigned i = x_size; i < y_size; i++) y_data[i] = 0x00; + + //body + unsigned relative = 0; + while(p_buffer < p_data + p_size - 12) { + relative += decptr(); + + while(true) { + uint8_t x = read(); + if(x && relative < y_size) { + uint8_t y = relative < x_size ? x_data[relative] : 0x00; + y_data[relative] = x ^ y; + } + relative++; + if(!x) break; + } + } + + //footer + unsigned px_crc32 = 0, py_crc32 = 0, pp_crc32 = 0; + for(unsigned i = 0; i < 4; i++) px_crc32 |= read() << (i << 3); + for(unsigned i = 0; i < 4; i++) py_crc32 |= read() << (i << 3); + uint32_t p_crc32 = ~crc32; + for(unsigned i = 0; i < 4; i++) pp_crc32 |= read() << (i << 3); + + uint32_t x_crc32 = crc32_calculate(x_data, x_size); + uint32_t y_crc32 = crc32_calculate(y_data, y_size); + + if(px_size != py_size) { + if(x_size == px_size && x_crc32 != px_crc32) return input_crc32_invalid; + if(x_size == py_size && x_crc32 != py_crc32) return input_crc32_invalid; + if(y_size == px_size && y_crc32 != px_crc32) return output_crc32_invalid; + if(y_size == py_size && y_crc32 != py_crc32) return output_crc32_invalid; + } else { + if(x_crc32 != px_crc32 && x_crc32 != py_crc32) return input_crc32_invalid; + if(y_crc32 != px_crc32 && y_crc32 != py_crc32) return output_crc32_invalid; + if(x_crc32 == y_crc32 && px_crc32 != py_crc32) return output_crc32_invalid; + if(x_crc32 != y_crc32 && px_crc32 == py_crc32) return output_crc32_invalid; + } + + if(p_crc32 != pp_crc32) return patch_crc32_invalid; + return ok; + } + + private: + file fp; + uint32_t crc32; + const uint8_t *p_buffer; + + uint8_t read() { + uint8_t n = *p_buffer++; + crc32 = crc32_adjust(crc32, n); + return n; + } + + void write(uint8_t n) { + fp.write(n); + crc32 = crc32_adjust(crc32, n); + } + + void encptr(uint64_t offset) { + while(true) { + uint64_t x = offset & 0x7f; + offset >>= 7; + if(offset == 0) { + write(0x80 | x); + break; + } + write(x); + offset--; + } + } + + uint64_t decptr() { + uint64_t offset = 0, shift = 1; + while(true) { + uint8_t x = read(); + offset += (x & 0x7f) * shift; + if(x & 0x80) break; + shift <<= 7; + offset += shift; + } + return offset; + } + }; +} + +#endif diff --git a/snesreader/nall/utf8.hpp b/snesreader/nall/utf8.hpp new file mode 100644 index 00000000..c66c341a --- /dev/null +++ b/snesreader/nall/utf8.hpp @@ -0,0 +1,72 @@ +#ifndef NALL_UTF8_HPP +#define NALL_UTF8_HPP + +//UTF-8 <> UTF-16 conversion +//used only for Win32; Linux, etc use UTF-8 internally + +#if defined(_WIN32) + +#undef _WIN32_WINNT +#define _WIN32_WINNT 0x0501 +#undef NOMINMAX +#define NOMINMAX +#include +#undef interface + +namespace nall { + //UTF-8 to UTF-16 + class utf16_t { + public: + operator wchar_t*() { + return buffer; + } + + operator const wchar_t*() const { + return buffer; + } + + utf16_t(const char *s = "") { + if(!s) s = ""; + unsigned length = MultiByteToWideChar(CP_UTF8, 0, s, -1, 0, 0); + buffer = new wchar_t[length + 1](); + MultiByteToWideChar(CP_UTF8, 0, s, -1, buffer, length); + } + + ~utf16_t() { + delete[] buffer; + } + + private: + wchar_t *buffer; + }; + + //UTF-16 to UTF-8 + class utf8_t { + public: + operator char*() { + return buffer; + } + + operator const char*() const { + return buffer; + } + + utf8_t(const wchar_t *s = L"") { + if(!s) s = L""; + unsigned length = WideCharToMultiByte(CP_UTF8, 0, s, -1, 0, 0, (const char*)0, (BOOL*)0); + buffer = new char[length + 1](); + WideCharToMultiByte(CP_UTF8, 0, s, -1, buffer, length, (const char*)0, (BOOL*)0); + } + + ~utf8_t() { + delete[] buffer; + } + + private: + char *buffer; + }; +} + +#endif //if defined(_WIN32) + +#endif diff --git a/snesreader/nall/utility.hpp b/snesreader/nall/utility.hpp new file mode 100644 index 00000000..fa73f8cb --- /dev/null +++ b/snesreader/nall/utility.hpp @@ -0,0 +1,36 @@ +#ifndef NALL_UTILITY_HPP +#define NALL_UTILITY_HPP + +namespace nall { + template + inline void swap(T &x, T &y) { + T temp(x); + x = y; + y = temp; + } + + template + struct base_from_member { + T value; + base_from_member(T value_) : value(value_) {} + }; + + class noncopyable { + protected: + noncopyable() {} + ~noncopyable() {} + + private: + noncopyable(const noncopyable&); + const noncopyable& operator=(const noncopyable&); + }; + + template + inline T* allocate(size_t size, const T &value) { + T *array = new T[size]; + for(size_t i = 0; i < size; i++) array[i] = value; + return array; + } +} + +#endif diff --git a/snesreader/nall/varint.hpp b/snesreader/nall/varint.hpp new file mode 100644 index 00000000..cc3bb17c --- /dev/null +++ b/snesreader/nall/varint.hpp @@ -0,0 +1,92 @@ +#ifndef NALL_VARINT_HPP +#define NALL_VARINT_HPP + +#include +#include +#include + +namespace nall { + template class uint_t { + private: + enum { bytes = (bits + 7) >> 3 }; //minimum number of bytes needed to store value + typedef typename static_if< + sizeof(int) >= bytes, + unsigned int, + typename static_if< + sizeof(long) >= bytes, + unsigned long, + typename static_if< + sizeof(long long) >= bytes, + unsigned long long, + void + >::type + >::type + >::type T; + static_assert::value> uint_assert; + T data; + + public: + inline operator T() const { return data; } + inline T operator ++(int) { T r = data; data = uclip(data + 1); return r; } + inline T operator --(int) { T r = data; data = uclip(data - 1); return r; } + inline T operator ++() { return data = uclip(data + 1); } + inline T operator --() { return data = uclip(data - 1); } + inline T operator =(const T i) { return data = uclip(i); } + inline T operator |=(const T i) { return data = uclip(data | i); } + inline T operator ^=(const T i) { return data = uclip(data ^ i); } + inline T operator &=(const T i) { return data = uclip(data & i); } + inline T operator<<=(const T i) { return data = uclip(data << i); } + inline T operator>>=(const T i) { return data = uclip(data >> i); } + inline T operator +=(const T i) { return data = uclip(data + i); } + inline T operator -=(const T i) { return data = uclip(data - i); } + inline T operator *=(const T i) { return data = uclip(data * i); } + inline T operator /=(const T i) { return data = uclip(data / i); } + inline T operator %=(const T i) { return data = uclip(data % i); } + + inline uint_t() : data(0) {} + inline uint_t(const T i) : data(uclip(i)) {} + }; + + template class int_t { + private: + enum { bytes = (bits + 7) >> 3 }; //minimum number of bytes needed to store value + typedef typename static_if< + sizeof(int) >= bytes, + signed int, + typename static_if< + sizeof(long) >= bytes, + signed long, + typename static_if< + sizeof(long long) >= bytes, + signed long long, + void + >::type + >::type + >::type T; + static_assert::value> int_assert; + T data; + + public: + inline operator T() const { return data; } + inline T operator ++(int) { T r = data; data = sclip(data + 1); return r; } + inline T operator --(int) { T r = data; data = sclip(data - 1); return r; } + inline T operator ++() { return data = sclip(data + 1); } + inline T operator --() { return data = sclip(data - 1); } + inline T operator =(const T i) { return data = sclip(i); } + inline T operator |=(const T i) { return data = sclip(data | i); } + inline T operator ^=(const T i) { return data = sclip(data ^ i); } + inline T operator &=(const T i) { return data = sclip(data & i); } + inline T operator<<=(const T i) { return data = sclip(data << i); } + inline T operator>>=(const T i) { return data = sclip(data >> i); } + inline T operator +=(const T i) { return data = sclip(data + i); } + inline T operator -=(const T i) { return data = sclip(data - i); } + inline T operator *=(const T i) { return data = sclip(data * i); } + inline T operator /=(const T i) { return data = sclip(data / i); } + inline T operator %=(const T i) { return data = sclip(data % i); } + + inline int_t() : data(0) {} + inline int_t(const T i) : data(sclip(i)) {} + }; +} + +#endif diff --git a/snesreader/nall/vector.hpp b/snesreader/nall/vector.hpp new file mode 100644 index 00000000..aeff81c0 --- /dev/null +++ b/snesreader/nall/vector.hpp @@ -0,0 +1,162 @@ +#ifndef NALL_VECTOR_HPP +#define NALL_VECTOR_HPP + +#include +#include +#include +#include + +namespace nall { + //linear_vector + //memory: O(capacity * 2) + // + //linear_vector uses placement new + manual destructor calls to create a + //contiguous block of memory for all objects. accessing individual elements + //is fast, though resizing the array incurs significant overhead. + //reserve() overhead is reduced from quadratic time to amortized constant time + //by resizing twice as much as requested. + // + //if objects hold memory address references to themselves (introspection), a + //valid copy constructor will be needed to keep pointers valid. + + template class linear_vector : noncopyable { + protected: + T *pool; + unsigned poolsize, objectsize; + + public: + unsigned size() const { return objectsize; } + unsigned capacity() const { return poolsize; } + + void reset() { + if(pool) { + for(unsigned i = 0; i < objectsize; i++) pool[i].~T(); + free(pool); + } + pool = 0; + poolsize = 0; + objectsize = 0; + } + + void reserve(unsigned newsize) { + newsize = bit::round(newsize); //round to nearest power of two (for amortized growth) + + T *poolcopy = (T*)malloc(newsize * sizeof(T)); + for(unsigned i = 0; i < min(objectsize, newsize); i++) new(poolcopy + i) T(pool[i]); + for(unsigned i = 0; i < objectsize; i++) pool[i].~T(); + free(pool); + pool = poolcopy; + poolsize = newsize; + objectsize = min(objectsize, newsize); + } + + void resize(unsigned newsize) { + if(newsize > poolsize) reserve(newsize); + + if(newsize < objectsize) { + //vector is shrinking; destroy excess objects + for(unsigned i = newsize; i < objectsize; i++) pool[i].~T(); + } else if(newsize > objectsize) { + //vector is expanding; allocate new objects + for(unsigned i = objectsize; i < newsize; i++) new(pool + i) T; + } + + objectsize = newsize; + } + + void add(const T data) { + if(objectsize + 1 > poolsize) reserve(objectsize + 1); + new(pool + objectsize++) T(data); + } + + inline T& operator[](unsigned index) { + if(index >= objectsize) resize(index + 1); + return pool[index]; + } + + inline const T& operator[](unsigned index) const { + if(index >= objectsize) throw "vector[] out of bounds"; + return pool[index]; + } + + linear_vector() : pool(0), poolsize(0), objectsize(0) {} + ~linear_vector() { reset(); } + }; + + //pointer_vector + //memory: O(1) + // + //pointer_vector keeps an array of pointers to each vector object. this adds + //significant overhead to individual accesses, but allows for optimal memory + //utilization. + // + //by guaranteeing that the base memory address of each objects never changes, + //this avoids the need for an object to have a valid copy constructor. + + template class pointer_vector : noncopyable { + protected: + T **pool; + unsigned poolsize, objectsize; + + public: + unsigned size() const { return objectsize; } + unsigned capacity() const { return poolsize; } + + void reset() { + if(pool) { + for(unsigned i = 0; i < objectsize; i++) { if(pool[i]) delete pool[i]; } + free(pool); + } + pool = 0; + poolsize = 0; + objectsize = 0; + } + + void reserve(unsigned newsize) { + newsize = bit::round(newsize); //round to nearest power of two (for amortized growth) + + for(unsigned i = newsize; i < objectsize; i++) { + if(pool[i]) { delete pool[i]; pool[i] = 0; } + } + + pool = (T**)realloc(pool, newsize * sizeof(T*)); + for(unsigned i = poolsize; i < newsize; i++) pool[i] = 0; + poolsize = newsize; + objectsize = min(objectsize, newsize); + } + + void resize(unsigned newsize) { + if(newsize > poolsize) reserve(newsize); + + for(unsigned i = newsize; i < objectsize; i++) { + if(pool[i]) { delete pool[i]; pool[i] = 0; } + } + + objectsize = newsize; + } + + void add(const T data) { + if(objectsize + 1 > poolsize) reserve(objectsize + 1); + pool[objectsize++] = new T(data); + } + + inline T& operator[](unsigned index) { + if(index >= objectsize) resize(index + 1); + if(!pool[index]) pool[index] = new T; + return *pool[index]; + } + + inline const T& operator[](unsigned index) const { + if(index >= objectsize || !pool[index]) throw "vector[] out of bounds"; + return *pool[index]; + } + + pointer_vector() : pool(0), poolsize(0), objectsize(0) {} + ~pointer_vector() { reset(); } + }; + + //default vector type + template class vector : public linear_vector {}; +} + +#endif diff --git a/snesreader/snesreader.cpp b/snesreader/snesreader.cpp new file mode 100644 index 00000000..fe0a2b7b --- /dev/null +++ b/snesreader/snesreader.cpp @@ -0,0 +1,232 @@ +#include "snesreader.hpp" + +#if defined(_WIN32) + #define dllexport __declspec(dllexport) +#else + #define dllexport +#endif + +#include "fex/fex.h" +#include "libjma/jma.h" +extern "C" char* uncompressStream(int, int); //micro-bunzip + +#define QT_CORE_LIB +#include + +#include +#include +using namespace nall; + +dllexport const char* snesreader_supported() { + //libjma does not work on 64-bit architectures + #if !defined(__amd64) && !defined(_M_X64) + return "*.zip *.z *.7z *.rar *.gz *.bz2 *.jma"; + #else + return "*.zip *.z *.7z *.rar *.gz *.bz2"; + #endif +} + +void snesreader_apply_ips(const char *filename, uint8_t *&data, unsigned &size) { + file fp; + if(fp.open(filename, file::mode_read) == false) return; + + unsigned psize = fp.size(); + uint8_t *pdata = new uint8_t[psize]; + fp.read(pdata, psize); + fp.close(); + + if(psize < 8 || pdata[0] != 'P' || pdata[1] != 'A' || pdata[2] != 'T' || pdata[3] != 'C' || pdata[4] != 'H') { delete[] pdata; return; } + + unsigned outsize = 0; + uint8_t *outdata = new uint8_t[16 * 1024 * 1024]; + memset(outdata, 0, 16 * 1024 * 1024); + memcpy(outdata, data, size); + + unsigned offset = 5; + while(offset < psize - 3) { + unsigned addr; + addr = pdata[offset++] << 16; + addr |= pdata[offset++] << 8; + addr |= pdata[offset++] << 0; + + unsigned size; + size = pdata[offset++] << 8; + size |= pdata[offset++] << 0; + + if(size == 0) { + //RLE + size = pdata[offset++] << 8; + size |= pdata[offset++] << 0; + + for(unsigned n = addr; n < addr + size;) { + outdata[n++] = pdata[offset]; + if(n > outsize) outsize = n; + } + offset++; + } else { + //uncompressed + for(unsigned n = addr; n < addr + size;) { + outdata[n++] = pdata[offset++]; + if(n > outsize) outsize = n; + } + } + } + + delete[] pdata; + delete[] data; + data = outdata; + size = max(size, outsize); +} + +bool snesreader_load_normal(const char *filename, uint8_t *&data, unsigned &size) { + file fp; + if(fp.open(filename, file::mode_read) == false) return false; + size = fp.size(); + data = new uint8_t[size]; + fp.read(data, size); + fp.close(); + return true; +} + +#include "filechooser.cpp" + +bool snesreader_load_fex(string &filename, uint8_t *&data, unsigned &size) { + fex_t *fex; + fex_open(&fex, filename); + if(fex_done(fex)) { fex_close(fex); return false; } + + if(!fileChooser) fileChooser = new FileChooser; + fileChooser->list.reset(); + + while(fex_done(fex) == false) { + fex_stat(fex); + const char *name = fex_name(fex); + //only add valid ROM extensions to list (ignore text files, save RAM files, etc) + if(striend(name, ".sfc") || striend(name, ".smc") + || striend(name, ".swc") || striend(name, ".fig") + || striend(name, ".bs") || striend(name, ".st") + || striend(name, ".gb") || striend(name, ".sgb") || striend(name, ".gbc") + || striend(filename, ".gz") //GZip files only contain a single file + ) { + fileChooser->list[fileChooser->list.size()] = name; + } + fex_next(fex); + } + + string name = fileChooser->exec(); + if(name == "") { fex_close(fex); return false; } + + fex_rewind(fex); + while(fex_done(fex) == false) { + fex_stat(fex); + if(name == fex_name(fex)) { + size = fex_size(fex); + data = new uint8_t[size]; + fex_read(fex, data, size); + fex_close(fex); + + if(fileChooser->list.size() > 1) { + strtr(name, "\\", "/"); + strtr(filename, "\\", "/"); + + //retain only path from filename, "/foo/bar.7z" -> "/foo/" + for(signed i = filename.length() - 1; i >= 0; i--) { + if(filename[i] == '/') { + filename[i + 1] = 0; + break; + } + } + + //append only filename from archive, "foo/bar.sfc" -> "bar.sfc" + lstring part; + part.split("/", name); + filename = string() << filename << part[part.size() - 1]; + } + + return true; + } + fex_next(fex); + } + + fex_close(fex); + return false; +} + +bool snesreader_load_bz2(const char *filename, uint8_t *&data, unsigned &size) { + //TODO: need a way to get the size of a bzip2 file, so we can pre-allocate + //a buffer to decompress into memory. for now, use a temporary file. + + string name = "/tmp/.bz2_temporary_decompression_object"; + FILE *wr; + wr = fopen_utf8(name, "wb"); + if(!wr) { + //try the local directory + name = ".bz2_temporary_decompression_object"; + wr = fopen_utf8(name, "wb"); + //can't get write access, so give up + if(!wr) return false; + } + + FILE *fp = fopen_utf8(filename, "rb"); + uncompressStream(fileno(fp), fileno(wr)); + fclose(fp); + fclose(wr); + + bool success = snesreader_load_normal(name, data, size); + unlink(name); + return success; +} + +bool snesreader_load_jma(const char *filename, uint8_t *&data, unsigned &size) { + try { + JMA::jma_open JMAFile(filename); + std::string name; + + std::vector file_info = JMAFile.get_files_info(); + for(std::vector::iterator i = file_info.begin(); i != file_info.end(); i++) { + name = i->name; + size = i->size; + break; + } + + data = new uint8_t[size]; + JMAFile.extract_file(name, data); + return true; + } catch(JMA::jma_errors) { + return false; + } +} + +dllexport bool snesreader_load(string &filename, uint8_t *&data, unsigned &size) { + if(file::exists(filename) == false) return false; + + bool success = false; + if(striend(filename, ".zip") + || striend(filename, ".z") + || striend(filename, ".7z") + || striend(filename, ".rar") + || striend(filename, ".gz")) { + success = snesreader_load_fex(filename, data, size); + } else if(striend(filename, ".bz2")) { + success = snesreader_load_bz2(filename, data, size); + } else if(striend(filename, ".jma")) { + success = snesreader_load_jma(filename, data, size); + } else { + success = snesreader_load_normal(filename, data, size); + } + + if(success == false) return false; + + //apply IPS patch, if it exists + string patchname = filename; + for(int i = patchname.length() - 1; i >= 0; i--) { + if(patchname[i] == '.') { patchname[i] = 0; break; } + } + patchname << ".ips"; + if(file::exists(patchname)) snesreader_apply_ips(patchname, data, size); + + //remove copier header, if it exists + if((size & 0x7fff) == 512) memmove(data, data + 512, size -= 512); + + return true; +} diff --git a/snesreader/snesreader.hpp b/snesreader/snesreader.hpp new file mode 100644 index 00000000..1935b43a --- /dev/null +++ b/snesreader/snesreader.hpp @@ -0,0 +1,7 @@ +#include +namespace nall { class string; } + +extern "C" { + const char* snesreader_supported(); + bool snesreader_load(nall::string &filename, uint8_t *&data, unsigned &size); +} diff --git a/snesreader/sync.sh b/snesreader/sync.sh new file mode 100644 index 00000000..4bbaf34f --- /dev/null +++ b/snesreader/sync.sh @@ -0,0 +1,2 @@ +rm -r nall +cp -r ../nall ./nall diff --git a/snesreader/unrar/archive.cpp b/snesreader/unrar/archive.cpp new file mode 100644 index 00000000..338a0eb7 --- /dev/null +++ b/snesreader/unrar/archive.cpp @@ -0,0 +1,97 @@ +#include +#include "rar.hpp" + +#include "unrar.h" + +Archive::Archive() : Raw( this ) +{ + OldFormat=false; + Solid=false; + + CurBlockPos=0; + NextBlockPos=0; + + memset(&NewMhd,0,sizeof(NewMhd)); + NewMhd.HeadType=MAIN_HEAD; + NewMhd.HeadSize=SIZEOF_NEWMHD; + HeaderCRC=0; +} + +bool Archive::IsSignature(byte *D) +{ + bool Valid=false; + if (D[0]==0x52) +#ifndef SFX_MODULE + if (D[1]==0x45 && D[2]==0x7e && D[3]==0x5e) + { + OldFormat=true; + Valid=true; + } + else +#endif + if (D[1]==0x61 && D[2]==0x72 && D[3]==0x21 && D[4]==0x1a && D[5]==0x07 && D[6]==0x00) + { + OldFormat=false; + Valid=true; + } + return(Valid); +} + + +unrar_err_t Archive::IsArchive() +{ + if (Read(MarkHead.Mark,SIZEOF_MARKHEAD)!=SIZEOF_MARKHEAD) + return unrar_err_not_arc; + + if (IsSignature(MarkHead.Mark)) + { + if (OldFormat) + Seek(0,SEEK_SET); + } + else + { + if (SFXSize==0) + return unrar_err_not_arc; + } + + unrar_err_t error = + ReadHeader(); + // (no need to seek to next) + if ( error != unrar_ok ) + return error; + +#ifndef SFX_MODULE + if (OldFormat) + { + NewMhd.Flags=OldMhd.Flags & 0x3f; + NewMhd.HeadSize=OldMhd.HeadSize; + } + else +#endif + { + if (HeaderCRC!=NewMhd.HeadCRC) + { + return unrar_err_corrupt; + } + } + bool + Volume=(NewMhd.Flags & MHD_VOLUME); + Solid=(NewMhd.Flags & MHD_SOLID)!=0; + bool + Encrypted=(NewMhd.Flags & MHD_PASSWORD)!=0; + + // (removed decryption and volume handling) + + if ( Encrypted ) + return unrar_err_encrypted; + + if ( Volume ) + return unrar_err_segmented; + + return unrar_ok; +} + +void Archive::SeekToNext() +{ + Seek(NextBlockPos,SEEK_SET); +} diff --git a/snesreader/unrar/archive.hpp b/snesreader/unrar/archive.hpp new file mode 100644 index 00000000..0106e6fd --- /dev/null +++ b/snesreader/unrar/archive.hpp @@ -0,0 +1,45 @@ +#ifndef _RAR_ARCHIVE_ +#define _RAR_ARCHIVE_ + +typedef ComprDataIO File; +#include "rawread.hpp" + +class Archive:public File +{ +private: + bool IsSignature(byte *D); + void ConvertUnknownHeader(); + int ReadOldHeader(); + + RawRead Raw; + + MarkHeader MarkHead; + OldMainHeader OldMhd; + + int CurHeaderType; + +public: + Archive(); + unrar_err_t IsArchive(); + unrar_err_t ReadHeader(); + void SeekToNext(); + bool IsArcDir(); + bool IsArcLabel(); + int GetHeaderType() {return(CurHeaderType);}; + + BaseBlock ShortBlock; + MainHeader NewMhd; + FileHeader NewLhd; + SubBlockHeader SubBlockHead; + FileHeader SubHead; + ProtectHeader ProtectHead; + + Int64 CurBlockPos; + Int64 NextBlockPos; + + bool Solid; + enum { SFXSize = 0 }; // self-extracting not supported + ushort HeaderCRC; +}; + +#endif diff --git a/snesreader/unrar/arcread.cpp b/snesreader/unrar/arcread.cpp new file mode 100644 index 00000000..3a9f711c --- /dev/null +++ b/snesreader/unrar/arcread.cpp @@ -0,0 +1,314 @@ +#include "rar.hpp" + +#include "unrar.h" +#include "unicode.hpp" +#include "encname.hpp" + +// arcread.cpp +unrar_err_t Archive::ReadHeader() +{ + CurBlockPos=Tell(); + +#ifndef SFX_MODULE + if (OldFormat) + { + ReadOldHeader(); + + if ( Raw.Size() == 0 ) + return unrar_err_arc_eof; // right at end of file + + if ( Raw.PaddedSize() > 0 ) // added check + return unrar_err_corrupt; // missing data + + return unrar_ok; + } +#endif + + Raw.Reset(); + + // (removed decryption) + + Raw.Read(SIZEOF_SHORTBLOCKHEAD); + if (Raw.Size()==0) + { + return unrar_err_arc_eof; // right at end of file + } + + Raw.Get(ShortBlock.HeadCRC); + byte HeadType; + Raw.Get(HeadType); + ShortBlock.HeadType=(HEADER_TYPE)HeadType; + Raw.Get(ShortBlock.Flags); + Raw.Get(ShortBlock.HeadSize); + if (ShortBlock.HeadSize 0 ) // fewer than requested bytes read above? + return unrar_err_corrupt; // missing data + + NextBlockPos=CurBlockPos+ShortBlock.HeadSize; + + switch(ShortBlock.HeadType) + { + case MAIN_HEAD: + *(BaseBlock *)&NewMhd=ShortBlock; + Raw.Get(NewMhd.HighPosAV); + Raw.Get(NewMhd.PosAV); + check( Raw.ReadPos == Raw.DataSize ); // we should have read all fields + break; + case FILE_HEAD: + case NEWSUB_HEAD: + { + FileHeader *hd=ShortBlock.HeadType==FILE_HEAD ? &NewLhd:&SubHead; + *(BaseBlock *)hd=ShortBlock; + Raw.Get(hd->PackSize); + Raw.Get(hd->UnpSize); + Raw.Get(hd->HostOS); + Raw.Get(hd->FileCRC); + Raw.Get(hd->FileTime); + Raw.Get(hd->UnpVer); + Raw.Get(hd->Method); + Raw.Get(hd->NameSize); + Raw.Get(hd->FileAttr); + if (hd->Flags & LHD_LARGE) + { + Raw.Get(hd->HighPackSize); + Raw.Get(hd->HighUnpSize); + } + else + { + hd->HighPackSize=hd->HighUnpSize=0; + if (hd->UnpSize==0xffffffff) + { + // TODO: what the heck is this for anyway? + hd->UnpSize=0; + hd->HighUnpSize=0x7fffffff; + } + } + hd->FullPackSize=int32to64(hd->HighPackSize,hd->PackSize); + hd->FullUnpSize=int32to64(hd->HighUnpSize,hd->UnpSize); + + if ( int32to64( 1, 0 ) == 0 && (hd->HighPackSize || hd->HighUnpSize) ) + return unrar_err_huge; + + char (&FileName) [sizeof hd->FileName] = hd->FileName; // eliminated local buffer + int NameSize=Min(hd->NameSize,sizeof(FileName)-1); + Raw.Get((byte *)FileName,NameSize); + FileName[NameSize]=0; + + if (hd->HeadType==NEWSUB_HEAD) + { + // have to adjust this, even through we're ignoring this block + NextBlockPos+=hd->FullPackSize; + break; + } + else + if (hd->HeadType==FILE_HEAD) + { + if (hd->Flags & LHD_UNICODE) + { + EncodeFileName NameCoder; + int Length=strlen(FileName); + if (Length==hd->NameSize) + { + UtfToWide(FileName,hd->FileNameW,sizeof(hd->FileNameW)/sizeof(hd->FileNameW[0])-1); + WideToChar(hd->FileNameW,hd->FileName,sizeof(hd->FileName)/sizeof(hd->FileName[0])-1); + ExtToInt(hd->FileName,hd->FileName); + } + else + { + Length++; + NameCoder.Decode(FileName,(byte *)FileName+Length, + hd->NameSize-Length,hd->FileNameW, + sizeof(hd->FileNameW)/sizeof(hd->FileNameW[0])); + } + if (*hd->FileNameW==0) + hd->Flags &= ~LHD_UNICODE; + } + else + *hd->FileNameW=0; + + ConvertUnknownHeader(); + } + if (hd->Flags & LHD_SALT) + Raw.Get(hd->Salt,SALT_SIZE); + hd->mtime.SetDos(hd->FileTime); + if (hd->Flags & LHD_EXTTIME) + { + ushort Flags; + Raw.Get(Flags); + // Ignore additional time information + for (int I=0;I<4;I++) + { + uint rmode=Flags>>(3-I)*4; + if ((rmode & 8)==0) + continue; + if (I!=0) + { + uint DosTime; + Raw.Get(DosTime); + } + + // skip time info + int count=rmode&3; + for (int J=0;JFullPackSize; + bool CRCProcessedOnly=(hd->Flags & LHD_COMMENT)!=0; + HeaderCRC=~Raw.GetCRC(CRCProcessedOnly)&0xffff; + if (hd->HeadCRC!=HeaderCRC) + return unrar_err_corrupt; + check( CRCProcessedOnly == false ); // I need to test on archives where this doesn't hold + check( Raw.ReadPos == Raw.DataSize ); // we should have read all fields + } + break; +#ifndef SFX_MODULE + // Handle these block types just so we can adjust NextBlockPos properly + case PROTECT_HEAD: + Raw.Get(ProtectHead.DataSize); + NextBlockPos+=ProtectHead.DataSize; + break; + case SUB_HEAD: + Raw.Get(SubBlockHead.DataSize); + NextBlockPos+=SubBlockHead.DataSize; + break; +#endif + default: + if (ShortBlock.Flags & LONG_BLOCK) + { + uint DataSize; + Raw.Get(DataSize); + NextBlockPos+=DataSize; + } + break; + } + HeaderCRC=~Raw.GetCRC(false)&0xffff; + CurHeaderType=ShortBlock.HeadType; + // (removed decryption) + + if (NextBlockPosCurBlockPos ? Raw.Size():0); +} +#endif + +// (removed name case and attribute conversion) + +bool Archive::IsArcDir() +{ + return((NewLhd.Flags & LHD_WINDOWMASK)==LHD_DIRECTORY); +} + + +bool Archive::IsArcLabel() +{ + return(NewLhd.HostOS<=HOST_WIN32 && (NewLhd.FileAttr & 8)); +} + +// TODO: use '\\' on Windows? +char const CPATHDIVIDER = '/'; +#define charnext(s) ((s)+1) + +void Archive::ConvertUnknownHeader() +{ + if (NewLhd.UnpVer<20 && (NewLhd.FileAttr & 0x10)) + NewLhd.Flags|=LHD_DIRECTORY; + if (NewLhd.HostOS>=HOST_MAX) + { + if ((NewLhd.Flags & LHD_WINDOWMASK)==LHD_DIRECTORY) + NewLhd.FileAttr=0x10; + else + NewLhd.FileAttr=0x20; + } + { + for (char *s=NewLhd.FileName;*s!=0;s=charnext(s)) + { + if (*s=='/' || *s=='\\') + *s=CPATHDIVIDER; + } + } + // (removed Apple Unicode handling) + for (wchar *s=NewLhd.FileNameW;*s!=0;s++) + { + if (*s=='/' || *s=='\\') + *s=CPATHDIVIDER; + } +} diff --git a/snesreader/unrar/array.hpp b/snesreader/unrar/array.hpp new file mode 100644 index 00000000..1f2d4e8c --- /dev/null +++ b/snesreader/unrar/array.hpp @@ -0,0 +1,135 @@ +#ifndef _RAR_ARRAY_ +#define _RAR_ARRAY_ + +template class Array +{ +private: + T *Buffer; + int BufSize; + int AllocSize; +public: + Rar_Error_Handler& ErrHandler; + Array(Rar_Error_Handler*); + Array(int Size,Rar_Error_Handler*); + ~Array(); + inline void CleanData(); + inline T& operator [](int Item); + inline int Size(); + void Add(int Items); + void Alloc(int Items); + void Reset(); + void operator = (Array &Src); + void Push(T Item); + T* Addr() {return(Buffer);} +}; + +template void Array::CleanData() +{ + Buffer=NULL; + BufSize=0; + AllocSize=0; +} + + +template Array::Array(Rar_Error_Handler* eh) : ErrHandler( *eh ) +{ + CleanData(); +} + + +template Array::Array(int Size, Rar_Error_Handler* eh) : ErrHandler( *eh ) +{ + Buffer=(T *)rarmalloc(sizeof(T)*Size); + if (Buffer==NULL && Size!=0) + ErrHandler.MemoryError(); + + AllocSize=BufSize=Size; +} + + +template Array::~Array() +{ + if (Buffer!=NULL) + rarfree(Buffer); +} + + +template inline T& Array::operator [](int Item) +{ + return(Buffer[Item]); +} + + +template inline int Array::Size() +{ + return(BufSize); +} + + +template void Array::Add(int Items) +{ + int BufSize = this->BufSize; // don't change actual vars until alloc succeeds + T* Buffer = this->Buffer; + + BufSize+=Items; + if (BufSize>AllocSize) + { + int Suggested=AllocSize+AllocSize/4+32; + int NewSize=Max(BufSize,Suggested); + + Buffer=(T *)rarrealloc(Buffer,NewSize*sizeof(T)); + if (Buffer==NULL) + ErrHandler.MemoryError(); + AllocSize=NewSize; + } + + this->Buffer = Buffer; + this->BufSize = BufSize; +} + + +template void Array::Alloc(int Items) +{ + if (Items>AllocSize) + Add(Items-BufSize); + else + BufSize=Items; +} + + +template void Array::Reset() +{ + // Keep memory allocated if it's small + // Eliminates constant reallocation when scanning archive + if ( AllocSize < 1024/sizeof(T) ) + { + BufSize = 0; + return; + } + + if (Buffer!=NULL) + { + rarfree(Buffer); + Buffer=NULL; + } + BufSize=0; + AllocSize=0; +} + + +template void Array::operator =(Array &Src) +{ + Reset(); + Alloc(Src.BufSize); + if (Src.BufSize!=0) + memcpy((void *)Buffer,(void *)Src.Buffer,Src.BufSize*sizeof(T)); +} + + +template void Array::Push(T Item) +{ + Add(1); + (*this)[Size()-1]=Item; +} + +#endif diff --git a/snesreader/unrar/changes.txt b/snesreader/unrar/changes.txt new file mode 100644 index 00000000..35345fd5 --- /dev/null +++ b/snesreader/unrar/changes.txt @@ -0,0 +1,141 @@ +unrar_core source code changes +------------------------------ +Unrar_core is based on UnRAR (unrarsrc-3.8.5.tar.gz) by Alexander L. +Roshal. The original sources have been HEAVILY modified, trimmed down, +and purged of all OS-specific calls for file access and other +unnecessary operations. Support for encryption, recovery records, and +segmentation has been REMOVED. See license.txt for licensing. In +particular, this code cannot be used to re-create the RAR compression +algorithm, which is proprietary. + +If you obtained this code as a part of my File_Extractor library and +want to use it on its own, get my unrar_core library, which includes +examples and documentation. + +The source is as close as possible to the original, to make it simple to +update when a new version of UnRAR comes out. In many places the +original names and object nesting are kept, even though it's a bit +harder to follow. See rar.hpp for the main "glue". + +Website: http://www.slack.net/~ant/ +E-mail : Shay Green + + +Contents +-------- +* Diff-friendly changes +* Removal of features +* Error reporting changes +* Minor tweaks +* Unrar findings + + +Diff-friendly changes +--------------------- +To make my source code changes more easily visible with a line-based +file diff, I've tried to make changes by inserting or deleting lines, +rather than modifying them. So if the original declared a static array + + static int array [4] = { 1, 2, 3, 4 }; + +and I want to make it const, I add the const on a line before + + const // added + static int array [4] = { 1, 2, 3, 4 }; + +rather than on the same line + + static const int array [4] = { 1, 2, 3, 4 }; + +This way a diff will simply show an added line, making it clear what was +added. If I simply inserted const on the same line, it wouldn't be as +clear what all I had changed. + +I've also made use of several macros rather than changing the source +text. For example, since a class name like Unpack might easily conflict, +I've renamed it to Rar_Unpack by using #define Unpack Rar_Unpack rather +than changing the source text. These macros are only defined when +compiling the library sources; the user-visible unrar.h is very clean. + + +Removal of features +------------------- +This library is meant for simple access to common archives without +having to extract them first. Encryption, segmentation, huge files, and +self-extracting archives aren't common for things that need to be +accessed in this manner, so I've removed support for them. Also, +encryption adds complexity to the code that must be maintained. +Segmentation would require a way to specify the other segments. + + +Error reporting changes +----------------------- +The original used C++ exceptions to report errors. I've eliminated use +of these through a combination of error codes and longjmp. This allows +use of the library from C or some other language which doesn't easily +support exceptions. + +I tried to make as few changes as possible in the conversion. Due to the +number of places file reads occur, propagating an error code via return +statements would have required too many code changes. Instead, I perform +the read, save the error code, and return 0 bytes read in case of an +error. I also ensure that the calling code interprets this zero in an +acceptable way. I then check this saved error code after the operation +completes, and have it take priority over the error the RAR code +returned. I do a similar thing for write errors. + + +Minor tweaks +------------ +- Eliminated as many GCC warnings as reasonably possible. + +- Non-class array allocations now use malloc(), allowing the code to be +linked without the standard C++ library (particularly, operator new). +Class object allocations use a class-specific allocator that just calls +malloc(), also avoiding calls to operator new. + +- Made all unchanging static data const. Several pieces of static data +in the original code weren't marked const where they could be. + +- Initialization of some static tables was done on an as-needed basis, +creating a problem when extracting from archives in multiple threads. +This initialization can now be done by the user before any archives are +opened. + +- Tweaked CopyString, the major bottleneck during compression. I inlined +it, cached some variables in locals in case the compiler couldn't easily +see that the memory accesses don't modify them, and made them use +memcpy() where possible. This improved performance by at least 20% on +x86. Perhaps it won't work as well on files with lots of smaller string +matches. + +- Some .cpp files are #included by others. I've added guards to these so +that you can simply compile all .cpp files and not get any redefinition +errors. + +- The current solid extraction position is kept track of, allowing the +user to randomly extract files without regard to proper extraction +order. The library optimizes solid extraction and only restarts it if +the user is extracting a file earlier in the archive than the last +solid-extracted one. + +- Most of the time a solid file's data is already contiguously in the +internal Unpack::Window, which unrar_extract_mem() takes advantage of. +This avoids extra allocation in many cases. + +- Allocation of Unpack is delayed until the first extraction, rather +than being allocated immediately on opening the archive. This allows +scanning with minimal memory usage. + + +Unrar findings +-------------- +- Apparently the LHD_SOLID flag indicates that file depends on previous +files, rather than that later files depend on the current file's +contents. Thus this flag can't be used to intelligently decide which +files need to be internally extracted when skipping them, making it +necessary to internally extract every file before the one to be +extracted, if the archive is solid. + +-- +Shay Green diff --git a/snesreader/unrar/coder.cpp b/snesreader/unrar/coder.cpp new file mode 100644 index 00000000..c3f3aac6 --- /dev/null +++ b/snesreader/unrar/coder.cpp @@ -0,0 +1,49 @@ +// #included by unpack.cpp +#ifdef RAR_COMMON_HPP + +inline unsigned int RangeCoder::GetChar() +{ + return(UnpackRead->GetChar()); +} + + +void RangeCoder::InitDecoder(Unpack *UnpackRead) +{ + RangeCoder::UnpackRead=UnpackRead; + + low=code=0; + range=uint(-1); + for (int i=0;i < 4;i++) + code=(code << 8) | GetChar(); +} + + +#define ARI_DEC_NORMALIZE(code,low,range,read) \ +{ \ + while ((low^(low+range))GetChar(); \ + range <<= 8; \ + low <<= 8; \ + } \ +} + + +inline int RangeCoder::GetCurrentCount() +{ + return (code-low)/(range /= SubRange.scale); +} + + +inline uint RangeCoder::GetCurrentShiftCount(uint SHIFT) +{ + return (code-low)/(range >>= SHIFT); +} + + +inline void RangeCoder::Decode() +{ + low += range*SubRange.LowCount; + range *= SubRange.HighCount-SubRange.LowCount; +} +#endif diff --git a/snesreader/unrar/coder.hpp b/snesreader/unrar/coder.hpp new file mode 100644 index 00000000..8384cdc6 --- /dev/null +++ b/snesreader/unrar/coder.hpp @@ -0,0 +1,24 @@ +/**************************************************************************** + * Contents: 'Carryless rangecoder' by Dmitry Subbotin * + ****************************************************************************/ + +const uint TOP=1 << 24, BOT=1 << 15; + +class RangeCoder +{ +public: + void InitDecoder(Unpack *UnpackRead); + inline int GetCurrentCount(); + inline uint GetCurrentShiftCount(uint SHIFT); + inline void Decode(); + inline void PutChar(unsigned int c); + inline unsigned int GetChar(); + + uint low, code, range; + struct SUBRANGE + { + uint LowCount, HighCount, scale; + } SubRange; + + Unpack *UnpackRead; +}; diff --git a/snesreader/unrar/compress.hpp b/snesreader/unrar/compress.hpp new file mode 100644 index 00000000..3181e45d --- /dev/null +++ b/snesreader/unrar/compress.hpp @@ -0,0 +1,36 @@ +#ifndef _RAR_COMPRESS_ +#define _RAR_COMPRESS_ + +class ComprDataIO; +class PackingFileTable; + +#define CODEBUFSIZE 0x4000 +#define MAXWINSIZE 0x400000 +#define MAXWINMASK (MAXWINSIZE-1) + +#define LOW_DIST_REP_COUNT 16 + +#define NC 299 /* alphabet = {0, 1, 2, ..., NC - 1} */ +#define DC 60 +#define LDC 17 +#define RC 28 +#define HUFF_TABLE_SIZE (NC+DC+RC+LDC) +#define BC 20 + +#define NC20 298 /* alphabet = {0, 1, 2, ..., NC - 1} */ +#define DC20 48 +#define RC20 28 +#define BC20 19 +#define MC20 257 + +enum {CODE_HUFFMAN,CODE_LZ,CODE_LZ2,CODE_REPEATLZ,CODE_CACHELZ, + CODE_STARTFILE,CODE_ENDFILE,CODE_VM,CODE_VMDATA}; + + +enum FilterType { + FILTER_NONE, FILTER_PPM /*dummy*/, FILTER_E8, FILTER_E8E9, + FILTER_UPCASETOLOW, FILTER_AUDIO, FILTER_RGB, FILTER_DELTA, + FILTER_ITANIUM, FILTER_E8E9V2 +}; + +#endif diff --git a/snesreader/unrar/crc.cpp b/snesreader/unrar/crc.cpp new file mode 100644 index 00000000..bc23b5a9 --- /dev/null +++ b/snesreader/unrar/crc.cpp @@ -0,0 +1,69 @@ +#include "rar.hpp" + +uint CRCTab[256]; + +void InitCRC() +{ + for (int I=0;I<256;I++) + { + uint C=I; + for (int J=0;J<8;J++) + C=(C & 1) ? (C>>1)^0xEDB88320L : (C>>1); + CRCTab[I]=C; + } +} + + +uint CRC(uint StartCRC,const void *Addr,size_t Size) +{ + // Always initialized ahead of time, and this func call makes it a non-leaf func. + if (false) + if (CRCTab[1]==0) + InitCRC(); + byte *Data=(byte *)Addr; +#if defined(LITTLE_ENDIAN) && defined(PRESENT_INT32) && defined(ALLOW_NOT_ALIGNED_INT) + +#ifdef _MSC_VER + // avoid a warning about 'Data' pointer truncation in 64 bit mode + #pragma warning( disable : 4311 ) +#endif + + while (Size>0 && ((long)Data & 7)) + { + StartCRC=CRCTab[(byte)(StartCRC^Data[0])]^(StartCRC>>8); + Size--; + Data++; + } + while (Size>=8) + { + StartCRC^=*(uint32 *)Data; + StartCRC=CRCTab[(byte)StartCRC]^(StartCRC>>8); + StartCRC=CRCTab[(byte)StartCRC]^(StartCRC>>8); + StartCRC=CRCTab[(byte)StartCRC]^(StartCRC>>8); + StartCRC=CRCTab[(byte)StartCRC]^(StartCRC>>8); + StartCRC^=*(uint32 *)(Data+4); + StartCRC=CRCTab[(byte)StartCRC]^(StartCRC>>8); + StartCRC=CRCTab[(byte)StartCRC]^(StartCRC>>8); + StartCRC=CRCTab[(byte)StartCRC]^(StartCRC>>8); + StartCRC=CRCTab[(byte)StartCRC]^(StartCRC>>8); + Data+=8; + Size-=8; + } +#endif + for (size_t I=0;I>8); + return(StartCRC); +} + +#ifndef SFX_MODULE +ushort OldCRC(ushort StartCRC,const void *Addr,size_t Size) +{ + byte *Data=(byte *)Addr; + for (size_t I=0;I>15))&0xffff; + } + return(StartCRC); +} +#endif diff --git a/snesreader/unrar/encname.cpp b/snesreader/unrar/encname.cpp new file mode 100644 index 00000000..6f57cd91 --- /dev/null +++ b/snesreader/unrar/encname.cpp @@ -0,0 +1,57 @@ +#include "rar.hpp" + +EncodeFileName::EncodeFileName() +{ + Flags=0; + FlagBits=0; + FlagsPos=0; + DestSize=0; +} + + + + +void EncodeFileName::Decode(char *Name,byte *EncName,int EncSize,wchar *NameW, + int MaxDecSize) +{ + int EncPos=0,DecPos=0; + byte HighByte=EncName[EncPos++]; + while (EncPos>6) + { + case 0: + NameW[DecPos++]=EncName[EncPos++]; + break; + case 1: + NameW[DecPos++]=EncName[EncPos++]+(HighByte<<8); + break; + case 2: + NameW[DecPos++]=EncName[EncPos]+(EncName[EncPos+1]<<8); + EncPos+=2; + break; + case 3: + { + int Length=EncName[EncPos++]; + if (Length & 0x80) + { + byte Correction=EncName[EncPos++]; + for (Length=(Length&0x7f)+2;Length>0 && DecPos0 && DecPos +#include "rar.hpp" + +#include "unrar.h" + +#define DataIO Arc + +unrar_err_t CmdExtract::ExtractCurrentFile( bool SkipSolid, bool check_compatibility_only ) +{ + check( Arc.GetHeaderType() == FILE_HEAD ); + + if ( Arc.NewLhd.Flags & (LHD_SPLIT_AFTER | LHD_SPLIT_BEFORE) ) + return unrar_err_segmented; + + if ( Arc.NewLhd.Flags & LHD_PASSWORD ) + return unrar_err_encrypted; + + if ( !check_compatibility_only ) + { + check( Arc.NextBlockPos-Arc.NewLhd.FullPackSize == Arc.Tell() ); + Arc.Seek(Arc.NextBlockPos-Arc.NewLhd.FullPackSize,SEEK_SET); + } + + // (removed lots of command-line handling) + +#ifdef SFX_MODULE + if ((Arc.NewLhd.UnpVer!=UNP_VER && Arc.NewLhd.UnpVer!=29) && + Arc.NewLhd.Method!=0x30) +#else + if (Arc.NewLhd.UnpVer<13 || Arc.NewLhd.UnpVer>UNP_VER) +#endif + { + if (Arc.NewLhd.UnpVer>UNP_VER) + return unrar_err_new_algo; + return unrar_err_old_algo; + } + + if ( check_compatibility_only ) + return unrar_ok; + + // (removed lots of command-line/encryption/volume handling) + + update_first_file_pos(); + FileCount++; + DataIO.UnpFileCRC=Arc.OldFormat ? 0 : 0xffffffff; + // (removed decryption) + DataIO.SetPackedSizeToRead(Arc.NewLhd.FullPackSize); + // (removed command-line handling) + DataIO.SetSkipUnpCRC(SkipSolid); + + if (Arc.NewLhd.Method==0x30) + UnstoreFile(Arc.NewLhd.FullUnpSize); + else + { + // Defer creation of Unpack until first extraction + if ( !Unp ) + { + Unp = new Unpack( &Arc ); + if ( !Unp ) + return unrar_err_memory; + + Unp->Init( NULL ); + } + + Unp->SetDestSize(Arc.NewLhd.FullUnpSize); +#ifndef SFX_MODULE + if (Arc.NewLhd.UnpVer<=15) + Unp->DoUnpack(15,FileCount>1 && Arc.Solid); + else +#endif + Unp->DoUnpack(Arc.NewLhd.UnpVer,Arc.NewLhd.Flags & LHD_SOLID); + } + + // (no need to seek to next file) + + if (!SkipSolid) + { + if (Arc.OldFormat && UINT32(DataIO.UnpFileCRC)==UINT32(Arc.NewLhd.FileCRC) || + !Arc.OldFormat && UINT32(DataIO.UnpFileCRC)==UINT32(Arc.NewLhd.FileCRC^0xffffffff)) + { + // CRC is correct + } + else + { + return unrar_err_corrupt; + } + } + + // (removed broken file handling) + // (removed command-line handling) + + return unrar_ok; +} + + +void CmdExtract::UnstoreFile(Int64 DestUnpSize) +{ + Buffer.Alloc(Min(DestUnpSize,0x10000)); + while (1) + { + unsigned int Code=DataIO.UnpRead(&Buffer[0],Buffer.Size()); + if (Code==0 || (int)Code==-1) + break; + Code=Code=0) + DestUnpSize-=Code; + } + Buffer.Reset(); +} diff --git a/snesreader/unrar/getbits.cpp b/snesreader/unrar/getbits.cpp new file mode 100644 index 00000000..559bdd03 --- /dev/null +++ b/snesreader/unrar/getbits.cpp @@ -0,0 +1,34 @@ +#include "rar.hpp" + +BitInput::BitInput() +{ + InBuf = (byte*) rarmalloc( MAX_SIZE ); + + // Otherwise getbits() reads uninitialized memory + // TODO: instead of clearing entire block, just clear last two + // bytes after reading from file + if ( InBuf ) + memset( InBuf, 0, MAX_SIZE ); +} + +BitInput::~BitInput() +{ + rarfree( InBuf ); +} + +void BitInput::handle_mem_error( Rar_Error_Handler& ErrHandler ) +{ + if ( !InBuf ) + ErrHandler.MemoryError(); +} + +void BitInput::faddbits(int Bits) +{ + addbits(Bits); +} + + +unsigned int BitInput::fgetbits() +{ + return(getbits()); +} diff --git a/snesreader/unrar/getbits.hpp b/snesreader/unrar/getbits.hpp new file mode 100644 index 00000000..5a4cb4a3 --- /dev/null +++ b/snesreader/unrar/getbits.hpp @@ -0,0 +1,40 @@ +#ifndef _RAR_GETBITS_ +#define _RAR_GETBITS_ + +class BitInput + : public Rar_Allocator +{ +public: + enum BufferSize {MAX_SIZE=0x8000}; +protected: + int InAddr,InBit; +public: + BitInput(); + ~BitInput(); + void handle_mem_error( Rar_Error_Handler& ); + + byte *InBuf; + + void InitBitInput() + { + InAddr=InBit=0; + } + void addbits(int Bits) + { + Bits+=InBit; + InAddr+=Bits>>3; + InBit=Bits&7; + } + unsigned int getbits() + { + unsigned int BitField=(uint)InBuf[InAddr] << 16; + BitField|=(uint)InBuf[InAddr+1] << 8; + BitField|=(uint)InBuf[InAddr+2]; + BitField >>= (8-InBit); + return(BitField & 0xffff); + } + void faddbits(int Bits); + unsigned int fgetbits(); + bool Overflow(int IncPtr) {return(InAddr+IncPtr>=MAX_SIZE);} +}; +#endif diff --git a/snesreader/unrar/headers.hpp b/snesreader/unrar/headers.hpp new file mode 100644 index 00000000..abe1c66a --- /dev/null +++ b/snesreader/unrar/headers.hpp @@ -0,0 +1,145 @@ +#ifndef _RAR_HEADERS_ +#define _RAR_HEADERS_ + +#define SIZEOF_MARKHEAD 7 +#define SIZEOF_OLDMHD 7 +#define SIZEOF_NEWMHD 13 +#define SIZEOF_OLDLHD 21 +#define SIZEOF_NEWLHD 32 +#define SIZEOF_SHORTBLOCKHEAD 7 +#define SIZEOF_SUBBLOCKHEAD 14 +#define SIZEOF_COMMHEAD 13 + +#define UNP_VER 36 + +#define MHD_VOLUME 0x0001 +#define MHD_COMMENT 0x0002 +#define MHD_SOLID 0x0008 +#define MHD_PASSWORD 0x0080 + +#define LHD_SPLIT_BEFORE 0x0001 +#define LHD_SPLIT_AFTER 0x0002 +#define LHD_PASSWORD 0x0004 +#define LHD_COMMENT 0x0008 +#define LHD_SOLID 0x0010 + +#define LHD_WINDOWMASK 0x00e0 +#define LHD_DIRECTORY 0x00e0 + +#define LHD_LARGE 0x0100 +#define LHD_UNICODE 0x0200 +#define LHD_SALT 0x0400 +#define LHD_EXTTIME 0x1000 + +#define LONG_BLOCK 0x8000 + +enum HEADER_TYPE { + MARK_HEAD=0x72,MAIN_HEAD=0x73,FILE_HEAD=0x74,COMM_HEAD=0x75,AV_HEAD=0x76, + SUB_HEAD=0x77,PROTECT_HEAD=0x78,SIGN_HEAD=0x79,NEWSUB_HEAD=0x7a, + ENDARC_HEAD=0x7b +}; + +enum HOST_SYSTEM { + HOST_MSDOS=0,HOST_OS2=1,HOST_WIN32=2,HOST_UNIX=3,HOST_MACOS=4, + HOST_BEOS=5,HOST_MAX +}; + +struct OldMainHeader +{ + byte Mark[4]; + ushort HeadSize; + byte Flags; +}; + + +struct OldFileHeader +{ + uint PackSize; + uint UnpSize; + ushort FileCRC; + ushort HeadSize; + uint FileTime; + byte FileAttr; + byte Flags; + byte UnpVer; + byte NameSize; + byte Method; +}; + + +struct MarkHeader +{ + byte Mark[7]; +}; + + +struct BaseBlock +{ + ushort HeadCRC; + HEADER_TYPE HeadType;//byte + ushort Flags; + ushort HeadSize; +}; + +struct BlockHeader:BaseBlock +{ + union { + uint DataSize; + uint PackSize; + }; +}; + + +struct MainHeader:BaseBlock +{ + ushort HighPosAV; + uint PosAV; +}; + +#define SALT_SIZE 8 + +struct FileHeader:BlockHeader +{ + uint UnpSize; + byte HostOS; + uint FileCRC; + uint FileTime; + byte UnpVer; + byte Method; + ushort NameSize; + union { + uint FileAttr; + uint SubFlags; + }; +/* optional */ + uint HighPackSize; + uint HighUnpSize; +/* names */ + char FileName[NM*4]; // *4 to avoid using lots of stack in arcread + wchar FileNameW[NM]; +/* optional */ + byte Salt[SALT_SIZE]; + + RarTime mtime; +/* dummy */ + Int64 FullPackSize; + Int64 FullUnpSize; +}; + +// SubBlockHeader and its successors were used in RAR 2.x format. +// RAR 3.x uses FileHeader with NEWSUB_HEAD HeadType for subblocks. +struct SubBlockHeader:BlockHeader +{ + ushort SubType; + byte Level; +}; + +struct ProtectHeader:BlockHeader +{ + byte Version; + ushort RecSectors; + uint TotalBlocks; + byte Mark[8]; +}; + +#endif diff --git a/snesreader/unrar/license.txt b/snesreader/unrar/license.txt new file mode 100644 index 00000000..2aa475c7 --- /dev/null +++ b/snesreader/unrar/license.txt @@ -0,0 +1,40 @@ + ****** ***** ****** UnRAR - free utility for RAR archives + ** ** ** ** ** ** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ****** ******* ****** License for use and distribution of + ** ** ** ** ** ** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ** ** ** ** ** ** FREE portable version + ~~~~~~~~~~~~~~~~~~~~~ + + The source code of UnRAR utility is freeware. This means: + + 1. All copyrights to RAR and the utility UnRAR are exclusively + owned by the author - Alexander Roshal. + + 2. The UnRAR sources may be used in any software to handle RAR + archives without limitations free of charge, but cannot be used + to re-create the RAR compression algorithm, which is proprietary. + Distribution of modified UnRAR sources in separate form or as a + part of other software is permitted, provided that it is clearly + stated in the documentation and source comments that the code may + not be used to develop a RAR (WinRAR) compatible archiver. + + 3. The UnRAR utility may be freely distributed. It is allowed + to distribute UnRAR inside of other software packages. + + 4. THE RAR ARCHIVER AND THE UnRAR UTILITY ARE DISTRIBUTED "AS IS". + NO WARRANTY OF ANY KIND IS EXPRESSED OR IMPLIED. YOU USE AT + YOUR OWN RISK. THE AUTHOR WILL NOT BE LIABLE FOR DATA LOSS, + DAMAGES, LOSS OF PROFITS OR ANY OTHER KIND OF LOSS WHILE USING + OR MISUSING THIS SOFTWARE. + + 5. Installing and using the UnRAR utility signifies acceptance of + these terms and conditions of the license. + + 6. If you don't agree with terms of the license you must remove + UnRAR files from your storage devices and cease to use the + utility. + + Thank you for your interest in RAR and UnRAR. + + + Alexander L. Roshal \ No newline at end of file diff --git a/snesreader/unrar/model.cpp b/snesreader/unrar/model.cpp new file mode 100644 index 00000000..68e1a4f1 --- /dev/null +++ b/snesreader/unrar/model.cpp @@ -0,0 +1,612 @@ +// #included by unpack.cpp +#ifdef RAR_COMMON_HPP +/**************************************************************************** + * This file is part of PPMd project * + * Written and distributed to public domain by Dmitry Shkarin 1997, * + * 1999-2000 * + * Contents: model description and encoding/decoding routines * + ****************************************************************************/ + +inline PPM_CONTEXT* PPM_CONTEXT::createChild(ModelPPM *Model,STATE* pStats, + STATE& FirstState) +{ + PPM_CONTEXT* pc = (PPM_CONTEXT*) Model->SubAlloc.AllocContext(); + if ( pc ) + { + pc->NumStats=1; + pc->OneState=FirstState; + pc->Suffix=this; + pStats->Successor=pc; + } + return pc; +} + + +ModelPPM::ModelPPM() +{ + MinContext=NULL; + MaxContext=NULL; + MedContext=NULL; +} + + +void ModelPPM::RestartModelRare() +{ + int i, k, m; + memset(CharMask,0,sizeof(CharMask)); + SubAlloc.InitSubAllocator(); + InitRL=-(MaxOrder < 12 ? MaxOrder:12)-1; + MinContext = MaxContext = (PPM_CONTEXT*) SubAlloc.AllocContext(); + MinContext->Suffix=NULL; + OrderFall=MaxOrder; + MinContext->U.SummFreq=(MinContext->NumStats=256)+1; + FoundState=MinContext->U.Stats=(STATE*)SubAlloc.AllocUnits(256/2); + for (RunLength=InitRL, PrevSuccess=i=0;i < 256;i++) + { + MinContext->U.Stats[i].Symbol=i; + MinContext->U.Stats[i].Freq=1; + MinContext->U.Stats[i].Successor=NULL; + } + + static const ushort InitBinEsc[]={ + 0x3CDD,0x1F3F,0x59BF,0x48F3,0x64A1,0x5ABC,0x6632,0x6051 + }; + + for (i=0;i < 128;i++) + for (k=0;k < 8;k++) + for (m=0;m < 64;m += 8) + BinSumm[i][k+m]=BIN_SCALE-InitBinEsc[k]/(i+2); + for (i=0;i < 25;i++) + for (k=0;k < 16;k++) + SEE2Cont[i][k].init(5*i+10); +} + + +void ModelPPM::StartModelRare(int MaxOrder) +{ + int i, k, m ,Step; + EscCount=1; +/* + if (MaxOrder < 2) + { + memset(CharMask,0,sizeof(CharMask)); + OrderFall=ModelPPM::MaxOrder; + MinContext=MaxContext; + while (MinContext->Suffix != NULL) + { + MinContext=MinContext->Suffix; + OrderFall--; + } + FoundState=MinContext->U.Stats; + MinContext=MaxContext; + } + else +*/ + { + ModelPPM::MaxOrder=MaxOrder; + RestartModelRare(); + NS2BSIndx[0]=2*0; + NS2BSIndx[1]=2*1; + memset(NS2BSIndx+2,2*2,9); + memset(NS2BSIndx+11,2*3,256-11); + for (i=0;i < 3;i++) + NS2Indx[i]=i; + for (m=i, k=Step=1;i < 256;i++) + { + NS2Indx[i]=m; + if ( !--k ) + { + k = ++Step; + m++; + } + } + memset(HB2Flag,0,0x40); + memset(HB2Flag+0x40,0x08,0x100-0x40); + DummySEE2Cont.Shift=PERIOD_BITS; + } +} + + +void PPM_CONTEXT::rescale(ModelPPM *Model) +{ + int OldNS=NumStats, i=NumStats-1, Adder, EscFreq; + STATE* p1, * p; + for (p=Model->FoundState;p != U.Stats;p--) + _PPMD_SWAP(p[0],p[-1]); + U.Stats->Freq += 4; + U.SummFreq += 4; + EscFreq=U.SummFreq-p->Freq; + Adder=(Model->OrderFall != 0); + U.SummFreq = (p->Freq=(p->Freq+Adder) >> 1); + do + { + EscFreq -= (++p)->Freq; + U.SummFreq += (p->Freq=(p->Freq+Adder) >> 1); + if (p[0].Freq > p[-1].Freq) + { + STATE tmp=*(p1=p); + do + { + p1[0]=p1[-1]; + } while (--p1 != U.Stats && tmp.Freq > p1[-1].Freq); + *p1=tmp; + } + } while ( --i ); + if (p->Freq == 0) + { + do + { + i++; + } while ((--p)->Freq == 0); + EscFreq += i; + if ((NumStats -= i) == 1) + { + STATE tmp=*U.Stats; + do + { + tmp.Freq-=(tmp.Freq >> 1); + EscFreq>>=1; + } while (EscFreq > 1); + Model->SubAlloc.FreeUnits(U.Stats,(OldNS+1) >> 1); + *(Model->FoundState=&OneState)=tmp; return; + } + } + U.SummFreq += (EscFreq -= (EscFreq >> 1)); + int n0=(OldNS+1) >> 1, n1=(NumStats+1) >> 1; + if (n0 != n1) + U.Stats = (STATE*) Model->SubAlloc.ShrinkUnits(U.Stats,n0,n1); + Model->FoundState=U.Stats; +} + + +inline PPM_CONTEXT* ModelPPM::CreateSuccessors(bool Skip,STATE* p1) +{ + // (removed conditional static) + STATE UpState; + PPM_CONTEXT* pc=MinContext, * UpBranch=FoundState->Successor; + STATE * p, * ps[MAX_O], ** pps=ps; + if ( !Skip ) + { + *pps++ = FoundState; + if ( !pc->Suffix ) + goto NO_LOOP; + } + if ( p1 ) + { + p=p1; + pc=pc->Suffix; + goto LOOP_ENTRY; + } + do + { + pc=pc->Suffix; + if (pc->NumStats != 1) + { + if ((p=pc->U.Stats)->Symbol != FoundState->Symbol) + do + { + p++; + } while (p->Symbol != FoundState->Symbol); + } + else + p=&(pc->OneState); +LOOP_ENTRY: + if (p->Successor != UpBranch) + { + pc=p->Successor; + break; + } + *pps++ = p; + } while ( pc->Suffix ); +NO_LOOP: + if (pps == ps) + return pc; + UpState.Symbol=*(byte*) UpBranch; + UpState.Successor=(PPM_CONTEXT*) (((byte*) UpBranch)+1); + if (pc->NumStats != 1) + { + if ((byte*) pc <= SubAlloc.pText) + return(NULL); + if ((p=pc->U.Stats)->Symbol != UpState.Symbol) + do + { + p++; + } while (p->Symbol != UpState.Symbol); + uint cf=p->Freq-1; + uint s0=pc->U.SummFreq-pc->NumStats-cf; + UpState.Freq=1+((2*cf <= s0)?(5*cf > s0):((2*cf+3*s0-1)/(2*s0))); + } + else + UpState.Freq=pc->OneState.Freq; + do + { + pc = pc->createChild(this,*--pps,UpState); + if ( !pc ) + return NULL; + } while (pps != ps); + return pc; +} + + +inline void ModelPPM::UpdateModel() +{ + STATE fs = *FoundState, *p = NULL; + PPM_CONTEXT *pc, *Successor; + uint ns1, ns, cf, sf, s0; + if (fs.Freq < MAX_FREQ/4 && (pc=MinContext->Suffix) != NULL) + { + if (pc->NumStats != 1) + { + if ((p=pc->U.Stats)->Symbol != fs.Symbol) + { + do + { + p++; + } while (p->Symbol != fs.Symbol); + if (p[0].Freq >= p[-1].Freq) + { + _PPMD_SWAP(p[0],p[-1]); + p--; + } + } + if (p->Freq < MAX_FREQ-9) + { + p->Freq += 2; + pc->U.SummFreq += 2; + } + } + else + { + p=&(pc->OneState); + p->Freq += (p->Freq < 32); + } + } + if ( !OrderFall ) + { + MinContext=MaxContext=FoundState->Successor=CreateSuccessors(true,p); + if ( !MinContext ) + goto RESTART_MODEL; + return; + } + *SubAlloc.pText++ = fs.Symbol; + Successor = (PPM_CONTEXT*) SubAlloc.pText; + if (SubAlloc.pText >= SubAlloc.FakeUnitsStart) + goto RESTART_MODEL; + if ( fs.Successor ) + { + if ((byte*) fs.Successor <= SubAlloc.pText && + (fs.Successor=CreateSuccessors(false,p)) == NULL) + goto RESTART_MODEL; + if ( !--OrderFall ) + { + Successor=fs.Successor; + SubAlloc.pText -= (MaxContext != MinContext); + } + } + else + { + FoundState->Successor=Successor; + fs.Successor=MinContext; + } + s0=MinContext->U.SummFreq-(ns=MinContext->NumStats)-(fs.Freq-1); + for (pc=MaxContext;pc != MinContext;pc=pc->Suffix) + { + if ((ns1=pc->NumStats) != 1) + { + if ((ns1 & 1) == 0) + { + pc->U.Stats=(STATE*) SubAlloc.ExpandUnits(pc->U.Stats,ns1 >> 1); + if ( !pc->U.Stats ) + goto RESTART_MODEL; + } + pc->U.SummFreq += (2*ns1 < ns)+2*((4*ns1 <= ns) & (pc->U.SummFreq <= 8*ns1)); + } + else + { + p=(STATE*) SubAlloc.AllocUnits(1); + if ( !p ) + goto RESTART_MODEL; + *p=pc->OneState; + pc->U.Stats=p; + if (p->Freq < MAX_FREQ/4-1) + p->Freq += p->Freq; + else + p->Freq = MAX_FREQ-4; + pc->U.SummFreq=p->Freq+InitEsc+(ns > 3); + } + cf=2*fs.Freq*(pc->U.SummFreq+6); + sf=s0+pc->U.SummFreq; + if (cf < 6*sf) + { + cf=1+(cf > sf)+(cf >= 4*sf); + pc->U.SummFreq += 3; + } + else + { + cf=4+(cf >= 9*sf)+(cf >= 12*sf)+(cf >= 15*sf); + pc->U.SummFreq += cf; + } + p=pc->U.Stats+ns1; + p->Successor=Successor; + p->Symbol = fs.Symbol; + p->Freq = cf; + pc->NumStats=++ns1; + } + MaxContext=MinContext=fs.Successor; + return; +RESTART_MODEL: + RestartModelRare(); + EscCount=0; +} + + +// Tabulated escapes for exponential symbol distribution +static const byte ExpEscape[16]={ 25,14, 9, 7, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 2 }; +#define GET_MEAN(SUMM,SHIFT,ROUND) ((SUMM+(1 << (SHIFT-ROUND))) >> (SHIFT)) + + + +inline void PPM_CONTEXT::decodeBinSymbol(ModelPPM *Model) +{ + STATE& rs=OneState; + Model->HiBitsFlag=Model->HB2Flag[Model->FoundState->Symbol]; + ushort& bs=Model->BinSumm[rs.Freq-1][Model->PrevSuccess+ + Model->NS2BSIndx[Suffix->NumStats-1]+ + Model->HiBitsFlag+2*Model->HB2Flag[rs.Symbol]+ + ((Model->RunLength >> 26) & 0x20)]; + if (Model->Coder.GetCurrentShiftCount(TOT_BITS) < bs) + { + Model->FoundState=&rs; + rs.Freq += (rs.Freq < 128); + Model->Coder.SubRange.LowCount=0; + Model->Coder.SubRange.HighCount=bs; + bs = SHORT16(bs+INTERVAL-GET_MEAN(bs,PERIOD_BITS,2)); + Model->PrevSuccess=1; + Model->RunLength++; + } + else + { + Model->Coder.SubRange.LowCount=bs; + bs = SHORT16(bs-GET_MEAN(bs,PERIOD_BITS,2)); + Model->Coder.SubRange.HighCount=BIN_SCALE; + Model->InitEsc=ExpEscape[bs >> 10]; + Model->NumMasked=1; + Model->CharMask[rs.Symbol]=Model->EscCount; + Model->PrevSuccess=0; + Model->FoundState=NULL; + } +} + + +inline void PPM_CONTEXT::update1(ModelPPM *Model,STATE* p) +{ + (Model->FoundState=p)->Freq += 4; + U.SummFreq += 4; + if (p[0].Freq > p[-1].Freq) + { + _PPMD_SWAP(p[0],p[-1]); + Model->FoundState=--p; + if (p->Freq > MAX_FREQ) + rescale(Model); + } +} + + + + +inline bool PPM_CONTEXT::decodeSymbol1(ModelPPM *Model) +{ + Model->Coder.SubRange.scale=U.SummFreq; + STATE* p=U.Stats; + int i, HiCnt; + int count=Model->Coder.GetCurrentCount(); + if (count>=Model->Coder.SubRange.scale) + return(false); + if (count < (HiCnt=p->Freq)) + { + Model->PrevSuccess=(2*(Model->Coder.SubRange.HighCount=HiCnt) > Model->Coder.SubRange.scale); + Model->RunLength += Model->PrevSuccess; + (Model->FoundState=p)->Freq=(HiCnt += 4); + U.SummFreq += 4; + if (HiCnt > MAX_FREQ) + rescale(Model); + Model->Coder.SubRange.LowCount=0; + return(true); + } + else + if (Model->FoundState==NULL) + return(false); + Model->PrevSuccess=0; + i=NumStats-1; + while ((HiCnt += (++p)->Freq) <= count) + if (--i == 0) + { + Model->HiBitsFlag=Model->HB2Flag[Model->FoundState->Symbol]; + Model->Coder.SubRange.LowCount=HiCnt; + Model->CharMask[p->Symbol]=Model->EscCount; + i=(Model->NumMasked=NumStats)-1; + Model->FoundState=NULL; + do + { + Model->CharMask[(--p)->Symbol]=Model->EscCount; + } while ( --i ); + Model->Coder.SubRange.HighCount=Model->Coder.SubRange.scale; + return(true); + } + Model->Coder.SubRange.LowCount=(Model->Coder.SubRange.HighCount=HiCnt)-p->Freq; + update1(Model,p); + return(true); +} + + +inline void PPM_CONTEXT::update2(ModelPPM *Model,STATE* p) +{ + (Model->FoundState=p)->Freq += 4; + U.SummFreq += 4; + if (p->Freq > MAX_FREQ) + rescale(Model); + Model->EscCount++; + Model->RunLength=Model->InitRL; +} + + +inline SEE2_CONTEXT* PPM_CONTEXT::makeEscFreq2(ModelPPM *Model,int Diff) +{ + SEE2_CONTEXT* psee2c; + if (NumStats != 256) + { + psee2c=Model->SEE2Cont[Model->NS2Indx[Diff-1]]+ + (Diff < Suffix->NumStats-NumStats)+ + 2*(U.SummFreq < 11*NumStats)+4*(Model->NumMasked > Diff)+ + Model->HiBitsFlag; + Model->Coder.SubRange.scale=psee2c->getMean(); + } + else + { + psee2c=&Model->DummySEE2Cont; + Model->Coder.SubRange.scale=1; + } + return psee2c; +} + + + + +inline bool PPM_CONTEXT::decodeSymbol2(ModelPPM *Model) +{ + int count, HiCnt, i=NumStats-Model->NumMasked; + SEE2_CONTEXT* psee2c=makeEscFreq2(Model,i); + STATE* ps[256], ** pps=ps, * p=U.Stats-1; + HiCnt=0; + do + { + do + { + p++; + } while (Model->CharMask[p->Symbol] == Model->EscCount); + HiCnt += p->Freq; + *pps++ = p; + } while ( --i ); + Model->Coder.SubRange.scale += HiCnt; + count=Model->Coder.GetCurrentCount(); + if (count>=Model->Coder.SubRange.scale) + return(false); + p=*(pps=ps); + if (count < HiCnt) + { + HiCnt=0; + while ((HiCnt += p->Freq) <= count) + p=*++pps; + Model->Coder.SubRange.LowCount = (Model->Coder.SubRange.HighCount=HiCnt)-p->Freq; + psee2c->update(); + update2(Model,p); + } + else + { + Model->Coder.SubRange.LowCount=HiCnt; + Model->Coder.SubRange.HighCount=Model->Coder.SubRange.scale; + i=NumStats-Model->NumMasked; + pps--; + do + { + Model->CharMask[(*++pps)->Symbol]=Model->EscCount; + } while ( --i ); + psee2c->Summ += Model->Coder.SubRange.scale; + Model->NumMasked = NumStats; + } + return(true); +} + + +inline void ModelPPM::ClearMask() +{ + EscCount=1; + memset(CharMask,0,sizeof(CharMask)); +} + + + + +// reset PPM variables after data error allowing safe resuming +// of further data processing +void ModelPPM::CleanUp() +{ + SubAlloc.StopSubAllocator(); + SubAlloc.StartSubAllocator(1); + StartModelRare(2); +} + + +bool ModelPPM::DecodeInit(Unpack *UnpackRead,int &EscChar) +{ + int MaxOrder=UnpackRead->GetChar(); + bool Reset=MaxOrder & 0x20; + + int MaxMB; + MaxMB = 0; // avoids warning of being uninitialized + if (Reset) + MaxMB=UnpackRead->GetChar(); + else + if (SubAlloc.GetAllocatedMemory()==0) + return(false); + if (MaxOrder & 0x40) + EscChar=UnpackRead->GetChar(); + Coder.InitDecoder(UnpackRead); + if (Reset) + { + MaxOrder=(MaxOrder & 0x1f)+1; + if (MaxOrder>16) + MaxOrder=16+(MaxOrder-16)*3; + if (MaxOrder==1) + { + SubAlloc.StopSubAllocator(); + return(false); + } + SubAlloc.StartSubAllocator(MaxMB+1); + StartModelRare(MaxOrder); + } + return(MinContext!=NULL); +} + + +int ModelPPM::DecodeChar() +{ + if ((byte*)MinContext <= SubAlloc.pText || (byte*)MinContext>SubAlloc.HeapEnd) + return(-1); + if (MinContext->NumStats != 1) + { + if ((byte*)MinContext->U.Stats <= SubAlloc.pText || (byte*)MinContext->U.Stats>SubAlloc.HeapEnd) + return(-1); + if (!MinContext->decodeSymbol1(this)) + return(-1); + } + else + MinContext->decodeBinSymbol(this); + Coder.Decode(); + while ( !FoundState ) + { + ARI_DEC_NORMALIZE(Coder.code,Coder.low,Coder.range,Coder.UnpackRead); + do + { + OrderFall++; + MinContext=MinContext->Suffix; + if ((byte*)MinContext <= SubAlloc.pText || (byte*)MinContext>SubAlloc.HeapEnd) + return(-1); + } while (MinContext->NumStats == NumMasked); + if (!MinContext->decodeSymbol2(this)) + return(-1); + Coder.Decode(); + } + int Symbol=FoundState->Symbol; + if (!OrderFall && (byte*) FoundState->Successor > SubAlloc.pText) + MinContext=MaxContext=FoundState->Successor; + else + { + UpdateModel(); + if (EscCount == 0) + ClearMask(); + } + ARI_DEC_NORMALIZE(Coder.code,Coder.low,Coder.range,Coder.UnpackRead); + return(Symbol); +} +#endif diff --git a/snesreader/unrar/model.hpp b/snesreader/unrar/model.hpp new file mode 100644 index 00000000..1ccf2f1d --- /dev/null +++ b/snesreader/unrar/model.hpp @@ -0,0 +1,133 @@ +#ifndef _RAR_PPMMODEL_ +#define _RAR_PPMMODEL_ + +#include "coder.hpp" +#include "suballoc.hpp" + +const int MAX_O=64; /* maximum allowed model order */ + +const int INT_BITS=7, PERIOD_BITS=7, TOT_BITS=INT_BITS+PERIOD_BITS, + INTERVAL=1 << INT_BITS, BIN_SCALE=1 << TOT_BITS, MAX_FREQ=124; + +#ifndef STRICT_ALIGNMENT_REQUIRED +#pragma pack(1) +#endif + +struct SEE2_CONTEXT +{ // SEE-contexts for PPM-contexts with masked symbols + ushort Summ; + byte Shift, Count; + void init(int InitVal) + { + Summ=InitVal << (Shift=PERIOD_BITS-4); + Count=4; + } + uint getMean() + { + uint RetVal=SHORT16(Summ) >> Shift; + Summ -= RetVal; + return RetVal+(RetVal == 0); + } + void update() + { + if (Shift < PERIOD_BITS && --Count == 0) + { + Summ += Summ; + Count=3 << Shift++; + } + } +}; + + +class ModelPPM; +struct PPM_CONTEXT; + +struct STATE +{ + byte Symbol; + byte Freq; + PPM_CONTEXT* Successor; +}; + +struct FreqData +{ + ushort SummFreq; + STATE _PACK_ATTR * Stats; +}; + +struct PPM_CONTEXT +{ + ushort NumStats; + union + { + FreqData U; + STATE OneState; + }; + + PPM_CONTEXT* Suffix; + inline void encodeBinSymbol(ModelPPM *Model,int symbol); // MaxOrder: + inline void encodeSymbol1(ModelPPM *Model,int symbol); // ABCD context + inline void encodeSymbol2(ModelPPM *Model,int symbol); // BCD suffix + inline void decodeBinSymbol(ModelPPM *Model); // BCDE successor + inline bool decodeSymbol1(ModelPPM *Model); // other orders: + inline bool decodeSymbol2(ModelPPM *Model); // BCD context + inline void update1(ModelPPM *Model,STATE* p); // CD suffix + inline void update2(ModelPPM *Model,STATE* p); // BCDE successor + void rescale(ModelPPM *Model); + inline PPM_CONTEXT* createChild(ModelPPM *Model,STATE* pStats,STATE& FirstState); + inline SEE2_CONTEXT* makeEscFreq2(ModelPPM *Model,int Diff); +}; + +#ifndef STRICT_ALIGNMENT_REQUIRED +#ifdef _AIX +#pragma pack(pop) +#else +#pragma pack() +#endif +#endif + +const uint UNIT_SIZE=Max(sizeof(PPM_CONTEXT),sizeof(RAR_MEM_BLK)); +const uint FIXED_UNIT_SIZE=12; + +/* +inline PPM_CONTEXT::PPM_CONTEXT(STATE* pStats,PPM_CONTEXT* ShorterContext): + NumStats(1), Suffix(ShorterContext) { pStats->Successor=this; } +inline PPM_CONTEXT::PPM_CONTEXT(): NumStats(0) {} +*/ + +template +inline void _PPMD_SWAP(T& t1,T& t2) { T tmp=t1; t1=t2; t2=tmp; } + + +class ModelPPM +{ + private: + friend struct PPM_CONTEXT; + + /*_PACK_ATTR*/ SEE2_CONTEXT SEE2Cont[25][16], DummySEE2Cont; + + struct PPM_CONTEXT *MinContext, *MedContext, *MaxContext; + STATE* FoundState; // found next state transition + int NumMasked, InitEsc, OrderFall, MaxOrder, RunLength, InitRL; + byte CharMask[256], NS2Indx[256], NS2BSIndx[256], HB2Flag[256]; + byte EscCount, PrevSuccess, HiBitsFlag; + ushort BinSumm[128][64]; // binary SEE-contexts + + RangeCoder Coder; + SubAllocator SubAlloc; + + void RestartModelRare(); + void StartModelRare(int MaxOrder); + inline PPM_CONTEXT* CreateSuccessors(bool Skip,STATE* p1); + + inline void UpdateModel(); + inline void ClearMask(); + friend class Unpack; + public: + ModelPPM(); + void CleanUp(); // reset PPM variables after data error + bool DecodeInit(Unpack *UnpackRead,int &EscChar); + int DecodeChar(); +}; + +#endif diff --git a/snesreader/unrar/rar.hpp b/snesreader/unrar/rar.hpp new file mode 100644 index 00000000..3302b2b2 --- /dev/null +++ b/snesreader/unrar/rar.hpp @@ -0,0 +1,209 @@ +// This source code is a heavily modified version based on the unrar package. +// It may NOT be used to develop a RAR (WinRAR) compatible archiver. +// See license.txt for copyright and licensing. + +// unrar_core 3.8.5 +#ifndef RAR_COMMON_HPP +#define RAR_COMMON_HPP + +#include "unrar.h" + +#include +#include +#include +#include + +//// Glue + +// One goal is to keep source code as close to original as possible, so +// that changes to the original can be found and merged more easily. + +// These names are too generic and might clash (or have already, hmpf) +#define Array Rar_Array +#define uint32 rar_uint32 +#define sint32 rar_sint32 +#define Unpack Rar_Unpack +#define Archive Rar_Archive +#define RawRead Rar_RawRead +#define BitInput Rar_BitInput +#define ModelPPM Rar_ModelPPM +#define RangeCoder Rar_RangeCoder +#define SubAllocator Rar_SubAllocator +#define UnpackFilter Rar_UnpackFilter +#define VM_PreparedProgram Rar_VM_PreparedProgram +#define CRCTab Rar_CRCTab + +// original source used rar* names for these as well +#define rarmalloc malloc +#define rarrealloc realloc +#define rarfree free + +// Internal flags, possibly set later +#undef SFX_MODULE +#undef VM_OPTIMIZE +#undef VM_STANDARDFILTERS +#undef NORARVM + +// During debugging if expr is false, prints message then continues execution +#ifndef check + #define check( expr ) ((void) 0) +#endif + +struct Rar_Error_Handler +{ + jmp_buf jmp_env; + + void MemoryError(); + void ReportError( unrar_err_t ); +}; + +// throw spec is mandatory in ISO C++ if operator new can return NULL +#if __cplusplus >= 199711 || __GNUC__ >= 3 + #define UNRAR_NOTHROW throw () +#else + #define UNRAR_NOTHROW +#endif + +struct Rar_Allocator +{ + // provides allocator that doesn't throw an exception on failure + static void operator delete ( void* p ) { free( p ); } + static void* operator new ( size_t s ) UNRAR_NOTHROW { return malloc( s ); } + static void* operator new ( size_t, void* p ) UNRAR_NOTHROW { return p; } +}; + +//// os.hpp +#undef STRICT_ALIGNMENT_REQUIRED +#undef LITTLE_ENDIAN +#define NM 1024 + +#if defined (__i386__) || defined (__x86_64__) || defined (_M_IX86) || defined (_M_X64) + // Optimizations mostly only apply to x86 + #define LITTLE_ENDIAN + #define ALLOW_NOT_ALIGNED_INT +#endif + +#if defined(__sparc) || defined(sparc) || defined(__sparcv9) +/* prohibit not aligned access to data structures in text comression + algorithm, increases memory requirements */ + #define STRICT_ALIGNMENT_REQUIRED +#endif + +//// rartypes.hpp +#if INT_MAX == 0x7FFFFFFF && UINT_MAX == 0xFFFFFFFF + typedef unsigned int uint32; //32 bits exactly + typedef int sint32; //signed 32 bits exactly + #define PRESENT_INT32 +#endif + +typedef unsigned char byte; //8 bits +typedef unsigned short ushort; //preferably 16 bits, but can be more +typedef unsigned int uint; //32 bits or more + +typedef wchar_t wchar; + +#define SHORT16(x) (sizeof(ushort)==2 ? (ushort)(x):((x)&0xffff)) +#define UINT32(x) (sizeof(uint )==4 ? (uint )(x):((x)&0xffffffff)) + +//// rardefs.hpp +#define Min(x,y) (((x)<(y)) ? (x):(y)) +#define Max(x,y) (((x)>(y)) ? (x):(y)) + +//// int64.hpp +typedef unrar_long_long Int64; + +#define int64to32(x) ((uint)(x)) +#define int32to64(high,low) ((((Int64)(high))<<31<<1)+(low)) +#define is64plus(x) (x>=0) + +#define INT64MAX int32to64(0x7fffffff,0) + +//// crc.hpp +extern uint CRCTab[256]; +void InitCRC(); +uint CRC(uint StartCRC,const void *Addr,size_t Size); +ushort OldCRC(ushort StartCRC,const void *Addr,size_t Size); + +//// rartime.hpp +struct RarTime +{ + unsigned time; + void SetDos(uint DosTime) { time = DosTime; } +}; + +//// rdwrfn.hpp +class ComprDataIO + : public Rar_Error_Handler +{ +public: + unrar_read_func user_read; + unrar_write_func user_write; + void* user_read_data; + void* user_write_data; + unrar_err_t write_error; // once write error occurs, no more writes are made + Int64 Tell_; + bool OldFormat; + +private: + Int64 UnpPackedSize; + bool SkipUnpCRC; + +public: + int UnpRead(byte *Addr,uint Count); + void UnpWrite(byte *Addr,uint Count); + void SetSkipUnpCRC( bool b ) { SkipUnpCRC = b; } + void SetPackedSizeToRead( Int64 n ) { UnpPackedSize = n; } + + uint UnpFileCRC; + + void Seek(Int64 Offset, int Method = 0 ) { (void)Method; Tell_ = Offset; } + Int64 Tell() { return Tell_; } + int Read( void* p, int n ); +}; + +//// rar.hpp +class Unpack; +#include "array.hpp" +#include "headers.hpp" +#include "getbits.hpp" +#include "archive.hpp" +#include "rawread.hpp" +#include "encname.hpp" +#include "compress.hpp" +#include "rarvm.hpp" +#include "model.hpp" +#include "unpack.hpp" + +//// extract.hpp +/** RAR archive */ +struct unrar_t + : public Rar_Allocator +{ + unrar_info_t info; + unrar_pos_t begin_pos; + unrar_pos_t solid_pos; + unrar_pos_t first_file_pos; + void const* data_; + void* own_data_; + void (*close_file)( void* ); // func ptr to avoid linking fclose() in unnecessarily + bool done; + long FileCount; + Unpack* Unp; + Array Buffer; + // large items last + Archive Arc; + + unrar_t(); + ~unrar_t(); + void UnstoreFile( Int64 ); + unrar_err_t ExtractCurrentFile( bool SkipSolid = false, bool check_compatibility_only = false ); + void update_first_file_pos() + { + if ( FileCount == 0 ) + first_file_pos = Arc.CurBlockPos; + } +}; + +typedef unrar_t CmdExtract; + +#endif diff --git a/snesreader/unrar/rarvm.cpp b/snesreader/unrar/rarvm.cpp new file mode 100644 index 00000000..d13e6264 --- /dev/null +++ b/snesreader/unrar/rarvm.cpp @@ -0,0 +1,1158 @@ +#include "rar.hpp" + +#include "rarvmtbl.cpp" + +// avoids warning of enumeration and non-enumeration in ?: expressions +#define VM_FC ((unsigned) VM_FC) +#define VM_FZ ((unsigned) VM_FZ) +#define VM_FS ((unsigned) VM_FS) + +RarVM::RarVM() +{ + Mem=NULL; +} + + +RarVM::~RarVM() +{ + rarfree( Mem ); +} + + +void RarVM::Init() +{ + if (Mem==NULL) + Mem = (byte*) rarmalloc( VM_MEMSIZE+4 ); +} + +void RarVM::handle_mem_error( Rar_Error_Handler& ErrHandler ) +{ + BitInput::handle_mem_error( ErrHandler ); + if ( !Mem ) + ErrHandler.MemoryError(); +} + +/********************************************************************* + IS_VM_MEM macro checks if address belongs to VM memory pool (Mem). + Only Mem data are always low endian regardless of machine architecture, + so we need to convert them to native format when reading or writing. + VM registers have endianness of host machine. +**********************************************************************/ +#define IS_VM_MEM(a) (((byte*)a)>=Mem && ((byte*)a)>8); + ((byte *)Addr)[2]=(byte)(Value>>16); + ((byte *)Addr)[3]=(byte)(Value>>24); + } + else + *(uint *)Addr=Value; +#else + *(uint32 *)Addr=Value; +#endif + } +} + +#if defined(BIG_ENDIAN) || !defined(ALLOW_NOT_ALIGNED_INT) || !defined(PRESENT_INT32) +#define SET_VALUE(ByteMode,Addr,Value) SetValue(ByteMode,(uint *)Addr,Value) +#else + #define SET_VALUE(ByteMode,Addr,Value) ((ByteMode) ? (*(byte *)(Addr)=(Value)):(*(uint32 *)(Addr)=((uint32)(Value)))) +#endif + + +void RarVM::SetLowEndianValue(uint *Addr,uint Value) +{ +#if defined(BIG_ENDIAN) || !defined(ALLOW_NOT_ALIGNED_INT) || !defined(PRESENT_INT32) + ((byte *)Addr)[0]=(byte)Value; + ((byte *)Addr)[1]=(byte)(Value>>8); + ((byte *)Addr)[2]=(byte)(Value>>16); + ((byte *)Addr)[3]=(byte)(Value>>24); +#else + *(uint32 *)Addr=Value; +#endif +} + + +inline uint* RarVM::GetOperand(VM_PreparedOperand *CmdOp) +{ + if (CmdOp->Type==VM_OPREGMEM) + return((uint *)&Mem[(*CmdOp->Addr+CmdOp->Base)&VM_MEMMASK]); + else + return(CmdOp->Addr); +} + + +void RarVM::Execute(VM_PreparedProgram *Prg) +{ + memcpy(R,Prg->InitR,sizeof(Prg->InitR)); + unsigned int GlobalSize=Min(Prg->GlobalData.Size(),VM_GLOBALMEMSIZE); + if (GlobalSize) + memcpy(Mem+VM_GLOBALMEMADDR,&Prg->GlobalData[0],GlobalSize); + unsigned int StaticSize=Min(Prg->StaticData.Size(),VM_GLOBALMEMSIZE-GlobalSize); + if (StaticSize) + memcpy(Mem+VM_GLOBALMEMADDR+GlobalSize,&Prg->StaticData[0],StaticSize); + + R[7]=VM_MEMSIZE; + Flags=0; + + VM_PreparedCommand *PreparedCode=Prg->AltCmd ? Prg->AltCmd:&Prg->Cmd[0]; + if (!ExecuteCode(PreparedCode,Prg->CmdCount)) + PreparedCode[0].OpCode=VM_RET; + uint NewBlockPos=GET_VALUE(false,&Mem[VM_GLOBALMEMADDR+0x20])&VM_MEMMASK; + uint NewBlockSize=GET_VALUE(false,&Mem[VM_GLOBALMEMADDR+0x1c])&VM_MEMMASK; + if (NewBlockPos+NewBlockSize>=VM_MEMSIZE) + NewBlockPos=NewBlockSize=0; + Prg->FilteredData=Mem+NewBlockPos; + Prg->FilteredDataSize=NewBlockSize; + + Prg->GlobalData.Reset(); + + uint DataSize=Min(GET_VALUE(false,(uint*)&Mem[VM_GLOBALMEMADDR+0x30]),VM_GLOBALMEMSIZE-VM_FIXEDGLOBALSIZE); + if (DataSize!=0) + { + Prg->GlobalData.Add(DataSize+VM_FIXEDGLOBALSIZE); + memcpy(&Prg->GlobalData[0],&Mem[VM_GLOBALMEMADDR],DataSize+VM_FIXEDGLOBALSIZE); + } +} + + +/* +Note: + Due to performance considerations RAR VM may set VM_FS, VM_FC, VM_FZ + incorrectly for byte operands. These flags are always valid only + for 32-bit operands. Check implementation of concrete VM command + to see if it sets flags right. +*/ + +#define SET_IP(IP) \ + if ((IP)>=CodeSize) \ + return(true); \ + if (--MaxOpCount<=0) \ + return(false); \ + Cmd=PreparedCode+(IP); + +bool RarVM::ExecuteCode(VM_PreparedCommand *PreparedCode,int CodeSize) +{ + int MaxOpCount=25000000; + VM_PreparedCommand *Cmd=PreparedCode; + while (1) + { +#ifndef NORARVM + // Get addresses to quickly access operands. + uint *Op1=GetOperand(&Cmd->Op1); + uint *Op2=GetOperand(&Cmd->Op2); +#endif + switch(Cmd->OpCode) + { +#ifndef NORARVM + case VM_MOV: + SET_VALUE(Cmd->ByteMode,Op1,GET_VALUE(Cmd->ByteMode,Op2)); + break; +#ifdef VM_OPTIMIZE + case VM_MOVB: + SET_VALUE(true,Op1,GET_VALUE(true,Op2)); + break; + case VM_MOVD: + SET_VALUE(false,Op1,GET_VALUE(false,Op2)); + break; +#endif + case VM_CMP: + { + uint Value1=GET_VALUE(Cmd->ByteMode,Op1); + uint Result=UINT32(Value1-GET_VALUE(Cmd->ByteMode,Op2)); + Flags=Result==0 ? VM_FZ:(Result>Value1)|(Result&VM_FS); + } + break; +#ifdef VM_OPTIMIZE + case VM_CMPB: + { + uint Value1=GET_VALUE(true,Op1); + uint Result=UINT32(Value1-GET_VALUE(true,Op2)); + Flags=Result==0 ? VM_FZ:(Result>Value1)|(Result&VM_FS); + } + break; + case VM_CMPD: + { + uint Value1=GET_VALUE(false,Op1); + uint Result=UINT32(Value1-GET_VALUE(false,Op2)); + Flags=Result==0 ? VM_FZ:(Result>Value1)|(Result&VM_FS); + } + break; +#endif + case VM_ADD: + { + uint Value1=GET_VALUE(Cmd->ByteMode,Op1); + uint Result=UINT32(Value1+GET_VALUE(Cmd->ByteMode,Op2)); + if (Cmd->ByteMode) + { + Result&=0xff; + Flags=(ResultByteMode,Op1,Result); + } + break; +#ifdef VM_OPTIMIZE + case VM_ADDB: + SET_VALUE(true,Op1,GET_VALUE(true,Op1)+GET_VALUE(true,Op2)); + break; + case VM_ADDD: + SET_VALUE(false,Op1,GET_VALUE(false,Op1)+GET_VALUE(false,Op2)); + break; +#endif + case VM_SUB: + { + uint Value1=GET_VALUE(Cmd->ByteMode,Op1); + uint Result=UINT32(Value1-GET_VALUE(Cmd->ByteMode,Op2)); + Flags=Result==0 ? VM_FZ:(Result>Value1)|(Result&VM_FS); + SET_VALUE(Cmd->ByteMode,Op1,Result); + } + break; +#ifdef VM_OPTIMIZE + case VM_SUBB: + SET_VALUE(true,Op1,GET_VALUE(true,Op1)-GET_VALUE(true,Op2)); + break; + case VM_SUBD: + SET_VALUE(false,Op1,GET_VALUE(false,Op1)-GET_VALUE(false,Op2)); + break; +#endif + case VM_JZ: + if ((Flags & VM_FZ)!=0) + { + SET_IP(GET_VALUE(false,Op1)); + continue; + } + break; + case VM_JNZ: + if ((Flags & VM_FZ)==0) + { + SET_IP(GET_VALUE(false,Op1)); + continue; + } + break; + case VM_INC: + { + uint Result=UINT32(GET_VALUE(Cmd->ByteMode,Op1)+1); + if (Cmd->ByteMode) + Result&=0xff; + SET_VALUE(Cmd->ByteMode,Op1,Result); + Flags=Result==0 ? VM_FZ:Result&VM_FS; + } + break; +#ifdef VM_OPTIMIZE + case VM_INCB: + SET_VALUE(true,Op1,GET_VALUE(true,Op1)+1); + break; + case VM_INCD: + SET_VALUE(false,Op1,GET_VALUE(false,Op1)+1); + break; +#endif + case VM_DEC: + { + uint Result=UINT32(GET_VALUE(Cmd->ByteMode,Op1)-1); + SET_VALUE(Cmd->ByteMode,Op1,Result); + Flags=Result==0 ? VM_FZ:Result&VM_FS; + } + break; +#ifdef VM_OPTIMIZE + case VM_DECB: + SET_VALUE(true,Op1,GET_VALUE(true,Op1)-1); + break; + case VM_DECD: + SET_VALUE(false,Op1,GET_VALUE(false,Op1)-1); + break; +#endif + case VM_JMP: + SET_IP(GET_VALUE(false,Op1)); + continue; + case VM_XOR: + { + uint Result=UINT32(GET_VALUE(Cmd->ByteMode,Op1)^GET_VALUE(Cmd->ByteMode,Op2)); + Flags=Result==0 ? VM_FZ:Result&VM_FS; + SET_VALUE(Cmd->ByteMode,Op1,Result); + } + break; + case VM_AND: + { + uint Result=UINT32(GET_VALUE(Cmd->ByteMode,Op1)&GET_VALUE(Cmd->ByteMode,Op2)); + Flags=Result==0 ? VM_FZ:Result&VM_FS; + SET_VALUE(Cmd->ByteMode,Op1,Result); + } + break; + case VM_OR: + { + uint Result=UINT32(GET_VALUE(Cmd->ByteMode,Op1)|GET_VALUE(Cmd->ByteMode,Op2)); + Flags=Result==0 ? VM_FZ:Result&VM_FS; + SET_VALUE(Cmd->ByteMode,Op1,Result); + } + break; + case VM_TEST: + { + uint Result=UINT32(GET_VALUE(Cmd->ByteMode,Op1)&GET_VALUE(Cmd->ByteMode,Op2)); + Flags=Result==0 ? VM_FZ:Result&VM_FS; + } + break; + case VM_JS: + if ((Flags & VM_FS)!=0) + { + SET_IP(GET_VALUE(false,Op1)); + continue; + } + break; + case VM_JNS: + if ((Flags & VM_FS)==0) + { + SET_IP(GET_VALUE(false,Op1)); + continue; + } + break; + case VM_JB: + if ((Flags & VM_FC)!=0) + { + SET_IP(GET_VALUE(false,Op1)); + continue; + } + break; + case VM_JBE: + if ((Flags & (VM_FC|VM_FZ))!=0) + { + SET_IP(GET_VALUE(false,Op1)); + continue; + } + break; + case VM_JA: + if ((Flags & (VM_FC|VM_FZ))==0) + { + SET_IP(GET_VALUE(false,Op1)); + continue; + } + break; + case VM_JAE: + if ((Flags & VM_FC)==0) + { + SET_IP(GET_VALUE(false,Op1)); + continue; + } + break; + case VM_PUSH: + R[7]-=4; + SET_VALUE(false,(uint *)&Mem[R[7]&VM_MEMMASK],GET_VALUE(false,Op1)); + break; + case VM_POP: + SET_VALUE(false,Op1,GET_VALUE(false,(uint *)&Mem[R[7] & VM_MEMMASK])); + R[7]+=4; + break; + case VM_CALL: + R[7]-=4; + SET_VALUE(false,(uint *)&Mem[R[7]&VM_MEMMASK],Cmd-PreparedCode+1); + SET_IP(GET_VALUE(false,Op1)); + continue; + case VM_NOT: + SET_VALUE(Cmd->ByteMode,Op1,~GET_VALUE(Cmd->ByteMode,Op1)); + break; + case VM_SHL: + { + uint Value1=GET_VALUE(Cmd->ByteMode,Op1); + uint Value2=GET_VALUE(Cmd->ByteMode,Op2); + uint Result=UINT32(Value1<ByteMode,Op1,Result); + } + break; + case VM_SHR: + { + uint Value1=GET_VALUE(Cmd->ByteMode,Op1); + uint Value2=GET_VALUE(Cmd->ByteMode,Op2); + uint Result=UINT32(Value1>>Value2); + Flags=(Result==0 ? VM_FZ:(Result&VM_FS))|((Value1>>(Value2-1))&VM_FC); + SET_VALUE(Cmd->ByteMode,Op1,Result); + } + break; + case VM_SAR: + { + uint Value1=GET_VALUE(Cmd->ByteMode,Op1); + uint Value2=GET_VALUE(Cmd->ByteMode,Op2); + uint Result=UINT32(((int)Value1)>>Value2); + Flags=(Result==0 ? VM_FZ:(Result&VM_FS))|((Value1>>(Value2-1))&VM_FC); + SET_VALUE(Cmd->ByteMode,Op1,Result); + } + break; + case VM_NEG: + { + uint Result=UINT32(-GET_VALUE(Cmd->ByteMode,Op1)); + Flags=Result==0 ? VM_FZ:VM_FC|(Result&VM_FS); + SET_VALUE(Cmd->ByteMode,Op1,Result); + } + break; +#ifdef VM_OPTIMIZE + case VM_NEGB: + SET_VALUE(true,Op1,-GET_VALUE(true,Op1)); + break; + case VM_NEGD: + SET_VALUE(false,Op1,-GET_VALUE(false,Op1)); + break; +#endif + case VM_PUSHA: + { + const int RegCount=sizeof(R)/sizeof(R[0]); + for (int I=0,SP=R[7]-4;IByteMode,Op1); + SET_VALUE(Cmd->ByteMode,Op1,GET_VALUE(Cmd->ByteMode,Op2)); + SET_VALUE(Cmd->ByteMode,Op2,Value1); + } + break; + case VM_MUL: + { + uint Result=GET_VALUE(Cmd->ByteMode,Op1)*GET_VALUE(Cmd->ByteMode,Op2); + SET_VALUE(Cmd->ByteMode,Op1,Result); + } + break; + case VM_DIV: + { + uint Divider=GET_VALUE(Cmd->ByteMode,Op2); + if (Divider!=0) + { + uint Result=GET_VALUE(Cmd->ByteMode,Op1)/Divider; + SET_VALUE(Cmd->ByteMode,Op1,Result); + } + } + break; + case VM_ADC: + { + uint Value1=GET_VALUE(Cmd->ByteMode,Op1); + uint FC=(Flags&VM_FC); + uint Result=UINT32(Value1+GET_VALUE(Cmd->ByteMode,Op2)+FC); + if (Cmd->ByteMode) + Result&=0xff; + Flags=(ResultByteMode,Op1,Result); + } + break; + case VM_SBB: + { + uint Value1=GET_VALUE(Cmd->ByteMode,Op1); + uint FC=(Flags&VM_FC); + uint Result=UINT32(Value1-GET_VALUE(Cmd->ByteMode,Op2)-FC); + if (Cmd->ByteMode) + Result&=0xff; + Flags=(Result>Value1 || Result==Value1 && FC)|(Result==0 ? VM_FZ:(Result&VM_FS)); + SET_VALUE(Cmd->ByteMode,Op1,Result); + } + break; +#endif // for #ifndef NORARVM + case VM_RET: + if (R[7]>=VM_MEMSIZE) + return(true); + SET_IP(GET_VALUE(false,(uint *)&Mem[R[7] & VM_MEMMASK])); + R[7]+=4; + continue; +#ifdef VM_STANDARDFILTERS + case VM_STANDARD: + ExecuteStandardFilter((VM_StandardFilters)Cmd->Op1.Data); + break; +#endif + case VM_PRINT: + break; + } + Cmd++; + --MaxOpCount; + } +} + + + + +void RarVM::Prepare(byte *Code,int CodeSize,VM_PreparedProgram *Prg) +{ + InitBitInput(); + memcpy(InBuf,Code,Min(CodeSize,BitInput::MAX_SIZE)); + + // Calculate the single byte XOR checksum to check validity of VM code. + byte XorSum=0; + { + for (int I=1;ICmdCount=0; + if (XorSum==Code[0]) // VM code is valid if equal. + { +#ifdef VM_STANDARDFILTERS + VM_StandardFilters FilterType=IsStandardFilter(Code,CodeSize); + if (FilterType!=VMSF_NONE) + { + // VM code is found among standard filters. + Prg->Cmd.Add(1); + VM_PreparedCommand *CurCmd=&Prg->Cmd[Prg->CmdCount++]; + CurCmd->OpCode=VM_STANDARD; + CurCmd->Op1.Data=FilterType; + CurCmd->Op1.Addr=&CurCmd->Op1.Data; + CurCmd->Op2.Addr=&CurCmd->Op2.Data; + CurCmd->Op1.Type=CurCmd->Op2.Type=VM_OPNONE; + CodeSize=0; + } +#endif + uint DataFlag=fgetbits(); + faddbits(1); + + // Read static data contained in DB operators. This data cannot be + // changed, it is a part of VM code, not a filter parameter. + + if (DataFlag&0x8000) + { + int DataSize=ReadData(*this)+1; + for (int I=0;InAddrStaticData.Add(1); + Prg->StaticData[I]=fgetbits()>>8; + faddbits(8); + } + } + + while (InAddrCmd.Add(1); + VM_PreparedCommand *CurCmd=&Prg->Cmd[Prg->CmdCount]; + uint Data=fgetbits(); + if ((Data&0x8000)==0) + { + CurCmd->OpCode=(VM_Commands)(Data>>12); + faddbits(4); + } + else + { + CurCmd->OpCode=(VM_Commands)((Data>>10)-24); + faddbits(6); + } + if (VM_CmdFlags[CurCmd->OpCode] & VMCF_BYTEMODE) + { + CurCmd->ByteMode=fgetbits()>>15; + faddbits(1); + } + else + CurCmd->ByteMode=0; + CurCmd->Op1.Type=CurCmd->Op2.Type=VM_OPNONE; + int OpNum=(VM_CmdFlags[CurCmd->OpCode] & VMCF_OPMASK); + CurCmd->Op1.Addr=CurCmd->Op2.Addr=NULL; + if (OpNum>0) + { + DecodeArg(CurCmd->Op1,CurCmd->ByteMode); // reading the first operand + if (OpNum==2) + DecodeArg(CurCmd->Op2,CurCmd->ByteMode); // reading the second operand + else + { + if (CurCmd->Op1.Type==VM_OPINT && (VM_CmdFlags[CurCmd->OpCode]&(VMCF_JUMP|VMCF_PROC))) + { + // Calculating jump distance. + int Distance=CurCmd->Op1.Data; + if (Distance>=256) + Distance-=256; + else + { + if (Distance>=136) + Distance-=264; + else + if (Distance>=16) + Distance-=8; + else + if (Distance>=8) + Distance-=16; + Distance+=Prg->CmdCount; + } + CurCmd->Op1.Data=Distance; + } + } + } + Prg->CmdCount++; + } + } + + // Adding RET command at the end of program. + Prg->Cmd.Add(1); + VM_PreparedCommand *CurCmd=&Prg->Cmd[Prg->CmdCount++]; + CurCmd->OpCode=VM_RET; + CurCmd->Op1.Addr=&CurCmd->Op1.Data; + CurCmd->Op2.Addr=&CurCmd->Op2.Data; + CurCmd->Op1.Type=CurCmd->Op2.Type=VM_OPNONE; + + // If operand 'Addr' field has not been set by DecodeArg calls above, + // let's set it to point to operand 'Data' field. It is necessary for + // VM_OPINT type operands (usual integers) or maybe if something was + // not set properly for other operands. 'Addr' field is required + // for quicker addressing of operand data. + for (int I=0;ICmdCount;I++) + { + VM_PreparedCommand *Cmd=&Prg->Cmd[I]; + if (Cmd->Op1.Addr==NULL) + Cmd->Op1.Addr=&Cmd->Op1.Data; + if (Cmd->Op2.Addr==NULL) + Cmd->Op2.Addr=&Cmd->Op2.Data; + } + +#ifdef VM_OPTIMIZE + if (CodeSize!=0) + Optimize(Prg); +#endif +} + + +void RarVM::DecodeArg(VM_PreparedOperand &Op,bool ByteMode) +{ + uint Data=fgetbits(); + if (Data & 0x8000) + { + Op.Type=VM_OPREG; // Operand is register (R[0]..R[7]) + Op.Data=(Data>>12)&7; // Register number + Op.Addr=&R[Op.Data]; // Register address + faddbits(4); // 1 flag bit and 3 register number bits + } + else + if ((Data & 0xc000)==0) + { + Op.Type=VM_OPINT; // Operand is integer + if (ByteMode) + { + Op.Data=(Data>>6) & 0xff; // Byte integer. + faddbits(10); + } + else + { + faddbits(2); + Op.Data=ReadData(*this); // 32 bit integer. + } + } + else + { + // Operand is data addressed by register data, base address or both. + Op.Type=VM_OPREGMEM; + if ((Data & 0x2000)==0) + { + // Base address is zero, just use the address from register. + Op.Data=(Data>>10)&7; + Op.Addr=&R[Op.Data]; + Op.Base=0; + faddbits(6); + } + else + { + if ((Data & 0x1000)==0) + { + // Use both register and base address. + Op.Data=(Data>>9)&7; + Op.Addr=&R[Op.Data]; + faddbits(7); + } + else + { + // Use base address only. Access memory by fixed address. + Op.Data=0; + faddbits(4); + } + Op.Base=ReadData(*this); // Read base address. + } + } +} + + +uint RarVM::ReadData(BitInput &Inp) +{ + uint Data=Inp.fgetbits(); + switch(Data&0xc000) + { + case 0: + Inp.faddbits(6); + return((Data>>10)&0xf); + case 0x4000: + if ((Data&0x3c00)==0) + { + Data=0xffffff00|((Data>>2)&0xff); + Inp.faddbits(14); + } + else + { + Data=(Data>>6)&0xff; + Inp.faddbits(10); + } + return(Data); + case 0x8000: + Inp.faddbits(2); + Data=Inp.fgetbits(); + Inp.faddbits(16); + return(Data); + default: + Inp.faddbits(2); + Data=(Inp.fgetbits()<<16); + Inp.faddbits(16); + Data|=Inp.fgetbits(); + Inp.faddbits(16); + return(Data); + } +} + + +void RarVM::SetMemory(unsigned int Pos,byte *Data,unsigned int DataSize) +{ + if (PosCmd[0]; + int CodeSize=Prg->CmdCount; + + for (int I=0;IOpCode) + { + case VM_MOV: + Cmd->OpCode=Cmd->ByteMode ? VM_MOVB:VM_MOVD; + continue; + case VM_CMP: + Cmd->OpCode=Cmd->ByteMode ? VM_CMPB:VM_CMPD; + continue; + } + if ((VM_CmdFlags[Cmd->OpCode] & VMCF_CHFLAGS)==0) + continue; + + // If we do not have jump commands between the current operation + // and next command which will modify processor flags, we can replace + // the current command with faster version which does not need to + // modify flags. + bool FlagsRequired=false; + for (int J=I+1;JOpCode) + { + case VM_ADD: + Cmd->OpCode=Cmd->ByteMode ? VM_ADDB:VM_ADDD; + continue; + case VM_SUB: + Cmd->OpCode=Cmd->ByteMode ? VM_SUBB:VM_SUBD; + continue; + case VM_INC: + Cmd->OpCode=Cmd->ByteMode ? VM_INCB:VM_INCD; + continue; + case VM_DEC: + Cmd->OpCode=Cmd->ByteMode ? VM_DECB:VM_DECD; + continue; + case VM_NEG: + Cmd->OpCode=Cmd->ByteMode ? VM_NEGB:VM_NEGD; + continue; + } + } +} +#endif + + +#ifdef VM_STANDARDFILTERS +VM_StandardFilters RarVM::IsStandardFilter(byte *Code,int CodeSize) +{ + static const + struct StandardFilterSignature + { + int Length; + uint CRC; + VM_StandardFilters Type; + } StdList[]={ + { + 53, 0xad576887, VMSF_E8, + },{ + 57, 0x3cd7e57e, VMSF_E8E9, + },{ + 120, 0x3769893f, VMSF_ITANIUM, + },{ + 29, 0x0e06077d, VMSF_DELTA, + },{ + 149, 0x1c2c5dc8, VMSF_RGB, + },{ + 216, 0xbc85e701, VMSF_AUDIO, + },{ + 40, 0x46b9c560, VMSF_UPCASE + } + }; + uint CodeCRC=CRC(0xffffffff,Code,CodeSize)^0xffffffff; + for (int I=0;I=VM_GLOBALMEMADDR || DataSize<4) + break; + + const int FileSize=0x1000000; + byte CmpByte2=FilterType==VMSF_E8E9 ? 0xe9:0xe8; + for (int CurPos=0;CurPos=0) + SET_VALUE(false,Data,Addr+FileSize); + } + else + if (Addr=VM_GLOBALMEMADDR || DataSize<21) + break; + + int CurPos=0; + + FileOffset>>=4; + + while (CurPos=0) + { + const + static byte Masks[16]={4,4,6,6,0,0,7,7,4,4,0,0,4,4,0,0}; + byte CmdMask=Masks[Byte]; + if (CmdMask!=0) + for (int I=0;I<=2;I++) + if (CmdMask & (1<=VM_GLOBALMEMADDR/2) + break; + + // Bytes from same channels are grouped to continual data blocks, + // so we need to place them back to their interleaving positions. + for (int CurChannel=0;CurChannel=VM_GLOBALMEMADDR/2 || PosR<0) + break; + for (int CurChannel=0;CurChannel=3) + { + byte *UpperData=DestData+UpperPos; + unsigned int UpperByte=*UpperData; + unsigned int UpperLeftByte=*(UpperData-3); + Predicted=PrevByte+UpperByte-UpperLeftByte; + int pa=abs((int)(Predicted-PrevByte)); + int pb=abs((int)(Predicted-UpperByte)); + int pc=abs((int)(Predicted-UpperLeftByte)); + if (pa<=pb && pa<=pc) + Predicted=PrevByte; + else + if (pb<=pc) + Predicted=UpperByte; + else + Predicted=UpperLeftByte; + } + else + Predicted=PrevByte; + DestData[I]=PrevByte=(byte)(Predicted-*(SrcData++)); + } + } + for (int I=PosR,Border=DataSize-2;I=VM_GLOBALMEMADDR/2) + break; + for (int CurChannel=0;CurChannel>3) & 0xff; + + unsigned int CurByte=*(SrcData++); + + Predicted-=CurByte; + DestData[I]=Predicted; + PrevDelta=(signed char)(Predicted-PrevByte); + PrevByte=Predicted; + + int D=((signed char)CurByte)<<3; + + Dif[0]+=abs(D); + Dif[1]+=abs(D-D1); + Dif[2]+=abs(D+D1); + Dif[3]+=abs(D-D2); + Dif[4]+=abs(D+D2); + Dif[5]+=abs(D-D3); + Dif[6]+=abs(D+D3); + + if ((ByteCount & 0x1f)==0) + { + unsigned int MinDif=Dif[0],NumMinDif=0; + Dif[0]=0; + for (int J=1;J=-16) K1--; break; + case 2: if (K1 < 16) K1++; break; + case 3: if (K2>=-16) K2--; break; + case 4: if (K2 < 16) K2++; break; + case 5: if (K3>=-16) K3--; break; + case 6: if (K3 < 16) K3++; break; + } + } + } + } + } + break; + case VMSF_UPCASE: + { + int DataSize=R[4],SrcPos=0,DestPos=DataSize; + if (DataSize>=VM_GLOBALMEMADDR/2) + break; + while (SrcPos>= InBit; + return(BitField & (0xffffffff>>(32-BitCount))); +} + + +void RarVM::FilterItanium_SetBits(byte *Data,unsigned int BitField,int BitPos, + int BitCount) +{ + int InAddr=BitPos/8; + int InBit=BitPos&7; + unsigned int AndMask=0xffffffff>>(32-BitCount); + AndMask=~(AndMask<>8)|0xff000000; + BitField>>=8; + } +} +#endif diff --git a/snesreader/unrar/rarvm.hpp b/snesreader/unrar/rarvm.hpp new file mode 100644 index 00000000..835e5299 --- /dev/null +++ b/snesreader/unrar/rarvm.hpp @@ -0,0 +1,112 @@ +#ifndef _RAR_VM_ +#define _RAR_VM_ + +#define VM_STANDARDFILTERS + +#ifndef SFX_MODULE +#define VM_OPTIMIZE +#endif + + +#define VM_MEMSIZE 0x40000 +#define VM_MEMMASK (VM_MEMSIZE-1) +#define VM_GLOBALMEMADDR 0x3C000 +#define VM_GLOBALMEMSIZE 0x2000 +#define VM_FIXEDGLOBALSIZE 64 + +enum VM_Commands +{ + VM_MOV, VM_CMP, VM_ADD, VM_SUB, VM_JZ, VM_JNZ, VM_INC, VM_DEC, + VM_JMP, VM_XOR, VM_AND, VM_OR, VM_TEST, VM_JS, VM_JNS, VM_JB, + VM_JBE, VM_JA, VM_JAE, VM_PUSH, VM_POP, VM_CALL, VM_RET, VM_NOT, + VM_SHL, VM_SHR, VM_SAR, VM_NEG, VM_PUSHA,VM_POPA, VM_PUSHF,VM_POPF, + VM_MOVZX,VM_MOVSX,VM_XCHG, VM_MUL, VM_DIV, VM_ADC, VM_SBB, VM_PRINT, + +#ifdef VM_OPTIMIZE + VM_MOVB, VM_MOVD, VM_CMPB, VM_CMPD, + + VM_ADDB, VM_ADDD, VM_SUBB, VM_SUBD, VM_INCB, VM_INCD, VM_DECB, VM_DECD, + VM_NEGB, VM_NEGD, +#endif + + VM_STANDARD +}; + +enum VM_StandardFilters { + VMSF_NONE, VMSF_E8, VMSF_E8E9, VMSF_ITANIUM, VMSF_RGB, VMSF_AUDIO, + VMSF_DELTA, VMSF_UPCASE +}; + +enum VM_Flags {VM_FC=1,VM_FZ=2,VM_FS=0x80000000}; + +enum VM_OpType {VM_OPREG,VM_OPINT,VM_OPREGMEM,VM_OPNONE}; + +struct VM_PreparedOperand +{ + VM_OpType Type; + uint Data; + uint Base; + uint *Addr; +}; + +struct VM_PreparedCommand +{ + VM_Commands OpCode; + bool ByteMode; + VM_PreparedOperand Op1,Op2; +}; + + +struct VM_PreparedProgram +{ + VM_PreparedProgram( Rar_Error_Handler* eh ) : Cmd( eh ), GlobalData( eh ), StaticData( eh ) + {AltCmd=NULL;} + + Array Cmd; + VM_PreparedCommand *AltCmd; + int CmdCount; + + Array GlobalData; + Array StaticData; // static data contained in DB operators + uint InitR[7]; + + byte *FilteredData; + unsigned int FilteredDataSize; +}; + +class RarVM:private BitInput +{ + private: + inline uint GetValue(bool ByteMode,uint *Addr); + inline void SetValue(bool ByteMode,uint *Addr,uint Value); + inline uint* GetOperand(VM_PreparedOperand *CmdOp); + void DecodeArg(VM_PreparedOperand &Op,bool ByteMode); +#ifdef VM_OPTIMIZE + void Optimize(VM_PreparedProgram *Prg); +#endif + bool ExecuteCode(VM_PreparedCommand *PreparedCode,int CodeSize); +#ifdef VM_STANDARDFILTERS + VM_StandardFilters IsStandardFilter(byte *Code,int CodeSize); + void ExecuteStandardFilter(VM_StandardFilters FilterType); + unsigned int FilterItanium_GetBits(byte *Data,int BitPos,int BitCount); + void FilterItanium_SetBits(byte *Data,unsigned int BitField,int BitPos, + int BitCount); +#endif + + byte *Mem; + uint R[8]; + uint Flags; + public: + RarVM(); + ~RarVM(); + void Init(); + void handle_mem_error( Rar_Error_Handler& ); + friend class Unpack; + void Prepare(byte *Code,int CodeSize,VM_PreparedProgram *Prg); + void Execute(VM_PreparedProgram *Prg); + void SetLowEndianValue(uint *Addr,uint Value); + void SetMemory(unsigned int Pos,byte *Data,unsigned int DataSize); + static uint ReadData(BitInput &Inp); +}; + +#endif diff --git a/snesreader/unrar/rarvmtbl.cpp b/snesreader/unrar/rarvmtbl.cpp new file mode 100644 index 00000000..abfdbeeb --- /dev/null +++ b/snesreader/unrar/rarvmtbl.cpp @@ -0,0 +1,57 @@ +// #included by rarvm.cpp +#ifdef RAR_COMMON_HPP +#define VMCF_OP0 0 +#define VMCF_OP1 1 +#define VMCF_OP2 2 +#define VMCF_OPMASK 3 +#define VMCF_BYTEMODE 4 +#define VMCF_JUMP 8 +#define VMCF_PROC 16 +#define VMCF_USEFLAGS 32 +#define VMCF_CHFLAGS 64 + +const +static byte VM_CmdFlags[]= +{ + /* VM_MOV */ VMCF_OP2 | VMCF_BYTEMODE , + /* VM_CMP */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS , + /* VM_ADD */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS , + /* VM_SUB */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS , + /* VM_JZ */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS , + /* VM_JNZ */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS , + /* VM_INC */ VMCF_OP1 | VMCF_BYTEMODE | VMCF_CHFLAGS , + /* VM_DEC */ VMCF_OP1 | VMCF_BYTEMODE | VMCF_CHFLAGS , + /* VM_JMP */ VMCF_OP1 | VMCF_JUMP , + /* VM_XOR */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS , + /* VM_AND */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS , + /* VM_OR */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS , + /* VM_TEST */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS , + /* VM_JS */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS , + /* VM_JNS */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS , + /* VM_JB */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS , + /* VM_JBE */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS , + /* VM_JA */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS , + /* VM_JAE */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS , + /* VM_PUSH */ VMCF_OP1 , + /* VM_POP */ VMCF_OP1 , + /* VM_CALL */ VMCF_OP1 | VMCF_PROC , + /* VM_RET */ VMCF_OP0 | VMCF_PROC , + /* VM_NOT */ VMCF_OP1 | VMCF_BYTEMODE , + /* VM_SHL */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS , + /* VM_SHR */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS , + /* VM_SAR */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS , + /* VM_NEG */ VMCF_OP1 | VMCF_BYTEMODE | VMCF_CHFLAGS , + /* VM_PUSHA */ VMCF_OP0 , + /* VM_POPA */ VMCF_OP0 , + /* VM_PUSHF */ VMCF_OP0 | VMCF_USEFLAGS , + /* VM_POPF */ VMCF_OP0 | VMCF_CHFLAGS , + /* VM_MOVZX */ VMCF_OP2 , + /* VM_MOVSX */ VMCF_OP2 , + /* VM_XCHG */ VMCF_OP2 | VMCF_BYTEMODE , + /* VM_MUL */ VMCF_OP2 | VMCF_BYTEMODE , + /* VM_DIV */ VMCF_OP2 | VMCF_BYTEMODE , + /* VM_ADC */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_USEFLAGS | VMCF_CHFLAGS , + /* VM_SBB */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_USEFLAGS | VMCF_CHFLAGS , + /* VM_PRINT */ VMCF_OP0 +}; +#endif diff --git a/snesreader/unrar/rawread.cpp b/snesreader/unrar/rawread.cpp new file mode 100644 index 00000000..afe6b06f --- /dev/null +++ b/snesreader/unrar/rawread.cpp @@ -0,0 +1,86 @@ +#include "rar.hpp" + +RawRead::RawRead(ComprDataIO *SrcFile) : Data( SrcFile ) +{ + RawRead::SrcFile=SrcFile; + ReadPos=0; + DataSize=0; +} + +void RawRead::Reset() +{ + ReadPos=0; + DataSize=0; + Data.Reset(); +} + +void RawRead::Read(int Size) +{ + // (removed decryption) + if (Size!=0) + { + Data.Add(Size); + DataSize+=SrcFile->Read(&Data[DataSize],Size); + } +} + + + + +void RawRead::Get(byte &Field) +{ + if (ReadPos2 ? CRC(0xffffffff,&Data[2],(ProcessedOnly ? ReadPos:DataSize)-2):0xffffffff); +} diff --git a/snesreader/unrar/rawread.hpp b/snesreader/unrar/rawread.hpp new file mode 100644 index 00000000..dc37c304 --- /dev/null +++ b/snesreader/unrar/rawread.hpp @@ -0,0 +1,25 @@ +#ifndef _RAR_RAWREAD_ +#define _RAR_RAWREAD_ + +class RawRead +{ +private: + Array Data; + File *SrcFile; + int DataSize; + int ReadPos; + friend class Archive; +public: + RawRead(File *SrcFile); + void Reset(); + void Read(int Size); + void Get(byte &Field); + void Get(ushort &Field); + void Get(uint &Field); + void Get(byte *Field,int Size); + uint GetCRC(bool ProcessedOnly); + int Size() {return DataSize;} + int PaddedSize() {return Data.Size()-DataSize;} +}; + +#endif diff --git a/snesreader/unrar/readme.txt b/snesreader/unrar/readme.txt new file mode 100644 index 00000000..20e70c77 --- /dev/null +++ b/snesreader/unrar/readme.txt @@ -0,0 +1,63 @@ + + Portable UnRAR version + + + 1. General + + This package includes freeware Unrar C++ source and a few makefiles + (makefile.bcc, makefile.msc+msc.dep, makefile.unix). Unrar source + is subset of RAR and generated from RAR source automatically, + by a small program removing blocks like '#ifndef UNRAR ... #endif'. + Such method is not perfect and you may find some RAR related + stuff unnecessary in Unrar, especially in header files. + + If you wish to port Unrar to a new platform, you may need to edit + '#define LITTLE_ENDIAN' in os.hpp and data type definitions + in rartypes.hpp. + + if computer architecture does not allow not aligned data access, + you need to undefine ALLOW_NOT_ALIGNED_INT and define + STRICT_ALIGNMENT_REQUIRED in os.h. Note that it will increase memory + requirements. + + If you use Borland C++ makefile (makefile.bcc), you need to define + BASEPATHCC environment (or makefile) variable containing + the path to Borland C++ installation. + + Makefile.unix contains numerous compiler option sets. + GCC Linux is selected by default. If you need to compile Unrar + for other platforms, uncomment corresponding lines. + + + 2. Unrar binaries + + If you compiled Unrar for OS, which is not present in "Downloads" + and "RAR extras" on www.rarlab.com, we will appreciate if you send + us the compiled executable to place it to our site. + + + 3. Acknowledgements + + This source includes parts of code written by the following authors: + + Dmitry Shkarin PPMII v.H text compression + Dmitry Subbotin Carryless rangecoder + Szymon Stefanek AES encryption + Brian Gladman AES encryption + Steve Reid SHA-1 hash function + Marcus Herbert makefile.unix file + Tomasz Klim fixes for libunrar.so + Robert Riebisch makefile.dj and patches for DJGPP + + + 4. Legal stuff + + Unrar source may be used in any software to handle RAR archives + without limitations free of charge, but cannot be used to re-create + the RAR compression algorithm, which is proprietary. Distribution + of modified Unrar source in separate form or as a part of other + software is permitted, provided that it is clearly stated in + the documentation and source comments that the code may not be used + to develop a RAR (WinRAR) compatible archiver. + + More detailed license text is available in license.txt. diff --git a/snesreader/unrar/suballoc.cpp b/snesreader/unrar/suballoc.cpp new file mode 100644 index 00000000..66d49d55 --- /dev/null +++ b/snesreader/unrar/suballoc.cpp @@ -0,0 +1,261 @@ +/**************************************************************************** + * This file is part of PPMd project * + * Written and distributed to public domain by Dmitry Shkarin 1997, * + * 1999-2000 * + * Contents: memory allocation routines * + ****************************************************************************/ + +// #included by unpack.cpp +#ifdef RAR_COMMON_HPP +SubAllocator::SubAllocator() +{ + Clean(); +} + + +void SubAllocator::Clean() +{ + SubAllocatorSize=0; +} + + +inline void SubAllocator::InsertNode(void* p,int indx) +{ + ((RAR_NODE*) p)->next=FreeList[indx].next; + FreeList[indx].next=(RAR_NODE*) p; +} + + +inline void* SubAllocator::RemoveNode(int indx) +{ + RAR_NODE* RetVal=FreeList[indx].next; + FreeList[indx].next=RetVal->next; + return RetVal; +} + + +inline uint SubAllocator::U2B(int NU) +{ + return /*8*NU+4*NU*/UNIT_SIZE*NU; +} + + +/* + calculate RAR_MEM_BLK + Items address. Real RAR_MEM_BLK size must be + equal to UNIT_SIZE, so we cannot just add Items to RAR_MEM_BLK address +*/ +inline RAR_MEM_BLK* SubAllocator::MBPtr(RAR_MEM_BLK *BasePtr,int Items) +{ + return((RAR_MEM_BLK*)( ((byte *)(BasePtr))+U2B(Items) )); +} + + +inline void SubAllocator::SplitBlock(void* pv,int OldIndx,int NewIndx) +{ + int i, UDiff=Indx2Units[OldIndx]-Indx2Units[NewIndx]; + byte* p=((byte*) pv)+U2B(Indx2Units[NewIndx]); + if (Indx2Units[i=Units2Indx[UDiff-1]] != UDiff) + { + InsertNode(p,--i); + p += U2B(i=Indx2Units[i]); + UDiff -= i; + } + InsertNode(p,Units2Indx[UDiff-1]); +} + + + + +void SubAllocator::StopSubAllocator() +{ + if ( SubAllocatorSize ) + { + SubAllocatorSize=0; + rarfree(HeapStart); + } +} + + +bool SubAllocator::StartSubAllocator(int SASize) +{ + uint t=SASize << 20; + if (SubAllocatorSize == t) + return true; + StopSubAllocator(); + uint AllocSize=t/FIXED_UNIT_SIZE*UNIT_SIZE+UNIT_SIZE; +#ifdef STRICT_ALIGNMENT_REQUIRED + AllocSize+=UNIT_SIZE; +#endif + if ((HeapStart=(byte *)rarmalloc(AllocSize)) == NULL) + { + ErrHandler->MemoryError(); + return false; + } + HeapEnd=HeapStart+AllocSize-UNIT_SIZE; + SubAllocatorSize=t; + return true; +} + + +void SubAllocator::InitSubAllocator() +{ + int i, k; + memset(FreeList,0,sizeof(FreeList)); + pText=HeapStart; + uint Size2=FIXED_UNIT_SIZE*(SubAllocatorSize/8/FIXED_UNIT_SIZE*7); + uint RealSize2=Size2/FIXED_UNIT_SIZE*UNIT_SIZE; + uint Size1=SubAllocatorSize-Size2; + uint RealSize1=Size1/FIXED_UNIT_SIZE*UNIT_SIZE+Size1%FIXED_UNIT_SIZE; +#ifdef STRICT_ALIGNMENT_REQUIRED + if (Size1%FIXED_UNIT_SIZE!=0) + RealSize1+=UNIT_SIZE-Size1%FIXED_UNIT_SIZE; +#endif + HiUnit=HeapStart+SubAllocatorSize; + LoUnit=UnitsStart=HeapStart+RealSize1; + FakeUnitsStart=HeapStart+Size1; + HiUnit=LoUnit+RealSize2; + for (i=0,k=1;i < N1 ;i++,k += 1) + Indx2Units[i]=k; + for (k++;i < N1+N2 ;i++,k += 2) + Indx2Units[i]=k; + for (k++;i < N1+N2+N3 ;i++,k += 3) + Indx2Units[i]=k; + for (k++;i < N1+N2+N3+N4;i++,k += 4) + Indx2Units[i]=k; + for (GlueCount=k=i=0;k < 128;k++) + { + i += (Indx2Units[i] < k+1); + Units2Indx[k]=i; + } +} + + +inline void SubAllocator::GlueFreeBlocks() +{ + RAR_MEM_BLK s0, * p, * p1; + int i, k, sz; + if (LoUnit != HiUnit) + *LoUnit=0; + for (i=0, s0.next=s0.prev=&s0;i < N_INDEXES;i++) + while ( FreeList[i].next ) + { + p=(RAR_MEM_BLK*)RemoveNode(i); + p->insertAt(&s0); + p->Stamp=0xFFFF; + p->NU=Indx2Units[i]; + } + for (p=s0.next;p != &s0;p=p->next) + while ((p1=MBPtr(p,p->NU))->Stamp == 0xFFFF && int(p->NU)+p1->NU < 0x10000) + { + p1->remove(); + p->NU += p1->NU; + } + while ((p=s0.next) != &s0) + { + for (p->remove(), sz=p->NU;sz > 128;sz -= 128, p=MBPtr(p,128)) + InsertNode(p,N_INDEXES-1); + if (Indx2Units[i=Units2Indx[sz-1]] != sz) + { + k=sz-Indx2Units[--i]; + InsertNode(MBPtr(p,sz-k),k-1); + } + InsertNode(p,i); + } +} + +void* SubAllocator::AllocUnitsRare(int indx) +{ + if ( !GlueCount ) + { + GlueCount = 255; + GlueFreeBlocks(); + if ( FreeList[indx].next ) + return RemoveNode(indx); + } + int i=indx; + do + { + if (++i == N_INDEXES) + { + GlueCount--; + i=U2B(Indx2Units[indx]); + int j=FIXED_UNIT_SIZE*Indx2Units[indx]; + if (FakeUnitsStart-pText > j) + { + FakeUnitsStart-=j; + UnitsStart -= i; + return(UnitsStart); + } + return(NULL); + } + } while ( !FreeList[i].next ); + void* RetVal=RemoveNode(i); + SplitBlock(RetVal,i,indx); + return RetVal; +} + + +inline void* SubAllocator::AllocUnits(int NU) +{ + int indx=Units2Indx[NU-1]; + if ( FreeList[indx].next ) + return RemoveNode(indx); + void* RetVal=LoUnit; + LoUnit += U2B(Indx2Units[indx]); + if (LoUnit <= HiUnit) + return RetVal; + LoUnit -= U2B(Indx2Units[indx]); + return AllocUnitsRare(indx); +} + + +void* SubAllocator::AllocContext() +{ + if (HiUnit != LoUnit) + return (HiUnit -= UNIT_SIZE); + if ( FreeList->next ) + return RemoveNode(0); + return AllocUnitsRare(0); +} + + +void* SubAllocator::ExpandUnits(void* OldPtr,int OldNU) +{ + int i0=Units2Indx[OldNU-1], i1=Units2Indx[OldNU-1+1]; + if (i0 == i1) + return OldPtr; + void* ptr=AllocUnits(OldNU+1); + if ( ptr ) + { + memcpy(ptr,OldPtr,U2B(OldNU)); + InsertNode(OldPtr,i0); + } + return ptr; +} + + +void* SubAllocator::ShrinkUnits(void* OldPtr,int OldNU,int NewNU) +{ + int i0=Units2Indx[OldNU-1], i1=Units2Indx[NewNU-1]; + if (i0 == i1) + return OldPtr; + if ( FreeList[i1].next ) + { + void* ptr=RemoveNode(i1); + memcpy(ptr,OldPtr,U2B(NewNU)); + InsertNode(OldPtr,i0); + return ptr; + } + else + { + SplitBlock(OldPtr,i0,i1); + return OldPtr; + } +} + + +void SubAllocator::FreeUnits(void* ptr,int OldNU) +{ + InsertNode(ptr,Units2Indx[OldNU-1]); +} +#endif diff --git a/snesreader/unrar/suballoc.hpp b/snesreader/unrar/suballoc.hpp new file mode 100644 index 00000000..1ea9f217 --- /dev/null +++ b/snesreader/unrar/suballoc.hpp @@ -0,0 +1,88 @@ +/**************************************************************************** + * This file is part of PPMd project * + * Written and distributed to public domain by Dmitry Shkarin 1997, * + * 1999-2000 * + * Contents: interface to memory allocation routines * + ****************************************************************************/ +#if !defined(_SUBALLOC_H_) +#define _SUBALLOC_H_ + +const int N1=4, N2=4, N3=4, N4=(128+3-1*N1-2*N2-3*N3)/4; +const int N_INDEXES=N1+N2+N3+N4; + +#if defined(__GNUC__) && !defined(STRICT_ALIGNMENT_REQUIRED) +#define _PACK_ATTR __attribute__ ((packed)) +#else +#define _PACK_ATTR +#endif /* defined(__GNUC__) */ + +#ifndef STRICT_ALIGNMENT_REQUIRED +#pragma pack(1) +#endif + +struct RAR_MEM_BLK +{ + ushort Stamp, NU; + RAR_MEM_BLK* next, * prev; + void insertAt(RAR_MEM_BLK* p) + { + next=(prev=p)->next; + p->next=next->prev=this; + } + void remove() + { + prev->next=next; + next->prev=prev; + } +} _PACK_ATTR; + +#ifndef STRICT_ALIGNMENT_REQUIRED +#ifdef _AIX +#pragma pack(pop) +#else +#pragma pack() +#endif +#endif + + +struct RAR_NODE +{ + RAR_NODE* next; +}; + +class SubAllocator +{ + private: + inline void InsertNode(void* p,int indx); + inline void* RemoveNode(int indx); + inline uint U2B(int NU); + inline void SplitBlock(void* pv,int OldIndx,int NewIndx); + uint GetUsedMemory(); + inline void GlueFreeBlocks(); + void* AllocUnitsRare(int indx); + inline RAR_MEM_BLK* MBPtr(RAR_MEM_BLK *BasePtr,int Items); + + long SubAllocatorSize; + byte Indx2Units[N_INDEXES], Units2Indx[128], GlueCount; + byte *HeapStart,*LoUnit, *HiUnit; + struct RAR_NODE FreeList[N_INDEXES]; + public: + Rar_Error_Handler* ErrHandler; + SubAllocator(); + ~SubAllocator() {StopSubAllocator();} + void Clean(); + bool StartSubAllocator(int SASize); + void StopSubAllocator(); + void InitSubAllocator(); + inline void* AllocContext(); + inline void* AllocUnits(int NU); + inline void* ExpandUnits(void* ptr,int OldNU); + inline void* ShrinkUnits(void* ptr,int OldNU,int NewNU); + inline void FreeUnits(void* ptr,int OldNU); + long GetAllocatedMemory() {return(SubAllocatorSize);}; + + byte *pText, *UnitsStart,*HeapEnd,*FakeUnitsStart; +}; + + +#endif /* !defined(_SUBALLOC_H_) */ diff --git a/snesreader/unrar/technote.txt b/snesreader/unrar/technote.txt new file mode 100644 index 00000000..15e57593 --- /dev/null +++ b/snesreader/unrar/technote.txt @@ -0,0 +1,275 @@ + + RAR version 3.80 - Technical information + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + THE ARCHIVE FORMAT DESCRIBED BELOW IS ONLY VALID FOR VERSIONS SINCE 1.50 + + ========================================================================== + RAR archive file format + ========================================================================== + + Archive file consists of variable length blocks. The order of these +blocks may vary, but the first block must be a marker block followed by +an archive header block. + + Each block begins with the following fields: + +HEAD_CRC 2 bytes CRC of total block or block part +HEAD_TYPE 1 byte Block type +HEAD_FLAGS 2 bytes Block flags +HEAD_SIZE 2 bytes Block size +ADD_SIZE 4 bytes Optional field - added block size + + Field ADD_SIZE present only if (HEAD_FLAGS & 0x8000) != 0 + + Total block size is HEAD_SIZE if (HEAD_FLAGS & 0x8000) == 0 +and HEAD_SIZE+ADD_SIZE if the field ADD_SIZE is present - when +(HEAD_FLAGS & 0x8000) != 0. + + In each block the followings bits in HEAD_FLAGS have the same meaning: + + 0x4000 - if set, older RAR versions will ignore the block + and remove it when the archive is updated. + if clear, the block is copied to the new archive + file when the archive is updated; + + 0x8000 - if set, ADD_SIZE field is present and the full block + size is HEAD_SIZE+ADD_SIZE. + + Declared block types: + +HEAD_TYPE=0x72 marker block +HEAD_TYPE=0x73 archive header +HEAD_TYPE=0x74 file header +HEAD_TYPE=0x75 old style comment header +HEAD_TYPE=0x76 old style authenticity information +HEAD_TYPE=0x77 old style subblock +HEAD_TYPE=0x78 old style recovery record +HEAD_TYPE=0x79 old style authenticity information +HEAD_TYPE=0x7a subblock + + Comment block is actually used only within other blocks and doesn't +exist separately. + + Archive processing is made in the following manner: + +1. Read and check marker block +2. Read archive header +3. Read or skip HEAD_SIZE-sizeof(MAIN_HEAD) bytes +4. If end of archive encountered then terminate archive processing, + else read 7 bytes into fields HEAD_CRC, HEAD_TYPE, HEAD_FLAGS, + HEAD_SIZE. +5. Check HEAD_TYPE. + if HEAD_TYPE==0x74 + read file header ( first 7 bytes already read ) + read or skip HEAD_SIZE-sizeof(FILE_HEAD) bytes + if (HEAD_FLAGS & 0x100) + read or skip HIGH_PACK_SIZE*0x100000000+PACK_SIZE bytes + else + read or skip PACK_SIZE bytes + else + read corresponding HEAD_TYPE block: + read HEAD_SIZE-7 bytes + if (HEAD_FLAGS & 0x8000) + read ADD_SIZE bytes +6. go to 4. + + + ========================================================================== + Block Formats + ========================================================================== + + + Marker block ( MARK_HEAD ) + + +HEAD_CRC Always 0x6152 +2 bytes + +HEAD_TYPE Header type: 0x72 +1 byte + +HEAD_FLAGS Always 0x1a21 +2 bytes + +HEAD_SIZE Block size = 0x0007 +2 bytes + + The marker block is actually considered as a fixed byte +sequence: 0x52 0x61 0x72 0x21 0x1a 0x07 0x00 + + + + Archive header ( MAIN_HEAD ) + + +HEAD_CRC CRC of fields HEAD_TYPE to RESERVED2 +2 bytes + +HEAD_TYPE Header type: 0x73 +1 byte + +HEAD_FLAGS Bit flags: +2 bytes + 0x0001 - Volume attribute (archive volume) + 0x0002 - Archive comment present + RAR 3.x uses the separate comment block + and does not set this flag. + + 0x0004 - Archive lock attribute + 0x0008 - Solid attribute (solid archive) + 0x0010 - New volume naming scheme ('volname.partN.rar') + 0x0020 - Authenticity information present + RAR 3.x does not set this flag. + + 0x0040 - Recovery record present + 0x0080 - Block headers are encrypted + 0x0100 - First volume (set only by RAR 3.0 and later) + + other bits in HEAD_FLAGS are reserved for + internal use + +HEAD_SIZE Archive header total size including archive comments +2 bytes + +RESERVED1 Reserved +2 bytes + +RESERVED2 Reserved +4 bytes + + + + File header (File in archive) + + +HEAD_CRC CRC of fields from HEAD_TYPE to FILEATTR +2 bytes and file name + +HEAD_TYPE Header type: 0x74 +1 byte + +HEAD_FLAGS Bit flags: +2 bytes + 0x01 - file continued from previous volume + 0x02 - file continued in next volume + 0x04 - file encrypted with password + + 0x08 - file comment present + RAR 3.x uses the separate comment block + and does not set this flag. + + 0x10 - information from previous files is used (solid flag) + (for RAR 2.0 and later) + + bits 7 6 5 (for RAR 2.0 and later) + + 0 0 0 - dictionary size 64 KB + 0 0 1 - dictionary size 128 KB + 0 1 0 - dictionary size 256 KB + 0 1 1 - dictionary size 512 KB + 1 0 0 - dictionary size 1024 KB + 1 0 1 - dictionary size 2048 KB + 1 1 0 - dictionary size 4096 KB + 1 1 1 - file is directory + + 0x100 - HIGH_PACK_SIZE and HIGH_UNP_SIZE fields + are present. These fields are used to archive + only very large files (larger than 2Gb), + for smaller files these fields are absent. + + 0x200 - FILE_NAME contains both usual and encoded + Unicode name separated by zero. In this case + NAME_SIZE field is equal to the length + of usual name plus encoded Unicode name plus 1. + + If this flag is present, but FILE_NAME does not + contain zero bytes, it means that file name + is encoded using UTF-8. + + 0x400 - the header contains additional 8 bytes + after the file name, which are required to + increase encryption security (so called 'salt'). + + 0x800 - Version flag. It is an old file version, + a version number is appended to file name as ';n'. + + 0x1000 - Extended time field present. + + 0x8000 - this bit always is set, so the complete + block size is HEAD_SIZE + PACK_SIZE + (and plus HIGH_PACK_SIZE, if bit 0x100 is set) + +HEAD_SIZE File header full size including file name and comments +2 bytes + +PACK_SIZE Compressed file size +4 bytes + +UNP_SIZE Uncompressed file size +4 bytes + +HOST_OS Operating system used for archiving +1 byte 0 - MS DOS + 1 - OS/2 + 2 - Win32 + 3 - Unix + 4 - Mac OS + 5 - BeOS + +FILE_CRC File CRC +4 bytes + +FTIME Date and time in standard MS DOS format +4 bytes + +UNP_VER RAR version needed to extract file +1 byte + Version number is encoded as + 10 * Major version + minor version. + +METHOD Packing method +1 byte + 0x30 - storing + 0x31 - fastest compression + 0x32 - fast compression + 0x33 - normal compression + 0x34 - good compression + 0x35 - best compression + +NAME_SIZE File name size +2 bytes + +ATTR File attributes +4 bytes + +HIGH_PACK_SIZE High 4 bytes of 64 bit value of compressed file size. +4 bytes Optional value, presents only if bit 0x100 in HEAD_FLAGS + is set. + +HIGH_UNP_SIZE High 4 bytes of 64 bit value of uncompressed file size. +4 bytes Optional value, presents only if bit 0x100 in HEAD_FLAGS + is set. + +FILE_NAME File name - string of NAME_SIZE bytes size + +SALT present if (HEAD_FLAGS & 0x400) != 0 +8 bytes + +EXT_TIME present if (HEAD_FLAGS & 0x1000) != 0 +variable size + +other new fields may appear here. + + + ========================================================================== + Application notes + ========================================================================== + + 1. To process an SFX archive you need to skip the SFX module searching +for the marker block in the archive. There is no marker block sequence (0x52 +0x61 0x72 0x21 0x1a 0x07 0x00) in the SFX module itself. + + 2. The CRC is calculated using the standard polynomial 0xEDB88320. In +case the size of the CRC is less than 4 bytes, only the low order bytes +are used. diff --git a/snesreader/unrar/unicode.cpp b/snesreader/unrar/unicode.cpp new file mode 100644 index 00000000..3853752c --- /dev/null +++ b/snesreader/unrar/unicode.cpp @@ -0,0 +1,106 @@ +#include "rar.hpp" + +#include "unicode.hpp" + +bool WideToChar(const wchar *Src,char *Dest,int DestSize) +{ + bool RetCode=true; +#ifdef _WIN_32 + if (WideCharToMultiByte(CP_ACP,0,Src,-1,Dest,DestSize,NULL,NULL)==0) + RetCode=false; +#else +#ifdef _APPLE + WideToUtf(Src,Dest,DestSize); +#else +#ifdef MBFUNCTIONS + + size_t ResultingSize=wcstombs(Dest,Src,DestSize); + if (ResultingSize==(size_t)-1) + RetCode=false; + if (ResultingSize==0 && *Src!=0) + RetCode=false; + + if ((!RetCode || *Dest==0 && *Src!=0) && DestSize>NM && strlenw(Src)>5)==6) + { + if ((*Src&0xc0)!=0x80) + break; + d=((c&0x1f)<<6)|(*Src&0x3f); + Src++; + } + else + if ((c>>4)==14) + { + if ((Src[0]&0xc0)!=0x80 || (Src[1]&0xc0)!=0x80) + break; + d=((c&0xf)<<12)|((Src[0]&0x3f)<<6)|(Src[1]&0x3f); + Src+=2; + } + else + if ((c>>3)==30) + { + if ((Src[0]&0xc0)!=0x80 || (Src[1]&0xc0)!=0x80 || (Src[2]&0xc0)!=0x80) + break; + d=((c&7)<<18)|((Src[0]&0x3f)<<12)|((Src[1]&0x3f)<<6)|(Src[2]&0x3f); + Src+=3; + } + else + break; + if (--DestSize<0) + break; + if (d>0xffff) + { + if (--DestSize<0 || d>0x10ffff) + break; + *(Dest++)=((d-0x10000)>>10)+0xd800; + *(Dest++)=(d&0x3ff)+0xdc00; + } + else + *(Dest++)=d; + } + *Dest=0; +} + + +// strfn.cpp +void ExtToInt(const char *Src,char *Dest) +{ +#if defined(_WIN_32) + CharToOem(Src,Dest); +#else + if (Dest!=Src) + strcpy(Dest,Src); +#endif +} diff --git a/snesreader/unrar/unicode.hpp b/snesreader/unrar/unicode.hpp new file mode 100644 index 00000000..2ed90e6a --- /dev/null +++ b/snesreader/unrar/unicode.hpp @@ -0,0 +1,10 @@ +#ifndef _RAR_UNICODE_ +#define _RAR_UNICODE_ + +bool WideToChar(const wchar *Src,char *Dest,int DestSize=0x1000000); +void UtfToWide(const char *Src,wchar *Dest,int DestSize); + +// strfn.cpp +void ExtToInt(const char *Src,char *Dest); + +#endif diff --git a/snesreader/unrar/unpack.cpp b/snesreader/unrar/unpack.cpp new file mode 100644 index 00000000..3d9bcf84 --- /dev/null +++ b/snesreader/unrar/unpack.cpp @@ -0,0 +1,1065 @@ +#include "rar.hpp" + +#include "coder.cpp" +#include "suballoc.cpp" +#include "model.cpp" +#ifndef SFX_MODULE +#include "unpack15.cpp" +#include "unpack20.cpp" +#endif + +Unpack::Unpack(ComprDataIO *DataIO) + : VMCode( DataIO ), Filters( DataIO ), PrgStack( DataIO ), OldFilterLengths( DataIO ), ErrHandler( *DataIO ) +{ + PPM.SubAlloc.ErrHandler = DataIO; + LastStackFilter = NULL; + UnpIO=DataIO; + Window=NULL; + ExternalWindow=false; + UnpAllBuf=false; + UnpSomeRead=false; +} + + +Unpack::~Unpack() +{ + if (Window!=NULL && !ExternalWindow) + rarfree( Window ); + InitFilters(); +} + + +void Unpack::Init(byte *Window) +{ + if (Window==NULL) + { + Unpack::Window = (byte*) rarmalloc( MAXWINSIZE ); + if (Unpack::Window==NULL) + ErrHandler.MemoryError(); + } + else + { + Unpack::Window=Window; + ExternalWindow=true; + } + UnpInitData(false); + BitInput::handle_mem_error( ErrHandler ); + Inp.handle_mem_error( ErrHandler ); + + // Only check BitInput, as VM's memory isn't allocated yet + VM.BitInput::handle_mem_error( ErrHandler ); + +#ifndef SFX_MODULE + // RAR 1.5 decompression initialization + OldUnpInitData(false); + InitHuff(); +#endif +} + + +void Unpack::DoUnpack(int Method,bool Solid) +{ + switch(Method) + { +#ifndef SFX_MODULE + case 15: // rar 1.5 compression + Unpack15(Solid); + break; + case 20: // rar 2.x compression + case 26: // files larger than 2GB + Unpack20(Solid); + break; +#endif + case 29: // rar 3.x compression + case 36: // alternative hash + Unpack29(Solid); + break; + } +} + + +inline void Unpack::InsertOldDist(unsigned int Distance) +{ + OldDist[3]=OldDist[2]; + OldDist[2]=OldDist[1]; + OldDist[1]=OldDist[0]; + OldDist[0]=Distance; +} + + +inline void Unpack::InsertLastMatch(unsigned int Length,unsigned int Distance) +{ + LastDist=Distance; + LastLength=Length; +} + + +// These optimizations give 22% speedup on x86, 44% speedup on PowerPC +void Unpack::CopyString(unsigned int Length,unsigned int Distance) +{ + unsigned UnpPtr = this->UnpPtr; // cache in register + byte* const Window = this->Window; // cache in register + + unsigned int DestPtr=UnpPtr-Distance; + if (UnpPtrUnpPtr += Length; + if ( Distance < Length ) // can't use memcpy when source and dest overlap + { + // Length always >= 1 + do + { + Window[UnpPtr++]=Window[DestPtr++]; + } + while (--Length>0) + ; + } + else + { + memcpy( &Window[UnpPtr], &Window[DestPtr], Length ); + } + } + else + { + while (Length--) + { + Window[UnpPtr]=Window[DestPtr++ & MAXWINMASK]; + UnpPtr=(UnpPtr+1) & MAXWINMASK; + } + + this->UnpPtr = UnpPtr; + } +} + + +int Unpack::DecodeNumber(struct Decode *Dec) +{ + unsigned int Bits; + unsigned int BitField=getbits() & 0xfffe; + if (BitFieldDecodeLen[8]) + if (BitFieldDecodeLen[4]) + if (BitFieldDecodeLen[2]) + if (BitFieldDecodeLen[1]) + Bits=1; + else + Bits=2; + else + if (BitFieldDecodeLen[3]) + Bits=3; + else + Bits=4; + else + if (BitFieldDecodeLen[6]) + if (BitFieldDecodeLen[5]) + Bits=5; + else + Bits=6; + else + if (BitFieldDecodeLen[7]) + Bits=7; + else + Bits=8; + else + if (BitFieldDecodeLen[12]) + if (BitFieldDecodeLen[10]) + if (BitFieldDecodeLen[9]) + Bits=9; + else + Bits=10; + else + if (BitFieldDecodeLen[11]) + Bits=11; + else + Bits=12; + else + if (BitFieldDecodeLen[14]) + if (BitFieldDecodeLen[13]) + Bits=13; + else + Bits=14; + else + Bits=15; + + unsigned int N=Dec->DecodePos[Bits]+((BitField-Dec->DecodeLen[Bits-1])>>(16-Bits)); + if (N>=Dec->MaxNum) + N=0; + // do after reading values, to allow better instruction scheduling + addbits(Bits); + return(Dec->DecodeNum[N]); +} + +const +static unsigned char LDecode[]={0,1,2,3,4,5,6,7,8,10,12,14,16,20,24,28,32,40,48,56,64,80,96,112,128,160,192,224}; +const +static unsigned char LBits[]= {0,0,0,0,0,0,0,0,1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5}; +static int DDecode[DC]; +static byte DBits[DC]; +const +static int DBitLengthCounts[]= {4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,14,0,12}; +const +static unsigned char SDDecode[]={0,4,8,16,32,64,128,192}; +const +static unsigned char SDBits[]= {2,2,3, 4, 5, 6, 6, 6}; + +void Unpack::init_tables() +{ + if (DDecode[1]==0) + { + int Dist=0,BitLength=0,Slot=0; + for (int I=0;IReadBorder) + { + if (!UnpReadBuf()) + break; + } + if (((WrPtr-UnpPtr) & MAXWINMASK)<260 && WrPtr!=UnpPtr) + { + UnpWriteBuf(); + if (WrittenFileSize>DestUnpSize) + return; + if (Suspended) + { + FileExtracted=false; + return; + } + } + if (UnpBlockType==BLOCK_PPM) + { + int Ch=PPM.DecodeChar(); + if (Ch==-1) + { + PPM.CleanUp(); + + // turn off PPM compression mode in case of error, so UnRAR will + // call PPM.DecodeInit in case it needs to turn it on back later. + UnpBlockType=BLOCK_LZ; + break; + } + if (Ch==PPMEscChar) + { + int NextCh=PPM.DecodeChar(); + if (NextCh==0) + { + if (!ReadTables()) + break; + continue; + } + if (NextCh==2 || NextCh==-1) + break; + if (NextCh==3) + { + if (!ReadVMCodePPM()) + break; + continue; + } + if (NextCh==4) + { + unsigned int Distance=0,Length; + Length = 0; // avoids warning + bool Failed=false; + for (int I=0;I<4 && !Failed;I++) + { + int Ch=PPM.DecodeChar(); + if (Ch==-1) + Failed=true; + else + if (I==3) + Length=(byte)Ch; + else + Distance=(Distance<<8)+(byte)Ch; + } + if (Failed) + break; + +#ifdef _MSC_VER + // avoid a warning about uninitialized 'Length' variable + #pragma warning( disable : 4701 ) +#endif + CopyString(Length+32,Distance+2); + continue; + } + if (NextCh==5) + { + int Length=PPM.DecodeChar(); + if (Length==-1) + break; + CopyString(Length+4,1); + continue; + } + } + Window[UnpPtr++]=Ch; + continue; + } + + int Number=DecodeNumber((struct Decode *)&LD); + if (Number<256) + { + Window[UnpPtr++]=(byte)Number; + continue; + } + if (Number>=271) + { + int Length=LDecode[Number-=271]+3; + if ((Bits=LBits[Number])>0) + { + Length+=getbits()>>(16-Bits); + addbits(Bits); + } + + int DistNumber=DecodeNumber((struct Decode *)&DD); + unsigned int Distance=DDecode[DistNumber]+1; + if ((Bits=DBits[DistNumber])>0) + { + if (DistNumber>9) + { + if (Bits>4) + { + Distance+=((getbits()>>(20-Bits))<<4); + addbits(Bits-4); + } + if (LowDistRepCount>0) + { + LowDistRepCount--; + Distance+=PrevLowDist; + } + else + { + int LowDist=DecodeNumber((struct Decode *)&LDD); + if (LowDist==16) + { + LowDistRepCount=LOW_DIST_REP_COUNT-1; + Distance+=PrevLowDist; + } + else + { + Distance+=LowDist; + PrevLowDist=LowDist; + } + } + } + else + { + Distance+=getbits()>>(16-Bits); + addbits(Bits); + } + } + + if (Distance>=0x2000) + { + Length++; + if (Distance>=0x40000L) + Length++; + } + + InsertOldDist(Distance); + InsertLastMatch(Length,Distance); + CopyString(Length,Distance); + continue; + } + if (Number==256) + { + if (!ReadEndOfBlock()) + break; + continue; + } + if (Number==257) + { + if (!ReadVMCode()) + break; + continue; + } + if (Number==258) + { + if (LastLength!=0) + CopyString(LastLength,LastDist); + continue; + } + if (Number<263) + { + int DistNum=Number-259; + unsigned int Distance=OldDist[DistNum]; + for (int I=DistNum;I>0;I--) + OldDist[I]=OldDist[I-1]; + OldDist[0]=Distance; + + int LengthNumber=DecodeNumber((struct Decode *)&RD); + int Length=LDecode[LengthNumber]+2; + if ((Bits=LBits[LengthNumber])>0) + { + Length+=getbits()>>(16-Bits); + addbits(Bits); + } + InsertLastMatch(Length,Distance); + CopyString(Length,Distance); + continue; + } + if (Number<272) + { + unsigned int Distance=SDDecode[Number-=263]+1; + if ((Bits=SDBits[Number])>0) + { + Distance+=getbits()>>(16-Bits); + addbits(Bits); + } + InsertOldDist(Distance); + InsertLastMatch(2,Distance); + CopyString(2,Distance); + continue; + } + } + UnpWriteBuf(); +} + + +bool Unpack::ReadEndOfBlock() +{ + unsigned int BitField=getbits(); + bool NewTable,NewFile=false; + if (BitField & 0x8000) + { + NewTable=true; + addbits(1); + } + else + { + NewFile=true; + NewTable=(BitField & 0x4000); + addbits(2); + } + TablesRead=!NewTable; + return !(NewFile || NewTable && !ReadTables()); +} + + +bool Unpack::ReadVMCode() +{ + unsigned int FirstByte=getbits()>>8; + addbits(8); + int Length=(FirstByte & 7)+1; + if (Length==7) + { + Length=(getbits()>>8)+7; + addbits(8); + } + else + if (Length==8) + { + Length=getbits(); + addbits(16); + } + VMCode.Alloc( Length ); + for (int I=0;I=ReadTop-1 && !UnpReadBuf() && I>8; + addbits(8); + } + return(AddVMCode(FirstByte,&VMCode[0],Length)); +} + + +bool Unpack::ReadVMCodePPM() +{ + unsigned int FirstByte=PPM.DecodeChar(); + if ((int)FirstByte==-1) + return(false); + int Length=(FirstByte & 7)+1; + if (Length==7) + { + int B1=PPM.DecodeChar(); + if (B1==-1) + return(false); + Length=B1+7; + } + else + if (Length==8) + { + int B1=PPM.DecodeChar(); + if (B1==-1) + return(false); + int B2=PPM.DecodeChar(); + if (B2==-1) + return(false); + Length=B1*256+B2; + } + VMCode.Alloc( Length ); + for (int I=0;IFilters.Size() || FiltPos>OldFilterLengths.Size()) + return(false); + LastFilter=FiltPos; + bool NewFilter=(FiltPos==Filters.Size()); + + delete LastStackFilter; + LastStackFilter = NULL; + UnpackFilter *StackFilter=new UnpackFilter(&ErrHandler); + LastStackFilter = StackFilter; + if ( !StackFilter ) + ErrHandler.MemoryError(); + + UnpackFilter *Filter; + if (NewFilter) // new filter code, never used before since VM reset + { + // too many different filters, corrupt archive + if (FiltPos>1024) + return(false); + + Filters.Add(1); + Filters[Filters.Size()-1]=Filter=new UnpackFilter(&ErrHandler); + if ( !Filter ) + ErrHandler.MemoryError(); + StackFilter->ParentFilter=Filters.Size()-1; + OldFilterLengths.Add(1); + Filter->ExecCount=0; + } + else // filter was used in the past + { + Filter=Filters[FiltPos]; + StackFilter->ParentFilter=FiltPos; + Filter->ExecCount++; + } + + int EmptyCount=0; + { + for (int I=0;I0) + PrgStack[I]=NULL; + } + } + if (EmptyCount==0) + { + PrgStack.Add(1); + EmptyCount=1; + } + int StackPos=PrgStack.Size()-EmptyCount; + PrgStack[StackPos]=StackFilter; + LastStackFilter = NULL; + StackFilter->ExecCount=Filter->ExecCount; + + uint BlockStart=RarVM::ReadData(Inp); + if (FirstByte & 0x40) + BlockStart+=258; + StackFilter->BlockStart=(BlockStart+UnpPtr)&MAXWINMASK; + if (FirstByte & 0x20) + StackFilter->BlockLength=RarVM::ReadData(Inp); + else + StackFilter->BlockLength=FiltPosNextWindow=WrPtr!=UnpPtr && ((WrPtr-UnpPtr)&MAXWINMASK)<=BlockStart; + +// DebugLog("\nNextWindow: UnpPtr=%08x WrPtr=%08x BlockStart=%08x",UnpPtr,WrPtr,BlockStart); + + OldFilterLengths[FiltPos]=StackFilter->BlockLength; + + memset(StackFilter->Prg.InitR,0,sizeof(StackFilter->Prg.InitR)); + StackFilter->Prg.InitR[3]=VM_GLOBALMEMADDR; + StackFilter->Prg.InitR[4]=StackFilter->BlockLength; + StackFilter->Prg.InitR[5]=StackFilter->ExecCount; + + if (FirstByte & 0x10) // set registers to optional parameters if any + { + unsigned int InitMask=Inp.fgetbits()>>9; + Inp.faddbits(7); + for (int I=0;I<7;I++) + if (InitMask & (1<Prg.InitR[I]=RarVM::ReadData(Inp); + } + + if (NewFilter) + { + uint VMCodeSize=RarVM::ReadData(Inp); + if (VMCodeSize>=0x10000 || VMCodeSize==0) + return(false); + VMCode.Alloc( VMCodeSize ); + for (int I=0;I>8; + Inp.faddbits(8); + } + VM.Prepare(&VMCode[0],VMCodeSize,&Filter->Prg); + VMCode.Reset(); + } + StackFilter->Prg.AltCmd=&Filter->Prg.Cmd[0]; + StackFilter->Prg.CmdCount=Filter->Prg.CmdCount; + + int StaticDataSize=Filter->Prg.StaticData.Size(); + if (StaticDataSize>0 && StaticDataSizePrg.StaticData.Add(StaticDataSize); + memcpy(&StackFilter->Prg.StaticData[0],&Filter->Prg.StaticData[0],StaticDataSize); + } + + if (StackFilter->Prg.GlobalData.Size()Prg.GlobalData.Reset(); + StackFilter->Prg.GlobalData.Add(VM_FIXEDGLOBALSIZE); + } + byte *GlobalData=&StackFilter->Prg.GlobalData[0]; + for (int I=0;I<7;I++) + VM.SetLowEndianValue((uint *)&GlobalData[I*4],StackFilter->Prg.InitR[I]); + VM.SetLowEndianValue((uint *)&GlobalData[0x1c],StackFilter->BlockLength); + VM.SetLowEndianValue((uint *)&GlobalData[0x20],0); + VM.SetLowEndianValue((uint *)&GlobalData[0x2c],StackFilter->ExecCount); + memset(&GlobalData[0x30],0,16); + + if (FirstByte & 8) // put data block passed as parameter if any + { + if (Inp.Overflow(3)) + return(false); + uint DataSize=RarVM::ReadData(Inp); + if (DataSize>VM_GLOBALMEMSIZE-VM_FIXEDGLOBALSIZE) + return(false); + unsigned int CurSize=StackFilter->Prg.GlobalData.Size(); + if (CurSizePrg.GlobalData.Add(DataSize+VM_FIXEDGLOBALSIZE-CurSize); + byte *GlobalData=&StackFilter->Prg.GlobalData[VM_FIXEDGLOBALSIZE]; + for (int I=0;I>8; + Inp.faddbits(8); + } + } + Inp.InitBitInput(); + return(true); +} + + +bool Unpack::UnpReadBuf() +{ + int DataSize=ReadTop-InAddr; + if (DataSize<0) + return(false); + if (InAddr>BitInput::MAX_SIZE/2) + { + if (DataSize>0) + memmove(InBuf,InBuf+InAddr,DataSize); + InAddr=0; + ReadTop=DataSize; + } + else + DataSize=ReadTop; + int ReadCode=UnpIO->UnpRead(InBuf+DataSize,(BitInput::MAX_SIZE-DataSize)&~0xf); + if (ReadCode>0) + ReadTop+=ReadCode; + ReadBorder=ReadTop-30; + return(ReadCode!=-1); +} + + +void Unpack::UnpWriteBuf() +{ + unsigned int WrittenBorder=WrPtr; + unsigned int WriteSize=(UnpPtr-WrittenBorder)&MAXWINMASK; + for (int I=0;INextWindow) + { + flt->NextWindow=false; + continue; + } + unsigned int BlockStart=flt->BlockStart; + unsigned int BlockLength=flt->BlockLength; + if (((BlockStart-WrittenBorder)&MAXWINMASK)ParentFilter]->Prg; + VM_PreparedProgram *Prg=&flt->Prg; + + if (ParentPrg->GlobalData.Size()>VM_FIXEDGLOBALSIZE) + { + // copy global data from previous script execution if any + Prg->GlobalData.Alloc(ParentPrg->GlobalData.Size()); + memcpy(&Prg->GlobalData[VM_FIXEDGLOBALSIZE],&ParentPrg->GlobalData[VM_FIXEDGLOBALSIZE],ParentPrg->GlobalData.Size()-VM_FIXEDGLOBALSIZE); + } + + ExecuteCode(Prg); + + if (Prg->GlobalData.Size()>VM_FIXEDGLOBALSIZE) + { + // save global data for next script execution + if (ParentPrg->GlobalData.Size()GlobalData.Size()) + ParentPrg->GlobalData.Alloc(Prg->GlobalData.Size()); + memcpy(&ParentPrg->GlobalData[VM_FIXEDGLOBALSIZE],&Prg->GlobalData[VM_FIXEDGLOBALSIZE],Prg->GlobalData.Size()-VM_FIXEDGLOBALSIZE); + } + else + ParentPrg->GlobalData.Reset(); + + byte *FilteredData=Prg->FilteredData; + unsigned int FilteredDataSize=Prg->FilteredDataSize; + + delete PrgStack[I]; + PrgStack[I]=NULL; + while (I+1BlockStart!=BlockStart || + NextFilter->BlockLength!=FilteredDataSize || NextFilter->NextWindow) + break; + + // apply several filters to same data block + + VM.SetMemory(0,FilteredData,FilteredDataSize); + + VM_PreparedProgram *ParentPrg=&Filters[NextFilter->ParentFilter]->Prg; + VM_PreparedProgram *NextPrg=&NextFilter->Prg; + + if (ParentPrg->GlobalData.Size()>VM_FIXEDGLOBALSIZE) + { + // copy global data from previous script execution if any + NextPrg->GlobalData.Alloc(ParentPrg->GlobalData.Size()); + memcpy(&NextPrg->GlobalData[VM_FIXEDGLOBALSIZE],&ParentPrg->GlobalData[VM_FIXEDGLOBALSIZE],ParentPrg->GlobalData.Size()-VM_FIXEDGLOBALSIZE); + } + + ExecuteCode(NextPrg); + + if (NextPrg->GlobalData.Size()>VM_FIXEDGLOBALSIZE) + { + // save global data for next script execution + if (ParentPrg->GlobalData.Size()GlobalData.Size()) + ParentPrg->GlobalData.Alloc(NextPrg->GlobalData.Size()); + memcpy(&ParentPrg->GlobalData[VM_FIXEDGLOBALSIZE],&NextPrg->GlobalData[VM_FIXEDGLOBALSIZE],NextPrg->GlobalData.Size()-VM_FIXEDGLOBALSIZE); + } + else + ParentPrg->GlobalData.Reset(); + + FilteredData=NextPrg->FilteredData; + FilteredDataSize=NextPrg->FilteredDataSize; + I++; + delete PrgStack[I]; + PrgStack[I]=NULL; + } + UnpIO->UnpWrite(FilteredData,FilteredDataSize); + UnpSomeRead=true; + WrittenFileSize+=FilteredDataSize; + WrittenBorder=BlockEnd; + WriteSize=(UnpPtr-WrittenBorder)&MAXWINMASK; + } + else + { + for (int J=I;JNextWindow) + flt->NextWindow=false; + } + WrPtr=WrittenBorder; + return; + } + } + } + + UnpWriteArea(WrittenBorder,UnpPtr); + WrPtr=UnpPtr; +} + + +void Unpack::ExecuteCode(VM_PreparedProgram *Prg) +{ + if (Prg->GlobalData.Size()>0) + { + Prg->InitR[6]=int64to32(WrittenFileSize); + VM.SetLowEndianValue((uint *)&Prg->GlobalData[0x24],int64to32(WrittenFileSize)); + VM.SetLowEndianValue((uint *)&Prg->GlobalData[0x28],int64to32(WrittenFileSize>>31>>1)); + VM.Execute(Prg); + } +} + + +void Unpack::UnpWriteArea(unsigned int StartPtr,unsigned int EndPtr) +{ + if (EndPtr!=StartPtr) + UnpSomeRead=true; + if (EndPtr=DestUnpSize) + return; + int WriteSize=Size; + Int64 LeftToWrite=DestUnpSize-WrittenFileSize; + if (WriteSize>LeftToWrite) + WriteSize=int64to32(LeftToWrite); + UnpIO->UnpWrite(Data,WriteSize); + WrittenFileSize+=Size; +} + + +bool Unpack::ReadTables() +{ + byte BitLength[BC]; + unsigned char Table[HUFF_TABLE_SIZE]; + if (InAddr>ReadTop-25) + if (!UnpReadBuf()) + return(false); + faddbits((8-InBit)&7); + unsigned int BitField=fgetbits(); + if (BitField & 0x8000) + { + UnpBlockType=BLOCK_PPM; + return(PPM.DecodeInit(this,PPMEscChar)); + } + UnpBlockType=BLOCK_LZ; + + PrevLowDist=0; + LowDistRepCount=0; + + if (!(BitField & 0x4000)) + memset(UnpOldTable,0,sizeof(UnpOldTable)); + faddbits(2); + { + for (int I=0;I> 12); + faddbits(4); + if (Length==15) + { + int ZeroCount=(byte)(fgetbits() >> 12); + faddbits(4); + if (ZeroCount==0) + BitLength[I]=15; + else + { + ZeroCount+=2; + while (ZeroCount-- > 0 && IReadTop-5) + if (!UnpReadBuf()) + return(false); + int Number=DecodeNumber((struct Decode *)&BD); + if (Number<16) + { + Table[I]=(Number+UnpOldTable[I]) & 0xf; + I++; + } + else + if (Number<18) + { + int N; + if (Number==16) + { + N=(fgetbits() >> 13)+3; + faddbits(3); + } + else + { + N=(fgetbits() >> 9)+11; + faddbits(7); + } + while (N-- > 0 && I> 13)+3; + faddbits(3); + } + else + { + N=(fgetbits() >> 9)+11; + faddbits(7); + } + while (N-- > 0 && IReadTop) + return(false); + MakeDecodeTables(&Table[0],(struct Decode *)&LD,NC); + MakeDecodeTables(&Table[NC],(struct Decode *)&DD,DC); + MakeDecodeTables(&Table[NC+DC],(struct Decode *)&LDD,LDC); + MakeDecodeTables(&Table[NC+DC+LDC],(struct Decode *)&RD,RC); + memcpy(UnpOldTable,Table,sizeof(UnpOldTable)); + return(true); +} + + +void Unpack::UnpInitData(int Solid) +{ + if (!Solid) + { + TablesRead=false; + memset(OldDist,0,sizeof(OldDist)); + OldDistPtr=0; + LastDist=LastLength=0; +// memset(Window,0,MAXWINSIZE); + memset(UnpOldTable,0,sizeof(UnpOldTable)); + memset(&LD,0,sizeof(LD)); + memset(&DD,0,sizeof(DD)); + memset(&LDD,0,sizeof(LDD)); + memset(&RD,0,sizeof(RD)); + memset(&BD,0,sizeof(BD)); + UnpPtr=WrPtr=0; + PPMEscChar=2; + UnpBlockType=BLOCK_LZ; + + InitFilters(); + } + InitBitInput(); + WrittenFileSize=0; + ReadTop=0; + ReadBorder=0; +#ifndef SFX_MODULE + UnpInitData20(Solid); +#endif +} + + +void Unpack::InitFilters() +{ + delete LastStackFilter; + LastStackFilter = NULL; + + OldFilterLengths.Reset(); + LastFilter=0; + { + for (int I=0;IDecodeNum,0,Size*sizeof(*Dec->DecodeNum)); + for (I=0;IDecodePos[0]=Dec->DecodeLen[0]=0,N=0,I=1;I<16;I++) + { + N=2*(N+LenCount[I]); + M=N<<(15-I); + if (M>0xFFFF) + M=0xFFFF; + Dec->DecodeLen[I]=(unsigned int)M; + TmpPos[I]=Dec->DecodePos[I]=Dec->DecodePos[I-1]+LenCount[I-1]; + } + + for (I=0;IDecodeNum[TmpPos[LenTab[I] & 0xF]++]=I; + Dec->MaxNum=Size; +} diff --git a/snesreader/unrar/unpack.hpp b/snesreader/unrar/unpack.hpp new file mode 100644 index 00000000..918fdb6c --- /dev/null +++ b/snesreader/unrar/unpack.hpp @@ -0,0 +1,227 @@ +#ifndef _RAR_UNPACK_ +#define _RAR_UNPACK_ + +enum BLOCK_TYPES {BLOCK_LZ,BLOCK_PPM}; + +struct Decode +{ + unsigned int MaxNum; + unsigned int DecodeLen[16]; + unsigned int DecodePos[16]; + unsigned int DecodeNum[2]; +}; + +struct LitDecode +{ + unsigned int MaxNum; + unsigned int DecodeLen[16]; + unsigned int DecodePos[16]; + unsigned int DecodeNum[NC]; +}; + +struct DistDecode +{ + unsigned int MaxNum; + unsigned int DecodeLen[16]; + unsigned int DecodePos[16]; + unsigned int DecodeNum[DC]; +}; + +struct LowDistDecode +{ + unsigned int MaxNum; + unsigned int DecodeLen[16]; + unsigned int DecodePos[16]; + unsigned int DecodeNum[LDC]; +}; + +struct RepDecode +{ + unsigned int MaxNum; + unsigned int DecodeLen[16]; + unsigned int DecodePos[16]; + unsigned int DecodeNum[RC]; +}; + +struct BitDecode +{ + unsigned int MaxNum; + unsigned int DecodeLen[16]; + unsigned int DecodePos[16]; + unsigned int DecodeNum[BC]; +}; + +struct UnpackFilter + : Rar_Allocator +{ + unsigned int BlockStart; + unsigned int BlockLength; + unsigned int ExecCount; + bool NextWindow; + + // position of parent filter in Filters array used as prototype for filter + // in PrgStack array. Not defined for filters in Filters array. + unsigned int ParentFilter; + + VM_PreparedProgram Prg; + UnpackFilter( Rar_Error_Handler* eh ) : Prg( eh ) { } +}; + +/***************************** Unpack v 2.0 *********************************/ +struct MultDecode +{ + unsigned int MaxNum; + unsigned int DecodeLen[16]; + unsigned int DecodePos[16]; + unsigned int DecodeNum[MC20]; +}; + +struct AudioVariables +{ + int K1,K2,K3,K4,K5; + int D1,D2,D3,D4; + int LastDelta; + unsigned int Dif[11]; + unsigned int ByteCount; + int LastChar; +}; +/***************************** Unpack v 2.0 *********************************/ + + +// public so operator new/delete will be accessible, argh +class Unpack:public BitInput +{ +private: + friend class Pack; + + void Unpack29(bool Solid); + bool UnpReadBuf(); + void UnpWriteBuf(); + void ExecuteCode(VM_PreparedProgram *Prg); + void UnpWriteArea(unsigned int StartPtr,unsigned int EndPtr); + void UnpWriteData(byte *Data,int Size); + bool ReadTables(); + void MakeDecodeTables(unsigned char *LenTab,struct Decode *Dec,int Size); + int DecodeNumber(struct Decode *Dec); + void CopyString(); + inline void InsertOldDist(unsigned int Distance); + inline void InsertLastMatch(unsigned int Length,unsigned int Distance); + void UnpInitData(int Solid); + void CopyString(unsigned int Length,unsigned int Distance); + bool ReadEndOfBlock(); + bool ReadVMCode(); + bool ReadVMCodePPM(); + bool AddVMCode(unsigned int FirstByte,byte *Code,int CodeSize); + void InitFilters(); + + ComprDataIO *UnpIO; + ModelPPM PPM; + int PPMEscChar; + + Array VMCode; // here to avoid leaks + BitInput Inp; // here to avoid leaks + + RarVM VM; + + UnpackFilter* LastStackFilter; // avoids leak for stack-based filter + + /* Filters code, one entry per filter */ + Array Filters; + + /* Filters stack, several entrances of same filter are possible */ + Array PrgStack; + + /* lengths of preceding blocks, one length per filter. Used to reduce + size required to write block length if lengths are repeating */ + Array OldFilterLengths; + + int LastFilter; + + bool TablesRead; + struct LitDecode LD; + struct DistDecode DD; + struct LowDistDecode LDD; + struct RepDecode RD; + struct BitDecode BD; + + unsigned int OldDist[4],OldDistPtr; + unsigned int LastDist,LastLength; + + unsigned int UnpPtr,WrPtr; + + int ReadTop; + int ReadBorder; + + unsigned char UnpOldTable[HUFF_TABLE_SIZE]; + + int UnpBlockType; + + byte *Window; + bool ExternalWindow; + + + Int64 DestUnpSize; + + enum { Suspended = false }; // original source could never set to true + bool UnpAllBuf; + bool UnpSomeRead; + Int64 WrittenFileSize; + bool FileExtracted; + + int PrevLowDist,LowDistRepCount; + + /***************************** Unpack v 1.5 *********************************/ + void Unpack15(bool Solid); + void ShortLZ(); + void LongLZ(); + void HuffDecode(); + void GetFlagsBuf(); + void OldUnpInitData(int Solid); + void InitHuff(); + void CorrHuff(unsigned int *CharSet,unsigned int *NumToPlace); + void OldCopyString(unsigned int Distance,unsigned int Length); + unsigned int DecodeNum(int Num,unsigned int StartPos, + const unsigned int *DecTab,const unsigned int *PosTab); + void OldUnpWriteBuf(); + + unsigned int ChSet[256],ChSetA[256],ChSetB[256],ChSetC[256]; + unsigned int Place[256],PlaceA[256],PlaceB[256],PlaceC[256]; + unsigned int NToPl[256],NToPlB[256],NToPlC[256]; + unsigned int FlagBuf,AvrPlc,AvrPlcB,AvrLn1,AvrLn2,AvrLn3; + int Buf60,NumHuf,StMode,LCount,FlagsCnt; + unsigned int Nhfb,Nlzb,MaxDist3; + /***************************** Unpack v 1.5 *********************************/ + + /***************************** Unpack v 2.0 *********************************/ + void Unpack20(bool Solid); + struct MultDecode MD[4]; + unsigned char UnpOldTable20[MC20*4]; + int UnpAudioBlock,UnpChannels,UnpCurChannel,UnpChannelDelta; + void CopyString20(unsigned int Length,unsigned int Distance); + bool ReadTables20(); + void UnpInitData20(int Solid); + void ReadLastTables(); + byte DecodeAudio(int Delta); + struct AudioVariables AudV[4]; + /***************************** Unpack v 2.0 *********************************/ + +public: + Rar_Error_Handler& ErrHandler; + byte const* window_wrptr() const { return &Window [WrPtr & MAXWINMASK]; } + + static void init_tables(); + Unpack(ComprDataIO *DataIO); + ~Unpack(); + void Init(byte *Window=NULL); + void DoUnpack(int Method,bool Solid); + void SetDestSize(Int64 DestSize) {DestUnpSize=DestSize;FileExtracted=false;} + + unsigned int GetChar() + { + if (InAddr>BitInput::MAX_SIZE-30) + UnpReadBuf(); + return(InBuf[InAddr++]); + } +}; + +#endif diff --git a/snesreader/unrar/unpack15.cpp b/snesreader/unrar/unpack15.cpp new file mode 100644 index 00000000..b2a63c05 --- /dev/null +++ b/snesreader/unrar/unpack15.cpp @@ -0,0 +1,532 @@ +// #included by unpack.cpp +#ifdef RAR_COMMON_HPP +#define STARTL1 2 +const +static unsigned int DecL1[]={0x8000,0xa000,0xc000,0xd000,0xe000,0xea00, + 0xee00,0xf000,0xf200,0xf200,0xffff}; +const +static unsigned int PosL1[]={0,0,0,2,3,5,7,11,16,20,24,32,32}; + +#define STARTL2 3 +const +static unsigned int DecL2[]={0xa000,0xc000,0xd000,0xe000,0xea00,0xee00, + 0xf000,0xf200,0xf240,0xffff}; +const +static unsigned int PosL2[]={0,0,0,0,5,7,9,13,18,22,26,34,36}; + +#define STARTHF0 4 +const +static unsigned int DecHf0[]={0x8000,0xc000,0xe000,0xf200,0xf200,0xf200, + 0xf200,0xf200,0xffff}; +const +static unsigned int PosHf0[]={0,0,0,0,0,8,16,24,33,33,33,33,33}; + + +#define STARTHF1 5 +const +static unsigned int DecHf1[]={0x2000,0xc000,0xe000,0xf000,0xf200,0xf200, + 0xf7e0,0xffff}; +const +static unsigned int PosHf1[]={0,0,0,0,0,0,4,44,60,76,80,80,127}; + + +#define STARTHF2 5 +const +static unsigned int DecHf2[]={0x1000,0x2400,0x8000,0xc000,0xfa00,0xffff, + 0xffff,0xffff}; +const +static unsigned int PosHf2[]={0,0,0,0,0,0,2,7,53,117,233,0,0}; + + +#define STARTHF3 6 +const +static unsigned int DecHf3[]={0x800,0x2400,0xee00,0xfe80,0xffff,0xffff, + 0xffff}; +const +static unsigned int PosHf3[]={0,0,0,0,0,0,0,2,16,218,251,0,0}; + + +#define STARTHF4 8 +const +static unsigned int DecHf4[]={0xff00,0xffff,0xffff,0xffff,0xffff,0xffff}; +const +static unsigned int PosHf4[]={0,0,0,0,0,0,0,0,0,255,0,0,0}; + + +void Unpack::Unpack15(bool Solid) +{ + if (Suspended) + UnpPtr=WrPtr; + else + { + UnpInitData(Solid); + OldUnpInitData(Solid); + UnpReadBuf(); + if (!Solid) + { + InitHuff(); + UnpPtr=0; + } + else + UnpPtr=WrPtr; + --DestUnpSize; + } + if (DestUnpSize>=0) + { + GetFlagsBuf(); + FlagsCnt=8; + } + + while (DestUnpSize>=0) + { + UnpPtr&=MAXWINMASK; + + if (InAddr>ReadTop-30 && !UnpReadBuf()) + break; + if (((WrPtr-UnpPtr) & MAXWINMASK)<270 && WrPtr!=UnpPtr) + { + OldUnpWriteBuf(); + if (Suspended) + return; + } + if (StMode) + { + HuffDecode(); + continue; + } + + if (--FlagsCnt < 0) + { + GetFlagsBuf(); + FlagsCnt=7; + } + + if (FlagBuf & 0x80) + { + FlagBuf<<=1; + if (Nlzb > Nhfb) + LongLZ(); + else + HuffDecode(); + } + else + { + FlagBuf<<=1; + if (--FlagsCnt < 0) + { + GetFlagsBuf(); + FlagsCnt=7; + } + if (FlagBuf & 0x80) + { + FlagBuf<<=1; + if (Nlzb > Nhfb) + HuffDecode(); + else + LongLZ(); + } + else + { + FlagBuf<<=1; + ShortLZ(); + } + } + } + OldUnpWriteBuf(); +} + + +void Unpack::OldUnpWriteBuf() +{ + if (UnpPtr!=WrPtr) + UnpSomeRead=true; + if (UnpPtrUnpWrite(&Window[WrPtr],-WrPtr & MAXWINMASK); + UnpIO->UnpWrite(Window,UnpPtr); + UnpAllBuf=true; + } + else + UnpIO->UnpWrite(&Window[WrPtr],UnpPtr-WrPtr); + WrPtr=UnpPtr; +} + + +#define GetShortLen1(pos) ((pos)==1 ? Buf60+3:ShortLen1[pos]) +#define GetShortLen2(pos) ((pos)==3 ? Buf60+3:ShortLen2[pos]) + +void Unpack::ShortLZ() +{ + const + static unsigned int ShortLen1[]={1,3,4,4,5,6,7,8,8,4,4,5,6,6,4,0}; + const + static unsigned int ShortXor1[]={0,0xa0,0xd0,0xe0,0xf0,0xf8,0xfc,0xfe, + 0xff,0xc0,0x80,0x90,0x98,0x9c,0xb0}; + const + static unsigned int ShortLen2[]={2,3,3,3,4,4,5,6,6,4,4,5,6,6,4,0}; + const + static unsigned int ShortXor2[]={0,0x40,0x60,0xa0,0xd0,0xe0,0xf0,0xf8, + 0xfc,0xc0,0x80,0x90,0x98,0x9c,0xb0}; + + + unsigned int Length,SaveLength; + unsigned int LastDistance; + unsigned int Distance; + int DistancePlace; + NumHuf=0; + + unsigned int BitField=fgetbits(); + if (LCount==2) + { + faddbits(1); + if (BitField >= 0x8000) + { + OldCopyString((unsigned int)LastDist,LastLength); + return; + } + BitField <<= 1; + LCount=0; + } + + BitField>>=8; + +// not thread safe, replaced by GetShortLen1 and GetShortLen2 macro +// ShortLen1[1]=ShortLen2[3]=Buf60+3; + + if (AvrLn1<37) + { + for (Length=0;;Length++) + if (((BitField^ShortXor1[Length]) & (~(0xff>>GetShortLen1(Length))))==0) + break; + faddbits(GetShortLen1(Length)); + } + else + { + for (Length=0;;Length++) + if (((BitField^ShortXor2[Length]) & (~(0xff>>GetShortLen2(Length))))==0) + break; + faddbits(GetShortLen2(Length)); + } + + if (Length >= 9) + { + if (Length == 9) + { + LCount++; + OldCopyString((unsigned int)LastDist,LastLength); + return; + } + if (Length == 14) + { + LCount=0; + Length=DecodeNum(fgetbits(),STARTL2,DecL2,PosL2)+5; + Distance=(fgetbits()>>1) | 0x8000; + faddbits(15); + LastLength=Length; + LastDist=Distance; + OldCopyString(Distance,Length); + return; + } + + LCount=0; + SaveLength=Length; + Distance=OldDist[(OldDistPtr-(Length-9)) & 3]; + Length=DecodeNum(fgetbits(),STARTL1,DecL1,PosL1)+2; + if (Length==0x101 && SaveLength==10) + { + Buf60 ^= 1; + return; + } + if (Distance > 256) + Length++; + if (Distance >= MaxDist3) + Length++; + + OldDist[OldDistPtr++]=Distance; + OldDistPtr = OldDistPtr & 3; + LastLength=Length; + LastDist=Distance; + OldCopyString(Distance,Length); + return; + } + + LCount=0; + AvrLn1 += Length; + AvrLn1 -= AvrLn1 >> 4; + + DistancePlace=DecodeNum(fgetbits(),STARTHF2,DecHf2,PosHf2) & 0xff; + Distance=ChSetA[DistancePlace]; + if (--DistancePlace != -1) + { + PlaceA[Distance]--; + LastDistance=ChSetA[DistancePlace]; + PlaceA[LastDistance]++; + ChSetA[DistancePlace+1]=LastDistance; + ChSetA[DistancePlace]=Distance; + } + Length+=2; + OldDist[OldDistPtr++] = ++Distance; + OldDistPtr = OldDistPtr & 3; + LastLength=Length; + LastDist=Distance; + OldCopyString(Distance,Length); +} + + +void Unpack::LongLZ() +{ + unsigned int Length; + unsigned int Distance; + unsigned int DistancePlace,NewDistancePlace; + unsigned int OldAvr2,OldAvr3; + + NumHuf=0; + Nlzb+=16; + if (Nlzb > 0xff) + { + Nlzb=0x90; + Nhfb >>= 1; + } + OldAvr2=AvrLn2; + + unsigned int BitField=fgetbits(); + if (AvrLn2 >= 122) + Length=DecodeNum(BitField,STARTL2,DecL2,PosL2); + else + if (AvrLn2 >= 64) + Length=DecodeNum(BitField,STARTL1,DecL1,PosL1); + else + if (BitField < 0x100) + { + Length=BitField; + faddbits(16); + } + else + { + for (Length=0;((BitField<> 5; + + BitField=fgetbits(); + if (AvrPlcB > 0x28ff) + DistancePlace=DecodeNum(BitField,STARTHF2,DecHf2,PosHf2); + else + if (AvrPlcB > 0x6ff) + DistancePlace=DecodeNum(BitField,STARTHF1,DecHf1,PosHf1); + else + DistancePlace=DecodeNum(BitField,STARTHF0,DecHf0,PosHf0); + + AvrPlcB += DistancePlace; + AvrPlcB -= AvrPlcB >> 8; + while (1) + { + Distance = ChSetB[DistancePlace & 0xff]; + NewDistancePlace = NToPlB[Distance++ & 0xff]++; + if (!(Distance & 0xff)) + CorrHuff(ChSetB,NToPlB); + else + break; + } + + ChSetB[DistancePlace]=ChSetB[NewDistancePlace]; + ChSetB[NewDistancePlace]=Distance; + + Distance=((Distance & 0xff00) | (fgetbits() >> 8)) >> 1; + faddbits(7); + + OldAvr3=AvrLn3; + if (Length!=1 && Length!=4) + if (Length==0 && Distance <= MaxDist3) + { + AvrLn3++; + AvrLn3 -= AvrLn3 >> 8; + } + else + if (AvrLn3 > 0) + AvrLn3--; + Length+=3; + if (Distance >= MaxDist3) + Length++; + if (Distance <= 256) + Length+=8; + if (OldAvr3 > 0xb0 || AvrPlc >= 0x2a00 && OldAvr2 < 0x40) + MaxDist3=0x7f00; + else + MaxDist3=0x2001; + OldDist[OldDistPtr++]=Distance; + OldDistPtr = OldDistPtr & 3; + LastLength=Length; + LastDist=Distance; + OldCopyString(Distance,Length); +} + + +void Unpack::HuffDecode() +{ + unsigned int CurByte,NewBytePlace; + unsigned int Length; + unsigned int Distance; + int BytePlace; + + unsigned int BitField=fgetbits(); + + if (AvrPlc > 0x75ff) + BytePlace=DecodeNum(BitField,STARTHF4,DecHf4,PosHf4); + else + if (AvrPlc > 0x5dff) + BytePlace=DecodeNum(BitField,STARTHF3,DecHf3,PosHf3); + else + if (AvrPlc > 0x35ff) + BytePlace=DecodeNum(BitField,STARTHF2,DecHf2,PosHf2); + else + if (AvrPlc > 0x0dff) + BytePlace=DecodeNum(BitField,STARTHF1,DecHf1,PosHf1); + else + BytePlace=DecodeNum(BitField,STARTHF0,DecHf0,PosHf0); + BytePlace&=0xff; + if (StMode) + { + if (BytePlace==0 && BitField > 0xfff) + BytePlace=0x100; + if (--BytePlace==-1) + { + BitField=fgetbits(); + faddbits(1); + if (BitField & 0x8000) + { + NumHuf=StMode=0; + return; + } + else + { + Length = (BitField & 0x4000) ? 4 : 3; + faddbits(1); + Distance=DecodeNum(fgetbits(),STARTHF2,DecHf2,PosHf2); + Distance = (Distance << 5) | (fgetbits() >> 11); + faddbits(5); + OldCopyString(Distance,Length); + return; + } + } + } + else + if (NumHuf++ >= 16 && FlagsCnt==0) + StMode=1; + AvrPlc += BytePlace; + AvrPlc -= AvrPlc >> 8; + Nhfb+=16; + if (Nhfb > 0xff) + { + Nhfb=0x90; + Nlzb >>= 1; + } + + Window[UnpPtr++]=(byte)(ChSet[BytePlace]>>8); + --DestUnpSize; + + while (1) + { + CurByte=ChSet[BytePlace]; + NewBytePlace=NToPl[CurByte++ & 0xff]++; + if ((CurByte & 0xff) > 0xa1) + CorrHuff(ChSet,NToPl); + else + break; + } + + ChSet[BytePlace]=ChSet[NewBytePlace]; + ChSet[NewBytePlace]=CurByte; +} + + +void Unpack::GetFlagsBuf() +{ + unsigned int Flags,NewFlagsPlace; + unsigned int FlagsPlace=DecodeNum(fgetbits(),STARTHF2,DecHf2,PosHf2); + + while (1) + { + Flags=ChSetC[FlagsPlace]; + FlagBuf=Flags>>8; + NewFlagsPlace=NToPlC[Flags++ & 0xff]++; + if ((Flags & 0xff) != 0) + break; + CorrHuff(ChSetC,NToPlC); + } + + ChSetC[FlagsPlace]=ChSetC[NewFlagsPlace]; + ChSetC[NewFlagsPlace]=Flags; +} + + +void Unpack::OldUnpInitData(int Solid) +{ + if (!Solid) + { + AvrPlcB=AvrLn1=AvrLn2=AvrLn3=NumHuf=Buf60=0; + AvrPlc=0x3500; + MaxDist3=0x2001; + Nhfb=Nlzb=0x80; + } + FlagsCnt=0; + FlagBuf=0; + StMode=0; + LCount=0; + ReadTop=0; +} + + +void Unpack::InitHuff() +{ + for (unsigned int I=0;I<256;I++) + { + Place[I]=PlaceA[I]=PlaceB[I]=I; + PlaceC[I]=(~I+1) & 0xff; + ChSet[I]=ChSetB[I]=I<<8; + ChSetA[I]=I; + ChSetC[I]=((~I+1) & 0xff)<<8; + } + memset(NToPl,0,sizeof(NToPl)); + memset(NToPlB,0,sizeof(NToPlB)); + memset(NToPlC,0,sizeof(NToPlC)); + CorrHuff(ChSetB,NToPlB); +} + + +void Unpack::CorrHuff(unsigned int *CharSet,unsigned int *NumToPlace) +{ + int I,J; + for (I=7;I>=0;I--) + for (J=0;J<32;J++,CharSet++) + *CharSet=(*CharSet & ~0xff) | I; + memset(NumToPlace,0,sizeof(NToPl)); + for (I=6;I>=0;I--) + NumToPlace[I]=(7-I)*32; +} + + +void Unpack::OldCopyString(unsigned int Distance,unsigned int Length) +{ + DestUnpSize-=Length; + while (Length--) + { + Window[UnpPtr]=Window[(UnpPtr-Distance) & MAXWINMASK]; + UnpPtr=(UnpPtr+1) & MAXWINMASK; + } +} + + +unsigned int Unpack::DecodeNum(int Num,unsigned int StartPos, + const unsigned int *DecTab,const unsigned int *PosTab) +{ + int I; + for (Num&=0xfff0,I=0;DecTab[I]<=Num;I++) + StartPos++; + faddbits(StartPos); + return(((Num-(I ? DecTab[I-1]:0))>>(16-StartPos))+PosTab[StartPos]); +} +#endif diff --git a/snesreader/unrar/unpack20.cpp b/snesreader/unrar/unpack20.cpp new file mode 100644 index 00000000..0896d1ce --- /dev/null +++ b/snesreader/unrar/unpack20.cpp @@ -0,0 +1,394 @@ +// #included by unpack.cpp +#ifdef RAR_COMMON_HPP +#include "rar.hpp" + +// Presumably these optimizations give similar speedup as those for CopyString in unpack.cpp +void Unpack::CopyString20(unsigned int Length,unsigned int Distance) +{ + LastDist=OldDist[OldDistPtr++ & 3]=Distance; + LastLength=Length; + DestUnpSize-=Length; + + unsigned UnpPtr = this->UnpPtr; // cache in register + byte* const Window = this->Window; // cache in register + + unsigned int DestPtr=UnpPtr-Distance; + if (UnpPtrUnpPtr += Length; + if ( Distance < Length ) // can't use memcpy when source and dest overlap + { + Window[UnpPtr++]=Window[DestPtr++]; + Window[UnpPtr++]=Window[DestPtr++]; + while (Length>2) + { + Length--; + Window[UnpPtr++]=Window[DestPtr++]; + } + } + else + { + memcpy( &Window[UnpPtr], &Window[DestPtr], Length ); + } + } + else + { + while (Length--) + { + Window[UnpPtr]=Window[DestPtr++ & MAXWINMASK]; + UnpPtr=(UnpPtr+1) & MAXWINMASK; + } + this->UnpPtr = UnpPtr; + } +} + + +void Unpack::Unpack20(bool Solid) +{ + const + static unsigned char LDecode[]={0,1,2,3,4,5,6,7,8,10,12,14,16,20,24,28,32,40,48,56,64,80,96,112,128,160,192,224}; + const + static unsigned char LBits[]= {0,0,0,0,0,0,0,0,1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5}; + const + static int DDecode[]={0,1,2,3,4,6,8,12,16,24,32,48,64,96,128,192,256,384,512,768,1024,1536,2048,3072,4096,6144,8192,12288,16384,24576,32768U,49152U,65536,98304,131072,196608,262144,327680,393216,458752,524288,589824,655360,720896,786432,851968,917504,983040}; + const + static unsigned char DBits[]= {0,0,0,0,1,1,2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}; + const + static unsigned char SDDecode[]={0,4,8,16,32,64,128,192}; + const + static unsigned char SDBits[]= {2,2,3, 4, 5, 6, 6, 6}; + unsigned int Bits; + + if (Suspended) + UnpPtr=WrPtr; + else + { + UnpInitData(Solid); + if (!UnpReadBuf()) + return; + if (!Solid) + if (!ReadTables20()) + return; + --DestUnpSize; + } + + while (is64plus(DestUnpSize)) + { + UnpPtr&=MAXWINMASK; + + if (InAddr>ReadTop-30) + if (!UnpReadBuf()) + break; + if (((WrPtr-UnpPtr) & MAXWINMASK)<270 && WrPtr!=UnpPtr) + { + OldUnpWriteBuf(); + if (Suspended) + return; + } + if (UnpAudioBlock) + { + int AudioNumber=DecodeNumber((struct Decode *)&MD[UnpCurChannel]); + + if (AudioNumber==256) + { + if (!ReadTables20()) + break; + continue; + } + Window[UnpPtr++]=DecodeAudio(AudioNumber); + if (++UnpCurChannel==UnpChannels) + UnpCurChannel=0; + --DestUnpSize; + continue; + } + + int Number=DecodeNumber((struct Decode *)&LD); + if (Number<256) + { + Window[UnpPtr++]=(byte)Number; + --DestUnpSize; + continue; + } + if (Number>269) + { + int Length=LDecode[Number-=270]+3; + if ((Bits=LBits[Number])>0) + { + Length+=getbits()>>(16-Bits); + addbits(Bits); + } + + int DistNumber=DecodeNumber((struct Decode *)&DD); + unsigned int Distance=DDecode[DistNumber]+1; + if ((Bits=DBits[DistNumber])>0) + { + Distance+=getbits()>>(16-Bits); + addbits(Bits); + } + + if (Distance>=0x2000) + { + Length++; + if (Distance>=0x40000L) + Length++; + } + + CopyString20(Length,Distance); + continue; + } + if (Number==269) + { + if (!ReadTables20()) + break; + continue; + } + if (Number==256) + { + CopyString20(LastLength,LastDist); + continue; + } + if (Number<261) + { + unsigned int Distance=OldDist[(OldDistPtr-(Number-256)) & 3]; + int LengthNumber=DecodeNumber((struct Decode *)&RD); + int Length=LDecode[LengthNumber]+2; + if ((Bits=LBits[LengthNumber])>0) + { + Length+=getbits()>>(16-Bits); + addbits(Bits); + } + if (Distance>=0x101) + { + Length++; + if (Distance>=0x2000) + { + Length++; + if (Distance>=0x40000) + Length++; + } + } + CopyString20(Length,Distance); + continue; + } + if (Number<270) + { + unsigned int Distance=SDDecode[Number-=261]+1; + if ((Bits=SDBits[Number])>0) + { + Distance+=getbits()>>(16-Bits); + addbits(Bits); + } + CopyString20(2,Distance); + continue; + } + } + ReadLastTables(); + OldUnpWriteBuf(); +} + + +bool Unpack::ReadTables20() +{ + byte BitLength[BC20]; + unsigned char Table[MC20*4]; + int TableSize,N,I; + if (InAddr>ReadTop-25) + if (!UnpReadBuf()) + return(false); + unsigned int BitField=getbits(); + UnpAudioBlock=(BitField & 0x8000); + + if (!(BitField & 0x4000)) + memset(UnpOldTable20,0,sizeof(UnpOldTable20)); + addbits(2); + + if (UnpAudioBlock) + { + UnpChannels=((BitField>>12) & 3)+1; + if (UnpCurChannel>=UnpChannels) + UnpCurChannel=0; + addbits(2); + TableSize=MC20*UnpChannels; + } + else + TableSize=NC20+DC20+RC20; + + for (I=0;I> 12); + addbits(4); + } + MakeDecodeTables(BitLength,(struct Decode *)&BD,BC20); + I=0; + while (IReadTop-5) + if (!UnpReadBuf()) + return(false); + int Number=DecodeNumber((struct Decode *)&BD); + if (Number<16) + { + Table[I]=(Number+UnpOldTable20[I]) & 0xf; + I++; + } + else + if (Number==16) + { + N=(getbits() >> 14)+3; + addbits(2); + while (N-- > 0 && I> 13)+3; + addbits(3); + } + else + { + N=(getbits() >> 9)+11; + addbits(7); + } + while (N-- > 0 && IReadTop) + return(true); + if (UnpAudioBlock) + for (I=0;I=InAddr+5) + if (UnpAudioBlock) + { + if (DecodeNumber((struct Decode *)&MD[UnpCurChannel])==256) + ReadTables20(); + } + else + if (DecodeNumber((struct Decode *)&LD)==269) + ReadTables20(); +} + + +void Unpack::UnpInitData20(int Solid) +{ + if (!Solid) + { + UnpAudioBlock=UnpChannelDelta=UnpCurChannel=0; + UnpChannels=1; + + memset(AudV,0,sizeof(AudV)); + memset(UnpOldTable20,0,sizeof(UnpOldTable20)); + memset(MD,0,sizeof(MD)); + } +} + + +byte Unpack::DecodeAudio(int Delta) +{ + struct AudioVariables *V=&AudV[UnpCurChannel]; + V->ByteCount++; + V->D4=V->D3; + V->D3=V->D2; + V->D2=V->LastDelta-V->D1; + V->D1=V->LastDelta; + int PCh=8*V->LastChar+V->K1*V->D1+V->K2*V->D2+V->K3*V->D3+V->K4*V->D4+V->K5*UnpChannelDelta; + PCh=(PCh>>3) & 0xFF; + + unsigned int Ch=PCh-Delta; + + int D=((signed char)Delta)<<3; + + V->Dif[0]+=abs(D); + V->Dif[1]+=abs(D-V->D1); + V->Dif[2]+=abs(D+V->D1); + V->Dif[3]+=abs(D-V->D2); + V->Dif[4]+=abs(D+V->D2); + V->Dif[5]+=abs(D-V->D3); + V->Dif[6]+=abs(D+V->D3); + V->Dif[7]+=abs(D-V->D4); + V->Dif[8]+=abs(D+V->D4); + V->Dif[9]+=abs(D-UnpChannelDelta); + V->Dif[10]+=abs(D+UnpChannelDelta); + + UnpChannelDelta=V->LastDelta=(signed char)(Ch-V->LastChar); + V->LastChar=Ch; + + if ((V->ByteCount & 0x1F)==0) + { + unsigned int MinDif=V->Dif[0],NumMinDif=0; + V->Dif[0]=0; + for (int I=1;IDif)/sizeof(V->Dif[0]);I++) + { + if (V->Dif[I]Dif[I]; + NumMinDif=I; + } + V->Dif[I]=0; + } + switch(NumMinDif) + { + case 1: + if (V->K1>=-16) + V->K1--; + break; + case 2: + if (V->K1<16) + V->K1++; + break; + case 3: + if (V->K2>=-16) + V->K2--; + break; + case 4: + if (V->K2<16) + V->K2++; + break; + case 5: + if (V->K3>=-16) + V->K3--; + break; + case 6: + if (V->K3<16) + V->K3++; + break; + case 7: + if (V->K4>=-16) + V->K4--; + break; + case 8: + if (V->K4<16) + V->K4++; + break; + case 9: + if (V->K5>=-16) + V->K5--; + break; + case 10: + if (V->K5<16) + V->K5++; + break; + } + } + return((byte)Ch); +} +#endif diff --git a/snesreader/unrar/unrar.cpp b/snesreader/unrar/unrar.cpp new file mode 100644 index 00000000..2c3baa7b --- /dev/null +++ b/snesreader/unrar/unrar.cpp @@ -0,0 +1,350 @@ +// unrar_core 3.8.5. http://www.slack.net/~ant/ + +#include "unrar.h" + +#include "rar.hpp" +#include + +// This source code is a heavily modified version based on the unrar package. +// It may not be used to develop a RAR (WinRAR) compatible archiver. +// See unrar/license.txt for copyright and licensing. + +// Same as printf when debugging, otherwise 0 +#ifndef debug_printf + #define debug_printf 1 ? (void)0 : (void) +#endif + +// If expr != unrar_ok, returns its value +#define RETURN_ERR( expr ) \ + do {\ + unrar_err_t err_;\ + if ( (err_ = (expr)) != unrar_ok )\ + return err_;\ + } while ( 0 ) + + +// Receives errors reported from deep within library. +// MUST be macro. +#define NONLOCAL_ERROR( p ) \ + setjmp( p->Arc.jmp_env ) + +void Rar_Error_Handler::ReportError( unrar_err_t err ) +{ + if ( err ) + longjmp( jmp_env, err ); +} + +void Rar_Error_Handler::MemoryError() +{ + ReportError( unrar_err_memory ); +} + + +//// Internal + +unrar_t::unrar_t() : + Buffer( &Arc ) +{ + Arc.user_read = NULL; + Arc.user_write = NULL; + Arc.Tell_ = 0; + Arc.write_error = unrar_ok; + data_ = NULL; + own_data_ = NULL; + close_file = NULL; + FileCount = 0; + Unp = NULL; + + unrar_init(); +} + +unrar_t::~unrar_t() +{ + if ( Arc.write_error ) { } + + if ( close_file ) + close_file( Arc.user_read_data ); + + delete Unp; + + free( own_data_ ); +} + +// True if current file is compressed in way that affects solid extraction state +static inline bool solid_file( const unrar_t* p ) +{ + return p->Arc.Solid && + p->Arc.NewLhd.Method != 0x30 && + p->Arc.NewLhd.FullPackSize != 0; +} + +static void update_solid_pos( unrar_t* p ) +{ + if ( p->solid_pos == p->Arc.CurBlockPos ) + p->solid_pos = p->Arc.NextBlockPos; +} + +static unrar_err_t extract_( unrar_t* p, unrar_write_func user_write, void* user_data ) +{ + assert( !p->done ); + assert( !solid_file( p ) || p->solid_pos == p->Arc.CurBlockPos ); + + if ( p->Arc.write_error ) { } + p->Arc.write_error = unrar_ok; + p->Arc.user_write = user_write; + p->Arc.user_write_data = user_data; + RETURN_ERR( p->ExtractCurrentFile( user_write == NULL ) ); + p->Arc.user_write = NULL; + RETURN_ERR( p->Arc.write_error ); + + update_solid_pos( p ); + + return unrar_ok; +} + +static unrar_err_t skip_solid( unrar_t* p ) +{ + if ( !solid_file( p ) ) + { + update_solid_pos( p ); + return unrar_ok; + } + + return extract_( p, NULL, NULL ); +} + +static inline bool IsLink(uint Attr) +{ + return((Attr & 0xF000)==0xA000); +} + +static unrar_err_t next_( unrar_t* p, bool skipping_solid ) +{ + if ( p->done ) + return unrar_err_arc_eof; + + free( p->own_data_ ); + p->own_data_ = NULL; + p->data_ = NULL; + + for (;;) + { + p->Arc.SeekToNext(); + unrar_err_t const err = p->Arc.ReadHeader(); + if ( err != unrar_err_arc_eof ) + RETURN_ERR( err ); + //else + // debug_printf( "unrar: Didn't end with ENDARC_HEAD\n" ); // rar -en causes this + + HEADER_TYPE const type = (HEADER_TYPE) p->Arc.GetHeaderType(); + + if ( err != unrar_ok || type == ENDARC_HEAD ) + { + p->done = true; + break; + } + + if ( type != FILE_HEAD ) + { + // Skip non-files + if ( type != NEWSUB_HEAD && type != PROTECT_HEAD && type != SIGN_HEAD && type != SUB_HEAD ) + debug_printf( "unrar: Skipping unknown block type: %X\n", (unsigned) type ); + + update_solid_pos( p ); + } + else + { + // Update even for non-solid files, in case it's not extracted + if ( !solid_file( p ) ) + update_solid_pos( p ); + + if ( p->Arc.IsArcLabel() ) + { + // Ignore labels + } + else if ( IsLink( p->Arc.NewLhd.FileAttr ) ) + { + // Ignore links + + p->update_first_file_pos(); + p->FileCount++; // Links are treated as files + } + else if ( p->Arc.IsArcDir() ) + { + // Ignore directories + } + else + { + p->info.size = p->Arc.NewLhd.UnpSize; + p->info.name = p->Arc.NewLhd.FileName; + p->info.name_w = p->Arc.NewLhd.FileNameW; + p->info.is_unicode = (p->Arc.NewLhd.Flags & LHD_UNICODE) != 0; + p->info.dos_date = p->Arc.NewLhd.mtime.time; + p->info.crc = p->Arc.NewLhd.FileCRC; + p->info.is_crc32 = !p->Arc.OldFormat; + + // Stop for files + break; + } + + // Original code assumed that non-file items were never solid compressed + check( !solid_file( p ) ); + + // Skip non-file solid-compressed items (original code assumed there were none) + if ( skipping_solid ) + RETURN_ERR( skip_solid( p ) ); + } + } + + return unrar_ok; +} + +static unrar_err_t open_( unrar_t* p, unrar_read_func read, void* user_data ) +{ + p->Arc.user_read = read; + p->Arc.user_read_data = user_data; + + RETURN_ERR( p->Arc.IsArchive() ); + + p->begin_pos = p->Arc.NextBlockPos; + p->solid_pos = p->Arc.NextBlockPos; + p->first_file_pos = INT_MAX; + p->done = false; + + return unrar_ok; +} + + +//// Interface + + // Needed when user read throws exception + struct unrar_ptr { + unrar_t* p; + unrar_ptr() { p = NULL; } + ~unrar_ptr() { delete p; } + }; + +unrar_err_t unrar_open_custom( unrar_t** impl_out, unrar_read_func read, void* user_data ) +{ + *impl_out = NULL; + + unrar_ptr ptr; + ptr.p = new unrar_t; + if ( !ptr.p ) + return unrar_err_memory; + + RETURN_ERR( NONLOCAL_ERROR( ptr.p ) ); + RETURN_ERR( open_( ptr.p, read, user_data ) ); + RETURN_ERR( next_( ptr.p, false ) ); + + *impl_out = ptr.p; + ptr.p = NULL; + + //delete ptr.p; // done automatically at end of function + + return unrar_ok; +} + +void unrar_close( unrar_t* ar ) +{ + delete ar; +} + +unrar_bool unrar_done( const unrar_t* p ) +{ + return p->done; +} + +unrar_err_t unrar_next( unrar_t* p ) +{ + assert( !unrar_done( p ) ); + + RETURN_ERR( NONLOCAL_ERROR( p ) ); + return next_( p, false ); +} + +const unrar_info_t* unrar_info( unrar_t const* p ) +{ + assert( !unrar_done( p ) ); + + return &p->info; +} + +unrar_pos_t unrar_tell( const unrar_t* p ) +{ + return p->Arc.CurBlockPos; +} + +unrar_err_t unrar_seek( unrar_t* p, unrar_pos_t n ) +{ + p->Arc.NextBlockPos = n; + p->done = false; + p->FileCount = (n <= p->first_file_pos ? 0 : 1); + + return unrar_next( p ); +} + +unrar_err_t unrar_rewind( unrar_t* p ) +{ + return unrar_seek( p, p->begin_pos ); +} + +unrar_err_t unrar_try_extract( const unrar_t* p ) +{ + assert( !unrar_done( p ) ); + + return ((unrar_t*) p)->ExtractCurrentFile( true, true ); +} + + static unrar_err_t reopen( unrar_t* p ) + { + // Save and restore archive reader + unrar_read_func read = p->Arc.user_read; + void* user_data = p->Arc.user_read_data; + + void (*close_file)( void* ) = p->close_file; + p->close_file = NULL; + + p->~unrar_t(); + new (p) unrar_t; + + p->close_file = close_file; + + return open_( p, read, user_data ); + } + +unrar_err_t unrar_extract_custom( unrar_t* p, unrar_write_func user_write, void* user_data ) +{ + assert( !unrar_done( p ) ); + + RETURN_ERR( NONLOCAL_ERROR( p ) ); + + if ( solid_file( p ) ) + { + unrar_pos_t pos = p->Arc.CurBlockPos; + if ( p->solid_pos != pos ) + { + // Next file to solid extract isn't current one + + if ( p->solid_pos > pos ) + RETURN_ERR( reopen( p ) ); + else + p->Arc.NextBlockPos = p->solid_pos; + + RETURN_ERR( next_( p, true ) ); + + // Keep extracting until solid position is at desired file + while ( !p->done && p->solid_pos < pos ) + { + RETURN_ERR( skip_solid( p ) ); + RETURN_ERR( next_( p, true ) ); + } + + // Be sure we're at right file + if ( p->solid_pos != pos || p->Arc.CurBlockPos != pos ) + return unrar_err_corrupt; + } + } + + return extract_( p, user_write, user_data ); +} diff --git a/snesreader/unrar/unrar.h b/snesreader/unrar/unrar.h new file mode 100644 index 00000000..470bc146 --- /dev/null +++ b/snesreader/unrar/unrar.h @@ -0,0 +1,164 @@ +/** RAR archive scanning and extraction \file */ + +/* unrar_core 3.8.5 */ +#ifndef UNRAR_H +#define UNRAR_H + +#include +#include + +#if !defined (UNRAR_NO_LONG_LONG) && defined (LLONG_MAX) + typedef long long unrar_long_long; +#else + typedef long unrar_long_long; +#endif + +#ifdef __cplusplus + extern "C" { +#endif + + +/** Error code, or 0 if function was successful. See Errors for more. Except +where noted, once an operation returns an error, that archive should not be +used any further, other than with unrar_close(). */ +#ifndef unrar_err_t /* (#ifndef allows better testing of library) */ + typedef int unrar_err_t; +#endif + +/** First parameter of most functions is unrar_t*, or const unrar_t* if nothing +is changed. */ +typedef struct unrar_t unrar_t; + +/** File position */ +typedef unrar_long_long unrar_pos_t; + +/** Boolean, where 0 is false and 1 is true */ +typedef int unrar_bool; + + +/******** Open/close ********/ + +/** Initializes static tables used by library. Automatically called by +unrar_open(). OK to call more than once. */ +void unrar_init( void ); + +/** Opens archive and points *out at it. If error, sets *out to NULL. */ +unrar_err_t unrar_open( unrar_t** out, const char path [] ); + +/** User archive read callback. When called, user_data is a copy of that passed +to unrar_open_custom(). Callback must do the following: Read avail bytes from +file at offset pos and set *count to avail, where avail is the lesser of *count +and file_size-pos. Put read bytes into *out and return unrar_ok. If fewer than +avail bytes could be read successfully, return a non-zero error code. */ +typedef unrar_err_t (*unrar_read_func)( void* user_data, + void* out, int* count, unrar_pos_t pos ); + +/** Same as unrar_open(), except data is read using supplied function rather +than from file. */ +unrar_err_t unrar_open_custom( unrar_t** unrar_out, + unrar_read_func, void* user_data ); + +/** Closes archive and frees memory. OK to pass NULL. */ +void unrar_close( unrar_t* ); + + +/******** Scanning ********/ + +/** True if at end of archive. Must be called after unrar_open() or +unrar_rewind(), as an archive might contain no files. */ +unrar_bool unrar_done( const unrar_t* ); + +/** Goes to next file in archive. If there are no more files, unrar_done() will +now return true. */ +unrar_err_t unrar_next( unrar_t* ); + +/** Goes back to first file in archive, as if it were just opened with +unrar_open(). */ +unrar_err_t unrar_rewind( unrar_t* ); + +/** Position of current file in archive. Will never return zero. */ +unrar_pos_t unrar_tell( const unrar_t* ); + +/** Returns to file at previously-saved position. */ +unrar_err_t unrar_seek( unrar_t*, unrar_pos_t ); + + +/**** Info ****/ + +/** Information about current file */ +typedef struct unrar_info_t +{ + unrar_pos_t size; /**< Uncompressed size */ + const char* name; /**< Name, in Unicode if is_unicode is true */ + const wchar_t* name_w; /**< Name in Unicode, "" if unavailable */ + unrar_bool is_unicode; /**< True if name is Unicode (UTF-8) */ + unsigned int dos_date; /**< Date in DOS-style format, 0 if unavailable */ + unsigned int crc; /**< Checksum; algorithm depends on archive */ + unrar_bool is_crc32; /**< True if crc is CRC-32 */ +} unrar_info_t; + +/** Information about current file. Pointer is valid until unrar_next(), +unrar_rewind(), unrar_seek(), or unrar_close(). */ +const unrar_info_t* unrar_info( const unrar_t* ); + + +/**** Extraction ****/ + +/** Returns unrar_ok if current file can be extracted, otherwise error +indicating why it can't be extracted (too new/old compression algorithm, +encrypted, segmented). Archive is still usable if this returns error, +just the current file can't be extracted. */ +unrar_err_t unrar_try_extract( const unrar_t* ); + +/** Extracts at most size bytes from current file into out. If file is larger, +discards excess bytes. If file is smaller, only writes unrar_size() bytes. */ +unrar_err_t unrar_extract( unrar_t*, void* out, unrar_pos_t size ); + +/** Extracts data to memory and returns pointer to it in *out. Pointer is +valid until unrar_next(), unrar_rewind(), unrar_seek(), or unrar_close(). OK to +call more than once for same file. Optimized to avoid allocating memory when +entire file will already be kept in internal window. */ +unrar_err_t unrar_extract_mem( unrar_t* p, void const** out ); + +/** User extracted data write callback. When called, user_data is a copy of +that passed to unrar_extract_custom(). Callback must do the following: Write +count bytes from *in to wherever extracted data goes and return unrar_ok. If +data cannot be written successfully, return a non-zero error code. */ +typedef unrar_err_t (*unrar_write_func)( void* user_data, + const void* in, int count ); + +/** Extracts current file and writes data using supplied function. Any error +it returns will be returned by this function, and archive will still be +usable. */ +unrar_err_t unrar_extract_custom( unrar_t*, + unrar_write_func, void* user_data ); + + +/******** Errors ********/ + +/** Error string associated with unrar error code. Always returns valid +pointer to a C string; never returns NULL. Returns "" for unrar_ok. */ +const char* unrar_err_str( unrar_err_t ); + +enum { + unrar_ok = 0,/**< No error; success. Guaranteed to be zero. */ + unrar_err_memory = 1,/**< Out of memory */ + unrar_err_open = 2,/**< Couldn't open file (not found/permissions) */ + unrar_err_not_arc = 3,/**< Not a RAR archive */ + unrar_err_corrupt = 4,/**< Archive is corrupt */ + unrar_err_io = 5,/**< Read failed */ + unrar_err_arc_eof = 6,/**< At end of archive; no more files */ + unrar_err_encrypted = 7,/**< Encryption not supported */ + unrar_err_segmented = 8,/**< Segmentation not supported */ + unrar_err_huge = 9,/**< Huge (2GB+) archives not supported */ + unrar_err_old_algo = 10,/**< Compressed with unsupported old algorithm */ + unrar_err_new_algo = 11,/**< Compressed with unsupported new algorithm */ + unrar_next_err = 100/**< Errors range from 0 to unrar_next_err-1 */ +}; + + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/snesreader/unrar/unrar_misc.cpp b/snesreader/unrar/unrar_misc.cpp new file mode 100644 index 00000000..a0a6551a --- /dev/null +++ b/snesreader/unrar/unrar_misc.cpp @@ -0,0 +1,170 @@ +// Misc functions outside the core interface + +#include "unrar.h" + +#include "rar.hpp" +#include + +// This source code is a heavily modified version based on the unrar package. +// It may not be used to develop a RAR (WinRAR) compatible archiver. +// See unrar/license.txt for copyright and licensing. + +void unrar_init() +{ + if (CRCTab[1]==0) + InitCRC(); + + Unpack::init_tables(); +} + +struct unrar_extract_mem_t +{ + char* out; + char* end; +}; + +extern "C" { + static unrar_err_t extract_write( void* user_data, const void* in, int count ) + { + unrar_extract_mem_t* p = (unrar_extract_mem_t*) user_data; + + unrar_pos_t remain = p->end - p->out; + if ( remain > 0 ) + { + if ( count > remain ) + count = remain; + + memcpy( p->out, in, count ); + p->out += count; + } + + return unrar_ok; + } +} + +unrar_err_t unrar_extract( unrar_t* p, void* out, unrar_pos_t size ) +{ + assert( !unrar_done( p ) ); + + unrar_extract_mem_t m; + m.out = (char*) out; + m.end = m.out + size; + return unrar_extract_custom( p, &extract_write, &m ); +} + +inline +static bool is_entire_file( const unrar_t* p, const void* in, int count ) +{ + return (count == p->Arc.NewLhd.UnpSize && p->Unp && in == p->Unp->window_wrptr()); +} + +extern "C" { + static unrar_err_t extract_mem( void* data, void const* in, int count ) + { + unrar_t* p = (unrar_t*) data; + + // We might have pointer to entire file + if ( !p->data_ && is_entire_file( p, in, count ) ) + { + p->data_ = in; + return unrar_ok; + } + + // We don't have it, so allocate memory to read entire file into + if ( !p->own_data_ ) + { + assert( !p->data_ ); + + unrar_pos_t size = unrar_info( p )->size; + p->own_data_ = malloc( size ? size : 1 ); + if ( !p->own_data_ ) + return unrar_err_memory; + + p->data_ = p->own_data_; + } + + memcpy( (void*) p->data_, in, count ); + p->data_ = (char*) p->data_ + count; + + return unrar_ok; + } +} + +unrar_err_t unrar_extract_mem( unrar_t* p, void const** out ) +{ + assert( !unrar_done( p ) ); + + *out = NULL; + + if ( !p->data_ ) + { + unrar_err_t err = unrar_extract_custom( p, &extract_mem, p ); + if ( err ) + return err; + } + + *out = (p->own_data_ ? p->own_data_ : p->data_); + return unrar_ok; +} + +const char* unrar_err_str( unrar_err_t err ) +{ + switch ( err ) + { + case unrar_ok: return ""; + case unrar_err_memory: return "out of memory"; + case unrar_err_open: return "couldn't open RAR archive"; + case unrar_err_not_arc: return "not a RAR archive"; + case unrar_err_corrupt: return "RAR archive is corrupt"; + case unrar_err_io: return "couldn't read/write"; + case unrar_err_arc_eof: return "unexpected end of archive"; + case unrar_err_encrypted: return "encryption not supported"; + case unrar_err_segmented: return "segmentation not supported"; + case unrar_err_huge: return "huge (2GB+) archives are not supported"; + case unrar_err_old_algo: return "compressed using older algorithm than supported"; + case unrar_err_new_algo: return "compressed using newer algorithm than supported"; + } + + assert( false ); + return "problem with RAR"; +} + +int ComprDataIO::Read( void* p, int n ) +{ + unrar_err_t err = user_read( user_read_data, p, &n, Tell_ ); + if ( err ) + ReportError( err ); + + Tell_ += n; + if ( Tell_ < 0 ) + ReportError( unrar_err_huge ); + + return n; +} + +void ComprDataIO::UnpWrite( byte* out, uint count ) +{ + if ( !SkipUnpCRC ) + { + if ( write_error == unrar_ok ) + write_error = user_write( user_write_data, out, count ); + + if ( OldFormat ) + UnpFileCRC = OldCRC( (ushort) UnpFileCRC, out, count ); + else + UnpFileCRC = CRC( UnpFileCRC, out, count ); + } +} + +int ComprDataIO::UnpRead( byte* out, uint count ) +{ + if ( count <= 0 ) + return 0; + + if ( count > (uint) UnpPackedSize ) + count = UnpPackedSize; + + int result = Read( out, count ); + UnpPackedSize -= result; + return result; +} diff --git a/snesreader/unrar/unrar_open.cpp b/snesreader/unrar/unrar_open.cpp new file mode 100644 index 00000000..f9b0c40d --- /dev/null +++ b/snesreader/unrar/unrar_open.cpp @@ -0,0 +1,45 @@ +// Separate file to avoid linking to f* functions unless user calls unrar_open_file() + +#include "unrar.h" +#include "rar.hpp" +#include + +extern "C" { + static unrar_err_t unrar_read_file( void* user_data, void* out, int* count, unrar_pos_t pos ) + { + FILE* file = (FILE*) user_data; + + // most of the time, seeking won't be necessary + if ( pos != ftell( file ) && fseek( file, pos, SEEK_SET ) != 0 ) + return unrar_err_corrupt; + + *count = (int) fread( out, 1, *count, file ); + + if ( ferror( file ) != 0 ) + return unrar_err_io; + + return unrar_ok; + } +} + +static void unrar_close_file( void* user_data ) +{ + fclose( (FILE*) user_data ); +} + +unrar_err_t unrar_open( unrar_t** arc_out, const char path [] ) +{ + *arc_out = NULL; + + FILE* file = fopen( path, "rb" ); + if ( file == NULL ) + return unrar_err_open; + + unrar_err_t err = unrar_open_custom( arc_out, &unrar_read_file, file ); + if ( err != unrar_ok ) + fclose( file ); + else + (*arc_out)->close_file = &unrar_close_file; + + return err; +} diff --git a/snesreader/unrar/whatsnew.txt b/snesreader/unrar/whatsnew.txt new file mode 100644 index 00000000..38012e9a --- /dev/null +++ b/snesreader/unrar/whatsnew.txt @@ -0,0 +1,267 @@ + + + WinRAR - What's new in the latest version + + + Version 3.80 + + 1. Added support for ZIP archives containing Unicode file names + in UTF-8 format. When creating ZIP archive, WinRAR stores + names in Unicode only if they cannot be stored correctly using + the current single byte character set. + + 2. Added decompression support for WinZip AES encrypted ZIP archives. + + 3. Improved Unicode support for RAR and ZIP archive names. + + 4. "Ask before overwrite" and "Skip existing files" update modes + are now available in archiving dialog. They allow to specify + WinRAR behavior when updating already existing files in archive. + Unlike already available "Fresh existing files only" and + "Add and update files", these new modes ignore file date + and compare only file names. + + Command line equivalents of these modes are: + + a) switch -o enables "Ask before overwrite" archiving mode; + + b) switch -o- enables "Skip existing files" archiving mode; + + c) switch -o+ enables "Overwrite all" mode (default for archiving). + + 5. New "Add to context menu" option in "Profile parameters" dialog. + If this option is on, the profile name will be displayed in Explorer + context menus allowing to activate a profile from context menu. + + 6. New -cp switch allows to select a compression profile + in command line mode. It is supported only by GUI WinRAR.exe, + not by rar.exe. + + 7. New "Options" page of archiving dialog contains the group of + settings modifying the behavior of "Delete files after archiving" + option from "General" page: + + a) Delete files. Delete files normally like in previous WinRAR + versions. + + b) Move files to Recycle Bin. Deleted files are placed to + Recycle Bin. + + Command line equivalent of this option is -dr switch. + + c) Wipe files. Before deleting file data are overwritten by + zero bytes to prevent recovery of deleted files. + + Command line equivalent of this option is -dw switch. + + All these options have an effect only if "Delete files + after archiving" is on. You can enable any of these options + in the default compression profile to change the default + behavior of "Delete files after archiving". + + 8. WinRAR "Extraction path and options" dialog is now resizable. + You can use the mouse to drag its border to the desired size + and provide more space for folder tree pane. WinRAR will store + new dimensions of this dialog. + + 9. New "Update" SFX script command and "Update mode" group + of options in "Update" page of "Advanced SFX options" dialog. + These command and options allow to check time and implement + file time based updating; + + 10. SFX script "Shortcut" command and "Add shortcut..." command + in "Advanced SFX options" dialog now allow to specify + an icon file containing an icon associated with shortcut. + + 11. New "Wipe temporary files" option in "Settings/Security" dialog + provides more secure, though slower, way to delete temporary + WinRAR files. + + 12. WinRAR and RAR display the total progress bar when unpacking + a multivolume RAR archive if all volumes are present + in the same folder. + + 13. WinRAR and RAR automatically expand names of environment + variables in list files. For example, a list file can contain + lines like: + + %windir%\*.exe + %USERPROFILE%\Desktop + + This feature is available only in Windows RAR version. + + 14. Added support of TAR archives with non-zero "extra field" data. + + 15. Added support of TAR archives, which does not contain + the end of archive entry consisting of 512 zero bytes. + + 16. Improved Unicode support when dragging files from WinRAR window. + + 17. Shift+Tab key combination can be used in main WinRAR window to + switch the input focus between interface elements (files, comment, + tree, address) in reverse order. In previous versions Shift+Tab + used the same order as Tab. + + 18. Corrected a possible WinRAR crash when opening truncated + UDF ISO files. + + + Version 3.71 + + 1. Archive names in rar.log error log file always include + the full path. + + 2. WinRAR tray icon is compatible with high DPI display modes. + + 3. If you modified a file in archive with encrypted names using + an external editor, WinRAR will not ask for archive password again + when prompting to update a file. It will use a password which + you entered when opening an archive, + + 4. Bugs fixed: + + a) switch -tl and "Set archive time to latest file time" option + could fail in previous version. Sometimes they set archive time + to current system time instead of latest file time; + + b) if -ag switch mask contained archive number, month and minute + characters, WinRAR placed 'I' character instead of minute value + into generated archive name for archive numbers exceeding 1; + + c) high ASCII names in ISO files using ISO 9660 format without + Joliet format extension were displayed incorrectly; + + d) WinRAR could crash when decompressing some of corrupt RAR archives; + + e) if "Turn PC off when done" option was set in "Convert archives" + command, WinRAR turned PC off after converting the first archive + in selected group instead of after converting the entire group; + + f) if user specified a non-existent destination path in SFX archive + in Vista, SFX could enter into infinite "create new SFX window" + loop; + + g) WinRAR could fail to unpack an individual file from subfolder + of ACE archive using the drag and drop. + + + Version 3.70 + + 1. Numerous Windows Vista compatibility changes: + + a) help format changed from old HLP to newer HTML based CHM; + + b) GUI self-extracting modules attempt to request for + administrator permissions if they cannot create destination + folder under current user account; + + c) Log file rar.log and WinRAR theme files are stored + in %APPDATA%\WinRAR folder instead of WinRAR program files folder. + + Exported settings file settings.reg is also stored + in %APPDATA%\WinRAR folder by default, but it is possible to + select another folder in "Save WinRAR settings" and "Load WinRAR + settings" dialogs. + + WinRAR searches for registration key and settings.reg + both in its program files folder and in %APPDATA%\WinRAR; + + It is possible to set the string value "AppData" in Registry key + HKEY_CURRENT_USER\Software\WinRAR\Paths to override the default + %appdata%\WinRAR path for WinRAR settings. + + For example, if you wish to store theme files in WinRAR folder, + set this value to "c:\Program Files\WinRAR". + + d) Vista compatibility changes in WinRAR shell integration; + + e) New "Request administrative access" option in "Advanced" page + of "Advanced SFX options" allows to create SFX archive, + which will request the administrative access when started + in Windows Vista. + + Command line equivalent of this option is -iadm switch. + + 2. Added support for ISO 13346 (UDF) file format. This format + is frequently used in ISO images of DVD disks. + + 3. Added Unicode support for ISO 9660 files, so WinRAR should + handle non-English file names in .iso files better. + + 4. Design changes in window displaying archiving and extraction + progress: + + a) it provides more space for file names, allowing lengthy names; + + b) it displays the current archive name in separate line, + allowing much longer archive names than before; + + c) when archiving, it displays the current compression ratio + in separate line; + + d) it can use both standard Windows and classic WinRAR progress bars. + Turn on "Windows progress bars" option in WinRAR "Settings/General" + dialog to use standard progress bars. By default this option is + on if some Windows visual style is active and off if Windows Classic + theme is selected. + + Windows progress bars are two color only, so they do not indicate + the current compression ratio. But now the ratio is displayed + in separate line; + + e) "Mode..." button moved to bottom of window. + + 5. GUI self-extracting modules support following command line + switches: + + -d set the destination path + -p specify a password + -s silent mode, hide all + -s1 same as -s + -s2 silent mode, hide start dialog + -sp specify parameters for setup program + + 6. GUI self-extracting modules do not pass the entire command line + to setup program like they did in previous versions. + If you need to get access to entire command line of SFX archive, + parse sfxcmd environment variable which contains this command line. + + 7. New switch -sc[objects] allowing to select character + sets for archive comments and list files. It replaces -fcu switch + introduced in RAR 3.60, which was removed from list of supported + switches. Now you need to specify -scuc instead of -fcu to use + Unicode comments. Unlike -fcu, -sc also supports OEM and ANSI charset. + + 8. New "Save archive copy as..." command in "File" menu. + This command may be useful if you opened an archive from Internet + directly in WinRAR and then decided to save it on local disk. + + 9. "Word wrap" command added to "View" menu of WinRAR internal viewer, + so you can change the wrapping mode of already opened viewer window. + + State of this option is not stored between viewing sessions. + If you need to change the default word wrap mode, use WinRAR + "Settings/Viewer" dialog. + + 10. Buttons "Up" and "Down" added to "Organize profiles" dialog. + Using these buttons you can change position of selected profile + in the list. + + 11. Operation progress is displayed when adding the recovery record. + + 12. If WinRAR is minimized to tray and mouse is over its icon, + WinRAR diplays a message about the current operation progress. + In previous versions it included only percent done, now it also + contains the time left information. + + 13. Console RAR displays "Calculating the control sum" message + when calculating CRC32 control sum for newly created RAR volume. + Previous versions also calculated the volume control sum, + but did it silently. + + 14. Archives history list in "File" menu allows Unicode names, + providing more reliable support for non-English archive names. + + 15. Stack overflow vulnerability has been corrected in password + processing module of console RAR and UnRAR. GUI WinRAR is not + affected. We are thankful to the iDEFENSE LABS for reporting this bug. diff --git a/snesreader/zlib/adler32.c b/snesreader/zlib/adler32.c new file mode 100644 index 00000000..007ba262 --- /dev/null +++ b/snesreader/zlib/adler32.c @@ -0,0 +1,149 @@ +/* adler32.c -- compute the Adler-32 checksum of a data stream + * Copyright (C) 1995-2004 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#define ZLIB_INTERNAL +#include "zlib.h" + +#define BASE 65521UL /* largest prime smaller than 65536 */ +#define NMAX 5552 +/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ + +#define DO1(buf,i) {adler += (buf)[i]; sum2 += adler;} +#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1); +#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2); +#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4); +#define DO16(buf) DO8(buf,0); DO8(buf,8); + +/* use NO_DIVIDE if your processor does not do division in hardware */ +#ifdef NO_DIVIDE +# define MOD(a) \ + do { \ + if (a >= (BASE << 16)) a -= (BASE << 16); \ + if (a >= (BASE << 15)) a -= (BASE << 15); \ + if (a >= (BASE << 14)) a -= (BASE << 14); \ + if (a >= (BASE << 13)) a -= (BASE << 13); \ + if (a >= (BASE << 12)) a -= (BASE << 12); \ + if (a >= (BASE << 11)) a -= (BASE << 11); \ + if (a >= (BASE << 10)) a -= (BASE << 10); \ + if (a >= (BASE << 9)) a -= (BASE << 9); \ + if (a >= (BASE << 8)) a -= (BASE << 8); \ + if (a >= (BASE << 7)) a -= (BASE << 7); \ + if (a >= (BASE << 6)) a -= (BASE << 6); \ + if (a >= (BASE << 5)) a -= (BASE << 5); \ + if (a >= (BASE << 4)) a -= (BASE << 4); \ + if (a >= (BASE << 3)) a -= (BASE << 3); \ + if (a >= (BASE << 2)) a -= (BASE << 2); \ + if (a >= (BASE << 1)) a -= (BASE << 1); \ + if (a >= BASE) a -= BASE; \ + } while (0) +# define MOD4(a) \ + do { \ + if (a >= (BASE << 4)) a -= (BASE << 4); \ + if (a >= (BASE << 3)) a -= (BASE << 3); \ + if (a >= (BASE << 2)) a -= (BASE << 2); \ + if (a >= (BASE << 1)) a -= (BASE << 1); \ + if (a >= BASE) a -= BASE; \ + } while (0) +#else +# define MOD(a) a %= BASE +# define MOD4(a) a %= BASE +#endif + +/* ========================================================================= */ +uLong ZEXPORT adler32(adler, buf, len) + uLong adler; + const Bytef *buf; + uInt len; +{ + unsigned long sum2; + unsigned n; + + /* split Adler-32 into component sums */ + sum2 = (adler >> 16) & 0xffff; + adler &= 0xffff; + + /* in case user likes doing a byte at a time, keep it fast */ + if (len == 1) { + adler += buf[0]; + if (adler >= BASE) + adler -= BASE; + sum2 += adler; + if (sum2 >= BASE) + sum2 -= BASE; + return adler | (sum2 << 16); + } + + /* initial Adler-32 value (deferred check for len == 1 speed) */ + if (buf == Z_NULL) + return 1L; + + /* in case short lengths are provided, keep it somewhat fast */ + if (len < 16) { + while (len--) { + adler += *buf++; + sum2 += adler; + } + if (adler >= BASE) + adler -= BASE; + MOD4(sum2); /* only added so many BASE's */ + return adler | (sum2 << 16); + } + + /* do length NMAX blocks -- requires just one modulo operation */ + while (len >= NMAX) { + len -= NMAX; + n = NMAX / 16; /* NMAX is divisible by 16 */ + do { + DO16(buf); /* 16 sums unrolled */ + buf += 16; + } while (--n); + MOD(adler); + MOD(sum2); + } + + /* do remaining bytes (less than NMAX, still just one modulo) */ + if (len) { /* avoid modulos if none remaining */ + while (len >= 16) { + len -= 16; + DO16(buf); + buf += 16; + } + while (len--) { + adler += *buf++; + sum2 += adler; + } + MOD(adler); + MOD(sum2); + } + + /* return recombined sums */ + return adler | (sum2 << 16); +} + +/* ========================================================================= */ +uLong ZEXPORT adler32_combine(adler1, adler2, len2) + uLong adler1; + uLong adler2; + z_off_t len2; +{ + unsigned long sum1; + unsigned long sum2; + unsigned rem; + + /* the derivation of this formula is left as an exercise for the reader */ + rem = (unsigned)(len2 % BASE); + sum1 = adler1 & 0xffff; + sum2 = rem * sum1; + MOD(sum2); + sum1 += (adler2 & 0xffff) + BASE - 1; + sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem; + if (sum1 > BASE) sum1 -= BASE; + if (sum1 > BASE) sum1 -= BASE; + if (sum2 > (BASE << 1)) sum2 -= (BASE << 1); + if (sum2 > BASE) sum2 -= BASE; + return sum1 | (sum2 << 16); +} diff --git a/snesreader/zlib/crc32.c b/snesreader/zlib/crc32.c new file mode 100644 index 00000000..f658a9ef --- /dev/null +++ b/snesreader/zlib/crc32.c @@ -0,0 +1,423 @@ +/* crc32.c -- compute the CRC-32 of a data stream + * Copyright (C) 1995-2005 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + * + * Thanks to Rodney Brown for his contribution of faster + * CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing + * tables for updating the shift register in one step with three exclusive-ors + * instead of four steps with four exclusive-ors. This results in about a + * factor of two increase in speed on a Power PC G4 (PPC7455) using gcc -O3. + */ + +/* @(#) $Id$ */ + +/* + Note on the use of DYNAMIC_CRC_TABLE: there is no mutex or semaphore + protection on the static variables used to control the first-use generation + of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should + first call get_crc_table() to initialize the tables before allowing more than + one thread to use crc32(). + */ + +#ifdef MAKECRCH +# include +# ifndef DYNAMIC_CRC_TABLE +# define DYNAMIC_CRC_TABLE +# endif /* !DYNAMIC_CRC_TABLE */ +#endif /* MAKECRCH */ + +#include "zutil.h" /* for STDC and FAR definitions */ + +#define local static + +/* Find a four-byte integer type for crc32_little() and crc32_big(). */ +#ifndef NOBYFOUR +# ifdef STDC /* need ANSI C limits.h to determine sizes */ +# include +# define BYFOUR +# if (UINT_MAX == 0xffffffffUL) + typedef unsigned int u4; +# else +# if (ULONG_MAX == 0xffffffffUL) + typedef unsigned long u4; +# else +# if (USHRT_MAX == 0xffffffffUL) + typedef unsigned short u4; +# else +# undef BYFOUR /* can't find a four-byte integer type! */ +# endif +# endif +# endif +# endif /* STDC */ +#endif /* !NOBYFOUR */ + +/* Definitions for doing the crc four data bytes at a time. */ +#ifdef BYFOUR +# define REV(w) (((w)>>24)+(((w)>>8)&0xff00)+ \ + (((w)&0xff00)<<8)+(((w)&0xff)<<24)) + local unsigned long crc32_little OF((unsigned long, + const unsigned char FAR *, unsigned)); + local unsigned long crc32_big OF((unsigned long, + const unsigned char FAR *, unsigned)); +# define TBLS 8 +#else +# define TBLS 1 +#endif /* BYFOUR */ + +/* Local functions for crc concatenation */ +local unsigned long gf2_matrix_times OF((unsigned long *mat, + unsigned long vec)); +local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat)); + +#ifdef DYNAMIC_CRC_TABLE + +local volatile int crc_table_empty = 1; +local unsigned long FAR crc_table[TBLS][256]; +local void make_crc_table OF((void)); +#ifdef MAKECRCH + local void write_table OF((FILE *, const unsigned long FAR *)); +#endif /* MAKECRCH */ +/* + Generate tables for a byte-wise 32-bit CRC calculation on the polynomial: + x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. + + Polynomials over GF(2) are represented in binary, one bit per coefficient, + with the lowest powers in the most significant bit. Then adding polynomials + is just exclusive-or, and multiplying a polynomial by x is a right shift by + one. If we call the above polynomial p, and represent a byte as the + polynomial q, also with the lowest power in the most significant bit (so the + byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, + where a mod b means the remainder after dividing a by b. + + This calculation is done using the shift-register method of multiplying and + taking the remainder. The register is initialized to zero, and for each + incoming bit, x^32 is added mod p to the register if the bit is a one (where + x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by + x (which is shifting right by one and adding x^32 mod p if the bit shifted + out is a one). We start with the highest power (least significant bit) of + q and repeat for all eight bits of q. + + The first table is simply the CRC of all possible eight bit values. This is + all the information needed to generate CRCs on data a byte at a time for all + combinations of CRC register values and incoming bytes. The remaining tables + allow for word-at-a-time CRC calculation for both big-endian and little- + endian machines, where a word is four bytes. +*/ +local void make_crc_table() +{ + unsigned long c; + int n, k; + unsigned long poly; /* polynomial exclusive-or pattern */ + /* terms of polynomial defining this crc (except x^32): */ + static volatile int first = 1; /* flag to limit concurrent making */ + static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26}; + + /* See if another task is already doing this (not thread-safe, but better + than nothing -- significantly reduces duration of vulnerability in + case the advice about DYNAMIC_CRC_TABLE is ignored) */ + if (first) { + first = 0; + + /* make exclusive-or pattern from polynomial (0xedb88320UL) */ + poly = 0UL; + for (n = 0; n < sizeof(p)/sizeof(unsigned char); n++) + poly |= 1UL << (31 - p[n]); + + /* generate a crc for every 8-bit value */ + for (n = 0; n < 256; n++) { + c = (unsigned long)n; + for (k = 0; k < 8; k++) + c = c & 1 ? poly ^ (c >> 1) : c >> 1; + crc_table[0][n] = c; + } + +#ifdef BYFOUR + /* generate crc for each value followed by one, two, and three zeros, + and then the byte reversal of those as well as the first table */ + for (n = 0; n < 256; n++) { + c = crc_table[0][n]; + crc_table[4][n] = REV(c); + for (k = 1; k < 4; k++) { + c = crc_table[0][c & 0xff] ^ (c >> 8); + crc_table[k][n] = c; + crc_table[k + 4][n] = REV(c); + } + } +#endif /* BYFOUR */ + + crc_table_empty = 0; + } + else { /* not first */ + /* wait for the other guy to finish (not efficient, but rare) */ + while (crc_table_empty) + ; + } + +#ifdef MAKECRCH + /* write out CRC tables to crc32.h */ + { + FILE *out; + + out = fopen("crc32.h", "w"); + if (out == NULL) return; + fprintf(out, "/* crc32.h -- tables for rapid CRC calculation\n"); + fprintf(out, " * Generated automatically by crc32.c\n */\n\n"); + fprintf(out, "local const unsigned long FAR "); + fprintf(out, "crc_table[TBLS][256] =\n{\n {\n"); + write_table(out, crc_table[0]); +# ifdef BYFOUR + fprintf(out, "#ifdef BYFOUR\n"); + for (k = 1; k < 8; k++) { + fprintf(out, " },\n {\n"); + write_table(out, crc_table[k]); + } + fprintf(out, "#endif\n"); +# endif /* BYFOUR */ + fprintf(out, " }\n};\n"); + fclose(out); + } +#endif /* MAKECRCH */ +} + +#ifdef MAKECRCH +local void write_table(out, table) + FILE *out; + const unsigned long FAR *table; +{ + int n; + + for (n = 0; n < 256; n++) + fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : " ", table[n], + n == 255 ? "\n" : (n % 5 == 4 ? ",\n" : ", ")); +} +#endif /* MAKECRCH */ + +#else /* !DYNAMIC_CRC_TABLE */ +/* ======================================================================== + * Tables of CRC-32s of all single-byte values, made by make_crc_table(). + */ +#include "crc32.h" +#endif /* DYNAMIC_CRC_TABLE */ + +/* ========================================================================= + * This function can be used by asm versions of crc32() + */ +const unsigned long FAR * ZEXPORT get_crc_table() +{ +#ifdef DYNAMIC_CRC_TABLE + if (crc_table_empty) + make_crc_table(); +#endif /* DYNAMIC_CRC_TABLE */ + return (const unsigned long FAR *)crc_table; +} + +/* ========================================================================= */ +#define DO1 crc = crc_table[0][((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8) +#define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1 + +/* ========================================================================= */ +unsigned long ZEXPORT crc32(crc, buf, len) + unsigned long crc; + const unsigned char FAR *buf; + unsigned len; +{ + if (buf == Z_NULL) return 0UL; + +#ifdef DYNAMIC_CRC_TABLE + if (crc_table_empty) + make_crc_table(); +#endif /* DYNAMIC_CRC_TABLE */ + +#ifdef BYFOUR + if (sizeof(void *) == sizeof(ptrdiff_t)) { + u4 endian; + + endian = 1; + if (*((unsigned char *)(&endian))) + return crc32_little(crc, buf, len); + else + return crc32_big(crc, buf, len); + } +#endif /* BYFOUR */ + crc = crc ^ 0xffffffffUL; + while (len >= 8) { + DO8; + len -= 8; + } + if (len) do { + DO1; + } while (--len); + return crc ^ 0xffffffffUL; +} + +#ifdef BYFOUR + +/* ========================================================================= */ +#define DOLIT4 c ^= *buf4++; \ + c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \ + crc_table[1][(c >> 16) & 0xff] ^ crc_table[0][c >> 24] +#define DOLIT32 DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4 + +/* ========================================================================= */ +local unsigned long crc32_little(crc, buf, len) + unsigned long crc; + const unsigned char FAR *buf; + unsigned len; +{ + register u4 c; + register const u4 FAR *buf4; + + c = (u4)crc; + c = ~c; + while (len && ((ptrdiff_t)buf & 3)) { + c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8); + len--; + } + + buf4 = (const u4 FAR *)(const void FAR *)buf; + while (len >= 32) { + DOLIT32; + len -= 32; + } + while (len >= 4) { + DOLIT4; + len -= 4; + } + buf = (const unsigned char FAR *)buf4; + + if (len) do { + c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8); + } while (--len); + c = ~c; + return (unsigned long)c; +} + +/* ========================================================================= */ +#define DOBIG4 c ^= *++buf4; \ + c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \ + crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24] +#define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4 + +/* ========================================================================= */ +local unsigned long crc32_big(crc, buf, len) + unsigned long crc; + const unsigned char FAR *buf; + unsigned len; +{ + register u4 c; + register const u4 FAR *buf4; + + c = REV((u4)crc); + c = ~c; + while (len && ((ptrdiff_t)buf & 3)) { + c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8); + len--; + } + + buf4 = (const u4 FAR *)(const void FAR *)buf; + buf4--; + while (len >= 32) { + DOBIG32; + len -= 32; + } + while (len >= 4) { + DOBIG4; + len -= 4; + } + buf4++; + buf = (const unsigned char FAR *)buf4; + + if (len) do { + c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8); + } while (--len); + c = ~c; + return (unsigned long)(REV(c)); +} + +#endif /* BYFOUR */ + +#define GF2_DIM 32 /* dimension of GF(2) vectors (length of CRC) */ + +/* ========================================================================= */ +local unsigned long gf2_matrix_times(mat, vec) + unsigned long *mat; + unsigned long vec; +{ + unsigned long sum; + + sum = 0; + while (vec) { + if (vec & 1) + sum ^= *mat; + vec >>= 1; + mat++; + } + return sum; +} + +/* ========================================================================= */ +local void gf2_matrix_square(square, mat) + unsigned long *square; + unsigned long *mat; +{ + int n; + + for (n = 0; n < GF2_DIM; n++) + square[n] = gf2_matrix_times(mat, mat[n]); +} + +/* ========================================================================= */ +uLong ZEXPORT crc32_combine(crc1, crc2, len2) + uLong crc1; + uLong crc2; + z_off_t len2; +{ + int n; + unsigned long row; + unsigned long even[GF2_DIM]; /* even-power-of-two zeros operator */ + unsigned long odd[GF2_DIM]; /* odd-power-of-two zeros operator */ + + /* degenerate case */ + if (len2 == 0) + return crc1; + + /* put operator for one zero bit in odd */ + odd[0] = 0xedb88320L; /* CRC-32 polynomial */ + row = 1; + for (n = 1; n < GF2_DIM; n++) { + odd[n] = row; + row <<= 1; + } + + /* put operator for two zero bits in even */ + gf2_matrix_square(even, odd); + + /* put operator for four zero bits in odd */ + gf2_matrix_square(odd, even); + + /* apply len2 zeros to crc1 (first square will put the operator for one + zero byte, eight zero bits, in even) */ + do { + /* apply zeros operator for this bit of len2 */ + gf2_matrix_square(even, odd); + if (len2 & 1) + crc1 = gf2_matrix_times(even, crc1); + len2 >>= 1; + + /* if no more bits set, then done */ + if (len2 == 0) + break; + + /* another iteration of the loop with odd and even swapped */ + gf2_matrix_square(odd, even); + if (len2 & 1) + crc1 = gf2_matrix_times(odd, crc1); + len2 >>= 1; + + /* if no more bits set, then done */ + } while (len2 != 0); + + /* return combined crc */ + crc1 ^= crc2; + return crc1; +} diff --git a/snesreader/zlib/crc32.h b/snesreader/zlib/crc32.h new file mode 100644 index 00000000..8053b611 --- /dev/null +++ b/snesreader/zlib/crc32.h @@ -0,0 +1,441 @@ +/* crc32.h -- tables for rapid CRC calculation + * Generated automatically by crc32.c + */ + +local const unsigned long FAR crc_table[TBLS][256] = +{ + { + 0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL, + 0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL, + 0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL, + 0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL, + 0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL, + 0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL, + 0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL, + 0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL, + 0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL, + 0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL, + 0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL, + 0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL, + 0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL, + 0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL, + 0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL, + 0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL, + 0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL, + 0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL, + 0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL, + 0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL, + 0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL, + 0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL, + 0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL, + 0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL, + 0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL, + 0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL, + 0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL, + 0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL, + 0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL, + 0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL, + 0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL, + 0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL, + 0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL, + 0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL, + 0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL, + 0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL, + 0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL, + 0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL, + 0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL, + 0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL, + 0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL, + 0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL, + 0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL, + 0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL, + 0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL, + 0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL, + 0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL, + 0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL, + 0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL, + 0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL, + 0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL, + 0x2d02ef8dUL +#ifdef BYFOUR + }, + { + 0x00000000UL, 0x191b3141UL, 0x32366282UL, 0x2b2d53c3UL, 0x646cc504UL, + 0x7d77f445UL, 0x565aa786UL, 0x4f4196c7UL, 0xc8d98a08UL, 0xd1c2bb49UL, + 0xfaefe88aUL, 0xe3f4d9cbUL, 0xacb54f0cUL, 0xb5ae7e4dUL, 0x9e832d8eUL, + 0x87981ccfUL, 0x4ac21251UL, 0x53d92310UL, 0x78f470d3UL, 0x61ef4192UL, + 0x2eaed755UL, 0x37b5e614UL, 0x1c98b5d7UL, 0x05838496UL, 0x821b9859UL, + 0x9b00a918UL, 0xb02dfadbUL, 0xa936cb9aUL, 0xe6775d5dUL, 0xff6c6c1cUL, + 0xd4413fdfUL, 0xcd5a0e9eUL, 0x958424a2UL, 0x8c9f15e3UL, 0xa7b24620UL, + 0xbea97761UL, 0xf1e8e1a6UL, 0xe8f3d0e7UL, 0xc3de8324UL, 0xdac5b265UL, + 0x5d5daeaaUL, 0x44469febUL, 0x6f6bcc28UL, 0x7670fd69UL, 0x39316baeUL, + 0x202a5aefUL, 0x0b07092cUL, 0x121c386dUL, 0xdf4636f3UL, 0xc65d07b2UL, + 0xed705471UL, 0xf46b6530UL, 0xbb2af3f7UL, 0xa231c2b6UL, 0x891c9175UL, + 0x9007a034UL, 0x179fbcfbUL, 0x0e848dbaUL, 0x25a9de79UL, 0x3cb2ef38UL, + 0x73f379ffUL, 0x6ae848beUL, 0x41c51b7dUL, 0x58de2a3cUL, 0xf0794f05UL, + 0xe9627e44UL, 0xc24f2d87UL, 0xdb541cc6UL, 0x94158a01UL, 0x8d0ebb40UL, + 0xa623e883UL, 0xbf38d9c2UL, 0x38a0c50dUL, 0x21bbf44cUL, 0x0a96a78fUL, + 0x138d96ceUL, 0x5ccc0009UL, 0x45d73148UL, 0x6efa628bUL, 0x77e153caUL, + 0xbabb5d54UL, 0xa3a06c15UL, 0x888d3fd6UL, 0x91960e97UL, 0xded79850UL, + 0xc7cca911UL, 0xece1fad2UL, 0xf5facb93UL, 0x7262d75cUL, 0x6b79e61dUL, + 0x4054b5deUL, 0x594f849fUL, 0x160e1258UL, 0x0f152319UL, 0x243870daUL, + 0x3d23419bUL, 0x65fd6ba7UL, 0x7ce65ae6UL, 0x57cb0925UL, 0x4ed03864UL, + 0x0191aea3UL, 0x188a9fe2UL, 0x33a7cc21UL, 0x2abcfd60UL, 0xad24e1afUL, + 0xb43fd0eeUL, 0x9f12832dUL, 0x8609b26cUL, 0xc94824abUL, 0xd05315eaUL, + 0xfb7e4629UL, 0xe2657768UL, 0x2f3f79f6UL, 0x362448b7UL, 0x1d091b74UL, + 0x04122a35UL, 0x4b53bcf2UL, 0x52488db3UL, 0x7965de70UL, 0x607eef31UL, + 0xe7e6f3feUL, 0xfefdc2bfUL, 0xd5d0917cUL, 0xcccba03dUL, 0x838a36faUL, + 0x9a9107bbUL, 0xb1bc5478UL, 0xa8a76539UL, 0x3b83984bUL, 0x2298a90aUL, + 0x09b5fac9UL, 0x10aecb88UL, 0x5fef5d4fUL, 0x46f46c0eUL, 0x6dd93fcdUL, + 0x74c20e8cUL, 0xf35a1243UL, 0xea412302UL, 0xc16c70c1UL, 0xd8774180UL, + 0x9736d747UL, 0x8e2de606UL, 0xa500b5c5UL, 0xbc1b8484UL, 0x71418a1aUL, + 0x685abb5bUL, 0x4377e898UL, 0x5a6cd9d9UL, 0x152d4f1eUL, 0x0c367e5fUL, + 0x271b2d9cUL, 0x3e001cddUL, 0xb9980012UL, 0xa0833153UL, 0x8bae6290UL, + 0x92b553d1UL, 0xddf4c516UL, 0xc4eff457UL, 0xefc2a794UL, 0xf6d996d5UL, + 0xae07bce9UL, 0xb71c8da8UL, 0x9c31de6bUL, 0x852aef2aUL, 0xca6b79edUL, + 0xd37048acUL, 0xf85d1b6fUL, 0xe1462a2eUL, 0x66de36e1UL, 0x7fc507a0UL, + 0x54e85463UL, 0x4df36522UL, 0x02b2f3e5UL, 0x1ba9c2a4UL, 0x30849167UL, + 0x299fa026UL, 0xe4c5aeb8UL, 0xfdde9ff9UL, 0xd6f3cc3aUL, 0xcfe8fd7bUL, + 0x80a96bbcUL, 0x99b25afdUL, 0xb29f093eUL, 0xab84387fUL, 0x2c1c24b0UL, + 0x350715f1UL, 0x1e2a4632UL, 0x07317773UL, 0x4870e1b4UL, 0x516bd0f5UL, + 0x7a468336UL, 0x635db277UL, 0xcbfad74eUL, 0xd2e1e60fUL, 0xf9ccb5ccUL, + 0xe0d7848dUL, 0xaf96124aUL, 0xb68d230bUL, 0x9da070c8UL, 0x84bb4189UL, + 0x03235d46UL, 0x1a386c07UL, 0x31153fc4UL, 0x280e0e85UL, 0x674f9842UL, + 0x7e54a903UL, 0x5579fac0UL, 0x4c62cb81UL, 0x8138c51fUL, 0x9823f45eUL, + 0xb30ea79dUL, 0xaa1596dcUL, 0xe554001bUL, 0xfc4f315aUL, 0xd7626299UL, + 0xce7953d8UL, 0x49e14f17UL, 0x50fa7e56UL, 0x7bd72d95UL, 0x62cc1cd4UL, + 0x2d8d8a13UL, 0x3496bb52UL, 0x1fbbe891UL, 0x06a0d9d0UL, 0x5e7ef3ecUL, + 0x4765c2adUL, 0x6c48916eUL, 0x7553a02fUL, 0x3a1236e8UL, 0x230907a9UL, + 0x0824546aUL, 0x113f652bUL, 0x96a779e4UL, 0x8fbc48a5UL, 0xa4911b66UL, + 0xbd8a2a27UL, 0xf2cbbce0UL, 0xebd08da1UL, 0xc0fdde62UL, 0xd9e6ef23UL, + 0x14bce1bdUL, 0x0da7d0fcUL, 0x268a833fUL, 0x3f91b27eUL, 0x70d024b9UL, + 0x69cb15f8UL, 0x42e6463bUL, 0x5bfd777aUL, 0xdc656bb5UL, 0xc57e5af4UL, + 0xee530937UL, 0xf7483876UL, 0xb809aeb1UL, 0xa1129ff0UL, 0x8a3fcc33UL, + 0x9324fd72UL + }, + { + 0x00000000UL, 0x01c26a37UL, 0x0384d46eUL, 0x0246be59UL, 0x0709a8dcUL, + 0x06cbc2ebUL, 0x048d7cb2UL, 0x054f1685UL, 0x0e1351b8UL, 0x0fd13b8fUL, + 0x0d9785d6UL, 0x0c55efe1UL, 0x091af964UL, 0x08d89353UL, 0x0a9e2d0aUL, + 0x0b5c473dUL, 0x1c26a370UL, 0x1de4c947UL, 0x1fa2771eUL, 0x1e601d29UL, + 0x1b2f0bacUL, 0x1aed619bUL, 0x18abdfc2UL, 0x1969b5f5UL, 0x1235f2c8UL, + 0x13f798ffUL, 0x11b126a6UL, 0x10734c91UL, 0x153c5a14UL, 0x14fe3023UL, + 0x16b88e7aUL, 0x177ae44dUL, 0x384d46e0UL, 0x398f2cd7UL, 0x3bc9928eUL, + 0x3a0bf8b9UL, 0x3f44ee3cUL, 0x3e86840bUL, 0x3cc03a52UL, 0x3d025065UL, + 0x365e1758UL, 0x379c7d6fUL, 0x35dac336UL, 0x3418a901UL, 0x3157bf84UL, + 0x3095d5b3UL, 0x32d36beaUL, 0x331101ddUL, 0x246be590UL, 0x25a98fa7UL, + 0x27ef31feUL, 0x262d5bc9UL, 0x23624d4cUL, 0x22a0277bUL, 0x20e69922UL, + 0x2124f315UL, 0x2a78b428UL, 0x2bbade1fUL, 0x29fc6046UL, 0x283e0a71UL, + 0x2d711cf4UL, 0x2cb376c3UL, 0x2ef5c89aUL, 0x2f37a2adUL, 0x709a8dc0UL, + 0x7158e7f7UL, 0x731e59aeUL, 0x72dc3399UL, 0x7793251cUL, 0x76514f2bUL, + 0x7417f172UL, 0x75d59b45UL, 0x7e89dc78UL, 0x7f4bb64fUL, 0x7d0d0816UL, + 0x7ccf6221UL, 0x798074a4UL, 0x78421e93UL, 0x7a04a0caUL, 0x7bc6cafdUL, + 0x6cbc2eb0UL, 0x6d7e4487UL, 0x6f38fadeUL, 0x6efa90e9UL, 0x6bb5866cUL, + 0x6a77ec5bUL, 0x68315202UL, 0x69f33835UL, 0x62af7f08UL, 0x636d153fUL, + 0x612bab66UL, 0x60e9c151UL, 0x65a6d7d4UL, 0x6464bde3UL, 0x662203baUL, + 0x67e0698dUL, 0x48d7cb20UL, 0x4915a117UL, 0x4b531f4eUL, 0x4a917579UL, + 0x4fde63fcUL, 0x4e1c09cbUL, 0x4c5ab792UL, 0x4d98dda5UL, 0x46c49a98UL, + 0x4706f0afUL, 0x45404ef6UL, 0x448224c1UL, 0x41cd3244UL, 0x400f5873UL, + 0x4249e62aUL, 0x438b8c1dUL, 0x54f16850UL, 0x55330267UL, 0x5775bc3eUL, + 0x56b7d609UL, 0x53f8c08cUL, 0x523aaabbUL, 0x507c14e2UL, 0x51be7ed5UL, + 0x5ae239e8UL, 0x5b2053dfUL, 0x5966ed86UL, 0x58a487b1UL, 0x5deb9134UL, + 0x5c29fb03UL, 0x5e6f455aUL, 0x5fad2f6dUL, 0xe1351b80UL, 0xe0f771b7UL, + 0xe2b1cfeeUL, 0xe373a5d9UL, 0xe63cb35cUL, 0xe7fed96bUL, 0xe5b86732UL, + 0xe47a0d05UL, 0xef264a38UL, 0xeee4200fUL, 0xeca29e56UL, 0xed60f461UL, + 0xe82fe2e4UL, 0xe9ed88d3UL, 0xebab368aUL, 0xea695cbdUL, 0xfd13b8f0UL, + 0xfcd1d2c7UL, 0xfe976c9eUL, 0xff5506a9UL, 0xfa1a102cUL, 0xfbd87a1bUL, + 0xf99ec442UL, 0xf85cae75UL, 0xf300e948UL, 0xf2c2837fUL, 0xf0843d26UL, + 0xf1465711UL, 0xf4094194UL, 0xf5cb2ba3UL, 0xf78d95faUL, 0xf64fffcdUL, + 0xd9785d60UL, 0xd8ba3757UL, 0xdafc890eUL, 0xdb3ee339UL, 0xde71f5bcUL, + 0xdfb39f8bUL, 0xddf521d2UL, 0xdc374be5UL, 0xd76b0cd8UL, 0xd6a966efUL, + 0xd4efd8b6UL, 0xd52db281UL, 0xd062a404UL, 0xd1a0ce33UL, 0xd3e6706aUL, + 0xd2241a5dUL, 0xc55efe10UL, 0xc49c9427UL, 0xc6da2a7eUL, 0xc7184049UL, + 0xc25756ccUL, 0xc3953cfbUL, 0xc1d382a2UL, 0xc011e895UL, 0xcb4dafa8UL, + 0xca8fc59fUL, 0xc8c97bc6UL, 0xc90b11f1UL, 0xcc440774UL, 0xcd866d43UL, + 0xcfc0d31aUL, 0xce02b92dUL, 0x91af9640UL, 0x906dfc77UL, 0x922b422eUL, + 0x93e92819UL, 0x96a63e9cUL, 0x976454abUL, 0x9522eaf2UL, 0x94e080c5UL, + 0x9fbcc7f8UL, 0x9e7eadcfUL, 0x9c381396UL, 0x9dfa79a1UL, 0x98b56f24UL, + 0x99770513UL, 0x9b31bb4aUL, 0x9af3d17dUL, 0x8d893530UL, 0x8c4b5f07UL, + 0x8e0de15eUL, 0x8fcf8b69UL, 0x8a809decUL, 0x8b42f7dbUL, 0x89044982UL, + 0x88c623b5UL, 0x839a6488UL, 0x82580ebfUL, 0x801eb0e6UL, 0x81dcdad1UL, + 0x8493cc54UL, 0x8551a663UL, 0x8717183aUL, 0x86d5720dUL, 0xa9e2d0a0UL, + 0xa820ba97UL, 0xaa6604ceUL, 0xaba46ef9UL, 0xaeeb787cUL, 0xaf29124bUL, + 0xad6fac12UL, 0xacadc625UL, 0xa7f18118UL, 0xa633eb2fUL, 0xa4755576UL, + 0xa5b73f41UL, 0xa0f829c4UL, 0xa13a43f3UL, 0xa37cfdaaUL, 0xa2be979dUL, + 0xb5c473d0UL, 0xb40619e7UL, 0xb640a7beUL, 0xb782cd89UL, 0xb2cddb0cUL, + 0xb30fb13bUL, 0xb1490f62UL, 0xb08b6555UL, 0xbbd72268UL, 0xba15485fUL, + 0xb853f606UL, 0xb9919c31UL, 0xbcde8ab4UL, 0xbd1ce083UL, 0xbf5a5edaUL, + 0xbe9834edUL + }, + { + 0x00000000UL, 0xb8bc6765UL, 0xaa09c88bUL, 0x12b5afeeUL, 0x8f629757UL, + 0x37def032UL, 0x256b5fdcUL, 0x9dd738b9UL, 0xc5b428efUL, 0x7d084f8aUL, + 0x6fbde064UL, 0xd7018701UL, 0x4ad6bfb8UL, 0xf26ad8ddUL, 0xe0df7733UL, + 0x58631056UL, 0x5019579fUL, 0xe8a530faUL, 0xfa109f14UL, 0x42acf871UL, + 0xdf7bc0c8UL, 0x67c7a7adUL, 0x75720843UL, 0xcdce6f26UL, 0x95ad7f70UL, + 0x2d111815UL, 0x3fa4b7fbUL, 0x8718d09eUL, 0x1acfe827UL, 0xa2738f42UL, + 0xb0c620acUL, 0x087a47c9UL, 0xa032af3eUL, 0x188ec85bUL, 0x0a3b67b5UL, + 0xb28700d0UL, 0x2f503869UL, 0x97ec5f0cUL, 0x8559f0e2UL, 0x3de59787UL, + 0x658687d1UL, 0xdd3ae0b4UL, 0xcf8f4f5aUL, 0x7733283fUL, 0xeae41086UL, + 0x525877e3UL, 0x40edd80dUL, 0xf851bf68UL, 0xf02bf8a1UL, 0x48979fc4UL, + 0x5a22302aUL, 0xe29e574fUL, 0x7f496ff6UL, 0xc7f50893UL, 0xd540a77dUL, + 0x6dfcc018UL, 0x359fd04eUL, 0x8d23b72bUL, 0x9f9618c5UL, 0x272a7fa0UL, + 0xbafd4719UL, 0x0241207cUL, 0x10f48f92UL, 0xa848e8f7UL, 0x9b14583dUL, + 0x23a83f58UL, 0x311d90b6UL, 0x89a1f7d3UL, 0x1476cf6aUL, 0xaccaa80fUL, + 0xbe7f07e1UL, 0x06c36084UL, 0x5ea070d2UL, 0xe61c17b7UL, 0xf4a9b859UL, + 0x4c15df3cUL, 0xd1c2e785UL, 0x697e80e0UL, 0x7bcb2f0eUL, 0xc377486bUL, + 0xcb0d0fa2UL, 0x73b168c7UL, 0x6104c729UL, 0xd9b8a04cUL, 0x446f98f5UL, + 0xfcd3ff90UL, 0xee66507eUL, 0x56da371bUL, 0x0eb9274dUL, 0xb6054028UL, + 0xa4b0efc6UL, 0x1c0c88a3UL, 0x81dbb01aUL, 0x3967d77fUL, 0x2bd27891UL, + 0x936e1ff4UL, 0x3b26f703UL, 0x839a9066UL, 0x912f3f88UL, 0x299358edUL, + 0xb4446054UL, 0x0cf80731UL, 0x1e4da8dfUL, 0xa6f1cfbaUL, 0xfe92dfecUL, + 0x462eb889UL, 0x549b1767UL, 0xec277002UL, 0x71f048bbUL, 0xc94c2fdeUL, + 0xdbf98030UL, 0x6345e755UL, 0x6b3fa09cUL, 0xd383c7f9UL, 0xc1366817UL, + 0x798a0f72UL, 0xe45d37cbUL, 0x5ce150aeUL, 0x4e54ff40UL, 0xf6e89825UL, + 0xae8b8873UL, 0x1637ef16UL, 0x048240f8UL, 0xbc3e279dUL, 0x21e91f24UL, + 0x99557841UL, 0x8be0d7afUL, 0x335cb0caUL, 0xed59b63bUL, 0x55e5d15eUL, + 0x47507eb0UL, 0xffec19d5UL, 0x623b216cUL, 0xda874609UL, 0xc832e9e7UL, + 0x708e8e82UL, 0x28ed9ed4UL, 0x9051f9b1UL, 0x82e4565fUL, 0x3a58313aUL, + 0xa78f0983UL, 0x1f336ee6UL, 0x0d86c108UL, 0xb53aa66dUL, 0xbd40e1a4UL, + 0x05fc86c1UL, 0x1749292fUL, 0xaff54e4aUL, 0x322276f3UL, 0x8a9e1196UL, + 0x982bbe78UL, 0x2097d91dUL, 0x78f4c94bUL, 0xc048ae2eUL, 0xd2fd01c0UL, + 0x6a4166a5UL, 0xf7965e1cUL, 0x4f2a3979UL, 0x5d9f9697UL, 0xe523f1f2UL, + 0x4d6b1905UL, 0xf5d77e60UL, 0xe762d18eUL, 0x5fdeb6ebUL, 0xc2098e52UL, + 0x7ab5e937UL, 0x680046d9UL, 0xd0bc21bcUL, 0x88df31eaUL, 0x3063568fUL, + 0x22d6f961UL, 0x9a6a9e04UL, 0x07bda6bdUL, 0xbf01c1d8UL, 0xadb46e36UL, + 0x15080953UL, 0x1d724e9aUL, 0xa5ce29ffUL, 0xb77b8611UL, 0x0fc7e174UL, + 0x9210d9cdUL, 0x2aacbea8UL, 0x38191146UL, 0x80a57623UL, 0xd8c66675UL, + 0x607a0110UL, 0x72cfaefeUL, 0xca73c99bUL, 0x57a4f122UL, 0xef189647UL, + 0xfdad39a9UL, 0x45115eccUL, 0x764dee06UL, 0xcef18963UL, 0xdc44268dUL, + 0x64f841e8UL, 0xf92f7951UL, 0x41931e34UL, 0x5326b1daUL, 0xeb9ad6bfUL, + 0xb3f9c6e9UL, 0x0b45a18cUL, 0x19f00e62UL, 0xa14c6907UL, 0x3c9b51beUL, + 0x842736dbUL, 0x96929935UL, 0x2e2efe50UL, 0x2654b999UL, 0x9ee8defcUL, + 0x8c5d7112UL, 0x34e11677UL, 0xa9362eceUL, 0x118a49abUL, 0x033fe645UL, + 0xbb838120UL, 0xe3e09176UL, 0x5b5cf613UL, 0x49e959fdUL, 0xf1553e98UL, + 0x6c820621UL, 0xd43e6144UL, 0xc68bceaaUL, 0x7e37a9cfUL, 0xd67f4138UL, + 0x6ec3265dUL, 0x7c7689b3UL, 0xc4caeed6UL, 0x591dd66fUL, 0xe1a1b10aUL, + 0xf3141ee4UL, 0x4ba87981UL, 0x13cb69d7UL, 0xab770eb2UL, 0xb9c2a15cUL, + 0x017ec639UL, 0x9ca9fe80UL, 0x241599e5UL, 0x36a0360bUL, 0x8e1c516eUL, + 0x866616a7UL, 0x3eda71c2UL, 0x2c6fde2cUL, 0x94d3b949UL, 0x090481f0UL, + 0xb1b8e695UL, 0xa30d497bUL, 0x1bb12e1eUL, 0x43d23e48UL, 0xfb6e592dUL, + 0xe9dbf6c3UL, 0x516791a6UL, 0xccb0a91fUL, 0x740cce7aUL, 0x66b96194UL, + 0xde0506f1UL + }, + { + 0x00000000UL, 0x96300777UL, 0x2c610eeeUL, 0xba510999UL, 0x19c46d07UL, + 0x8ff46a70UL, 0x35a563e9UL, 0xa395649eUL, 0x3288db0eUL, 0xa4b8dc79UL, + 0x1ee9d5e0UL, 0x88d9d297UL, 0x2b4cb609UL, 0xbd7cb17eUL, 0x072db8e7UL, + 0x911dbf90UL, 0x6410b71dUL, 0xf220b06aUL, 0x4871b9f3UL, 0xde41be84UL, + 0x7dd4da1aUL, 0xebe4dd6dUL, 0x51b5d4f4UL, 0xc785d383UL, 0x56986c13UL, + 0xc0a86b64UL, 0x7af962fdUL, 0xecc9658aUL, 0x4f5c0114UL, 0xd96c0663UL, + 0x633d0ffaUL, 0xf50d088dUL, 0xc8206e3bUL, 0x5e10694cUL, 0xe44160d5UL, + 0x727167a2UL, 0xd1e4033cUL, 0x47d4044bUL, 0xfd850dd2UL, 0x6bb50aa5UL, + 0xfaa8b535UL, 0x6c98b242UL, 0xd6c9bbdbUL, 0x40f9bcacUL, 0xe36cd832UL, + 0x755cdf45UL, 0xcf0dd6dcUL, 0x593dd1abUL, 0xac30d926UL, 0x3a00de51UL, + 0x8051d7c8UL, 0x1661d0bfUL, 0xb5f4b421UL, 0x23c4b356UL, 0x9995bacfUL, + 0x0fa5bdb8UL, 0x9eb80228UL, 0x0888055fUL, 0xb2d90cc6UL, 0x24e90bb1UL, + 0x877c6f2fUL, 0x114c6858UL, 0xab1d61c1UL, 0x3d2d66b6UL, 0x9041dc76UL, + 0x0671db01UL, 0xbc20d298UL, 0x2a10d5efUL, 0x8985b171UL, 0x1fb5b606UL, + 0xa5e4bf9fUL, 0x33d4b8e8UL, 0xa2c90778UL, 0x34f9000fUL, 0x8ea80996UL, + 0x18980ee1UL, 0xbb0d6a7fUL, 0x2d3d6d08UL, 0x976c6491UL, 0x015c63e6UL, + 0xf4516b6bUL, 0x62616c1cUL, 0xd8306585UL, 0x4e0062f2UL, 0xed95066cUL, + 0x7ba5011bUL, 0xc1f40882UL, 0x57c40ff5UL, 0xc6d9b065UL, 0x50e9b712UL, + 0xeab8be8bUL, 0x7c88b9fcUL, 0xdf1ddd62UL, 0x492dda15UL, 0xf37cd38cUL, + 0x654cd4fbUL, 0x5861b24dUL, 0xce51b53aUL, 0x7400bca3UL, 0xe230bbd4UL, + 0x41a5df4aUL, 0xd795d83dUL, 0x6dc4d1a4UL, 0xfbf4d6d3UL, 0x6ae96943UL, + 0xfcd96e34UL, 0x468867adUL, 0xd0b860daUL, 0x732d0444UL, 0xe51d0333UL, + 0x5f4c0aaaUL, 0xc97c0dddUL, 0x3c710550UL, 0xaa410227UL, 0x10100bbeUL, + 0x86200cc9UL, 0x25b56857UL, 0xb3856f20UL, 0x09d466b9UL, 0x9fe461ceUL, + 0x0ef9de5eUL, 0x98c9d929UL, 0x2298d0b0UL, 0xb4a8d7c7UL, 0x173db359UL, + 0x810db42eUL, 0x3b5cbdb7UL, 0xad6cbac0UL, 0x2083b8edUL, 0xb6b3bf9aUL, + 0x0ce2b603UL, 0x9ad2b174UL, 0x3947d5eaUL, 0xaf77d29dUL, 0x1526db04UL, + 0x8316dc73UL, 0x120b63e3UL, 0x843b6494UL, 0x3e6a6d0dUL, 0xa85a6a7aUL, + 0x0bcf0ee4UL, 0x9dff0993UL, 0x27ae000aUL, 0xb19e077dUL, 0x44930ff0UL, + 0xd2a30887UL, 0x68f2011eUL, 0xfec20669UL, 0x5d5762f7UL, 0xcb676580UL, + 0x71366c19UL, 0xe7066b6eUL, 0x761bd4feUL, 0xe02bd389UL, 0x5a7ada10UL, + 0xcc4add67UL, 0x6fdfb9f9UL, 0xf9efbe8eUL, 0x43beb717UL, 0xd58eb060UL, + 0xe8a3d6d6UL, 0x7e93d1a1UL, 0xc4c2d838UL, 0x52f2df4fUL, 0xf167bbd1UL, + 0x6757bca6UL, 0xdd06b53fUL, 0x4b36b248UL, 0xda2b0dd8UL, 0x4c1b0aafUL, + 0xf64a0336UL, 0x607a0441UL, 0xc3ef60dfUL, 0x55df67a8UL, 0xef8e6e31UL, + 0x79be6946UL, 0x8cb361cbUL, 0x1a8366bcUL, 0xa0d26f25UL, 0x36e26852UL, + 0x95770cccUL, 0x03470bbbUL, 0xb9160222UL, 0x2f260555UL, 0xbe3bbac5UL, + 0x280bbdb2UL, 0x925ab42bUL, 0x046ab35cUL, 0xa7ffd7c2UL, 0x31cfd0b5UL, + 0x8b9ed92cUL, 0x1daede5bUL, 0xb0c2649bUL, 0x26f263ecUL, 0x9ca36a75UL, + 0x0a936d02UL, 0xa906099cUL, 0x3f360eebUL, 0x85670772UL, 0x13570005UL, + 0x824abf95UL, 0x147ab8e2UL, 0xae2bb17bUL, 0x381bb60cUL, 0x9b8ed292UL, + 0x0dbed5e5UL, 0xb7efdc7cUL, 0x21dfdb0bUL, 0xd4d2d386UL, 0x42e2d4f1UL, + 0xf8b3dd68UL, 0x6e83da1fUL, 0xcd16be81UL, 0x5b26b9f6UL, 0xe177b06fUL, + 0x7747b718UL, 0xe65a0888UL, 0x706a0fffUL, 0xca3b0666UL, 0x5c0b0111UL, + 0xff9e658fUL, 0x69ae62f8UL, 0xd3ff6b61UL, 0x45cf6c16UL, 0x78e20aa0UL, + 0xeed20dd7UL, 0x5483044eUL, 0xc2b30339UL, 0x612667a7UL, 0xf71660d0UL, + 0x4d476949UL, 0xdb776e3eUL, 0x4a6ad1aeUL, 0xdc5ad6d9UL, 0x660bdf40UL, + 0xf03bd837UL, 0x53aebca9UL, 0xc59ebbdeUL, 0x7fcfb247UL, 0xe9ffb530UL, + 0x1cf2bdbdUL, 0x8ac2bacaUL, 0x3093b353UL, 0xa6a3b424UL, 0x0536d0baUL, + 0x9306d7cdUL, 0x2957de54UL, 0xbf67d923UL, 0x2e7a66b3UL, 0xb84a61c4UL, + 0x021b685dUL, 0x942b6f2aUL, 0x37be0bb4UL, 0xa18e0cc3UL, 0x1bdf055aUL, + 0x8def022dUL + }, + { + 0x00000000UL, 0x41311b19UL, 0x82623632UL, 0xc3532d2bUL, 0x04c56c64UL, + 0x45f4777dUL, 0x86a75a56UL, 0xc796414fUL, 0x088ad9c8UL, 0x49bbc2d1UL, + 0x8ae8effaUL, 0xcbd9f4e3UL, 0x0c4fb5acUL, 0x4d7eaeb5UL, 0x8e2d839eUL, + 0xcf1c9887UL, 0x5112c24aUL, 0x1023d953UL, 0xd370f478UL, 0x9241ef61UL, + 0x55d7ae2eUL, 0x14e6b537UL, 0xd7b5981cUL, 0x96848305UL, 0x59981b82UL, + 0x18a9009bUL, 0xdbfa2db0UL, 0x9acb36a9UL, 0x5d5d77e6UL, 0x1c6c6cffUL, + 0xdf3f41d4UL, 0x9e0e5acdUL, 0xa2248495UL, 0xe3159f8cUL, 0x2046b2a7UL, + 0x6177a9beUL, 0xa6e1e8f1UL, 0xe7d0f3e8UL, 0x2483dec3UL, 0x65b2c5daUL, + 0xaaae5d5dUL, 0xeb9f4644UL, 0x28cc6b6fUL, 0x69fd7076UL, 0xae6b3139UL, + 0xef5a2a20UL, 0x2c09070bUL, 0x6d381c12UL, 0xf33646dfUL, 0xb2075dc6UL, + 0x715470edUL, 0x30656bf4UL, 0xf7f32abbUL, 0xb6c231a2UL, 0x75911c89UL, + 0x34a00790UL, 0xfbbc9f17UL, 0xba8d840eUL, 0x79dea925UL, 0x38efb23cUL, + 0xff79f373UL, 0xbe48e86aUL, 0x7d1bc541UL, 0x3c2ade58UL, 0x054f79f0UL, + 0x447e62e9UL, 0x872d4fc2UL, 0xc61c54dbUL, 0x018a1594UL, 0x40bb0e8dUL, + 0x83e823a6UL, 0xc2d938bfUL, 0x0dc5a038UL, 0x4cf4bb21UL, 0x8fa7960aUL, + 0xce968d13UL, 0x0900cc5cUL, 0x4831d745UL, 0x8b62fa6eUL, 0xca53e177UL, + 0x545dbbbaUL, 0x156ca0a3UL, 0xd63f8d88UL, 0x970e9691UL, 0x5098d7deUL, + 0x11a9ccc7UL, 0xd2fae1ecUL, 0x93cbfaf5UL, 0x5cd76272UL, 0x1de6796bUL, + 0xdeb55440UL, 0x9f844f59UL, 0x58120e16UL, 0x1923150fUL, 0xda703824UL, + 0x9b41233dUL, 0xa76bfd65UL, 0xe65ae67cUL, 0x2509cb57UL, 0x6438d04eUL, + 0xa3ae9101UL, 0xe29f8a18UL, 0x21cca733UL, 0x60fdbc2aUL, 0xafe124adUL, + 0xeed03fb4UL, 0x2d83129fUL, 0x6cb20986UL, 0xab2448c9UL, 0xea1553d0UL, + 0x29467efbUL, 0x687765e2UL, 0xf6793f2fUL, 0xb7482436UL, 0x741b091dUL, + 0x352a1204UL, 0xf2bc534bUL, 0xb38d4852UL, 0x70de6579UL, 0x31ef7e60UL, + 0xfef3e6e7UL, 0xbfc2fdfeUL, 0x7c91d0d5UL, 0x3da0cbccUL, 0xfa368a83UL, + 0xbb07919aUL, 0x7854bcb1UL, 0x3965a7a8UL, 0x4b98833bUL, 0x0aa99822UL, + 0xc9fab509UL, 0x88cbae10UL, 0x4f5def5fUL, 0x0e6cf446UL, 0xcd3fd96dUL, + 0x8c0ec274UL, 0x43125af3UL, 0x022341eaUL, 0xc1706cc1UL, 0x804177d8UL, + 0x47d73697UL, 0x06e62d8eUL, 0xc5b500a5UL, 0x84841bbcUL, 0x1a8a4171UL, + 0x5bbb5a68UL, 0x98e87743UL, 0xd9d96c5aUL, 0x1e4f2d15UL, 0x5f7e360cUL, + 0x9c2d1b27UL, 0xdd1c003eUL, 0x120098b9UL, 0x533183a0UL, 0x9062ae8bUL, + 0xd153b592UL, 0x16c5f4ddUL, 0x57f4efc4UL, 0x94a7c2efUL, 0xd596d9f6UL, + 0xe9bc07aeUL, 0xa88d1cb7UL, 0x6bde319cUL, 0x2aef2a85UL, 0xed796bcaUL, + 0xac4870d3UL, 0x6f1b5df8UL, 0x2e2a46e1UL, 0xe136de66UL, 0xa007c57fUL, + 0x6354e854UL, 0x2265f34dUL, 0xe5f3b202UL, 0xa4c2a91bUL, 0x67918430UL, + 0x26a09f29UL, 0xb8aec5e4UL, 0xf99fdefdUL, 0x3accf3d6UL, 0x7bfde8cfUL, + 0xbc6ba980UL, 0xfd5ab299UL, 0x3e099fb2UL, 0x7f3884abUL, 0xb0241c2cUL, + 0xf1150735UL, 0x32462a1eUL, 0x73773107UL, 0xb4e17048UL, 0xf5d06b51UL, + 0x3683467aUL, 0x77b25d63UL, 0x4ed7facbUL, 0x0fe6e1d2UL, 0xccb5ccf9UL, + 0x8d84d7e0UL, 0x4a1296afUL, 0x0b238db6UL, 0xc870a09dUL, 0x8941bb84UL, + 0x465d2303UL, 0x076c381aUL, 0xc43f1531UL, 0x850e0e28UL, 0x42984f67UL, + 0x03a9547eUL, 0xc0fa7955UL, 0x81cb624cUL, 0x1fc53881UL, 0x5ef42398UL, + 0x9da70eb3UL, 0xdc9615aaUL, 0x1b0054e5UL, 0x5a314ffcUL, 0x996262d7UL, + 0xd85379ceUL, 0x174fe149UL, 0x567efa50UL, 0x952dd77bUL, 0xd41ccc62UL, + 0x138a8d2dUL, 0x52bb9634UL, 0x91e8bb1fUL, 0xd0d9a006UL, 0xecf37e5eUL, + 0xadc26547UL, 0x6e91486cUL, 0x2fa05375UL, 0xe836123aUL, 0xa9070923UL, + 0x6a542408UL, 0x2b653f11UL, 0xe479a796UL, 0xa548bc8fUL, 0x661b91a4UL, + 0x272a8abdUL, 0xe0bccbf2UL, 0xa18dd0ebUL, 0x62defdc0UL, 0x23efe6d9UL, + 0xbde1bc14UL, 0xfcd0a70dUL, 0x3f838a26UL, 0x7eb2913fUL, 0xb924d070UL, + 0xf815cb69UL, 0x3b46e642UL, 0x7a77fd5bUL, 0xb56b65dcUL, 0xf45a7ec5UL, + 0x370953eeUL, 0x763848f7UL, 0xb1ae09b8UL, 0xf09f12a1UL, 0x33cc3f8aUL, + 0x72fd2493UL + }, + { + 0x00000000UL, 0x376ac201UL, 0x6ed48403UL, 0x59be4602UL, 0xdca80907UL, + 0xebc2cb06UL, 0xb27c8d04UL, 0x85164f05UL, 0xb851130eUL, 0x8f3bd10fUL, + 0xd685970dUL, 0xe1ef550cUL, 0x64f91a09UL, 0x5393d808UL, 0x0a2d9e0aUL, + 0x3d475c0bUL, 0x70a3261cUL, 0x47c9e41dUL, 0x1e77a21fUL, 0x291d601eUL, + 0xac0b2f1bUL, 0x9b61ed1aUL, 0xc2dfab18UL, 0xf5b56919UL, 0xc8f23512UL, + 0xff98f713UL, 0xa626b111UL, 0x914c7310UL, 0x145a3c15UL, 0x2330fe14UL, + 0x7a8eb816UL, 0x4de47a17UL, 0xe0464d38UL, 0xd72c8f39UL, 0x8e92c93bUL, + 0xb9f80b3aUL, 0x3cee443fUL, 0x0b84863eUL, 0x523ac03cUL, 0x6550023dUL, + 0x58175e36UL, 0x6f7d9c37UL, 0x36c3da35UL, 0x01a91834UL, 0x84bf5731UL, + 0xb3d59530UL, 0xea6bd332UL, 0xdd011133UL, 0x90e56b24UL, 0xa78fa925UL, + 0xfe31ef27UL, 0xc95b2d26UL, 0x4c4d6223UL, 0x7b27a022UL, 0x2299e620UL, + 0x15f32421UL, 0x28b4782aUL, 0x1fdeba2bUL, 0x4660fc29UL, 0x710a3e28UL, + 0xf41c712dUL, 0xc376b32cUL, 0x9ac8f52eUL, 0xada2372fUL, 0xc08d9a70UL, + 0xf7e75871UL, 0xae591e73UL, 0x9933dc72UL, 0x1c259377UL, 0x2b4f5176UL, + 0x72f11774UL, 0x459bd575UL, 0x78dc897eUL, 0x4fb64b7fUL, 0x16080d7dUL, + 0x2162cf7cUL, 0xa4748079UL, 0x931e4278UL, 0xcaa0047aUL, 0xfdcac67bUL, + 0xb02ebc6cUL, 0x87447e6dUL, 0xdefa386fUL, 0xe990fa6eUL, 0x6c86b56bUL, + 0x5bec776aUL, 0x02523168UL, 0x3538f369UL, 0x087faf62UL, 0x3f156d63UL, + 0x66ab2b61UL, 0x51c1e960UL, 0xd4d7a665UL, 0xe3bd6464UL, 0xba032266UL, + 0x8d69e067UL, 0x20cbd748UL, 0x17a11549UL, 0x4e1f534bUL, 0x7975914aUL, + 0xfc63de4fUL, 0xcb091c4eUL, 0x92b75a4cUL, 0xa5dd984dUL, 0x989ac446UL, + 0xaff00647UL, 0xf64e4045UL, 0xc1248244UL, 0x4432cd41UL, 0x73580f40UL, + 0x2ae64942UL, 0x1d8c8b43UL, 0x5068f154UL, 0x67023355UL, 0x3ebc7557UL, + 0x09d6b756UL, 0x8cc0f853UL, 0xbbaa3a52UL, 0xe2147c50UL, 0xd57ebe51UL, + 0xe839e25aUL, 0xdf53205bUL, 0x86ed6659UL, 0xb187a458UL, 0x3491eb5dUL, + 0x03fb295cUL, 0x5a456f5eUL, 0x6d2fad5fUL, 0x801b35e1UL, 0xb771f7e0UL, + 0xeecfb1e2UL, 0xd9a573e3UL, 0x5cb33ce6UL, 0x6bd9fee7UL, 0x3267b8e5UL, + 0x050d7ae4UL, 0x384a26efUL, 0x0f20e4eeUL, 0x569ea2ecUL, 0x61f460edUL, + 0xe4e22fe8UL, 0xd388ede9UL, 0x8a36abebUL, 0xbd5c69eaUL, 0xf0b813fdUL, + 0xc7d2d1fcUL, 0x9e6c97feUL, 0xa90655ffUL, 0x2c101afaUL, 0x1b7ad8fbUL, + 0x42c49ef9UL, 0x75ae5cf8UL, 0x48e900f3UL, 0x7f83c2f2UL, 0x263d84f0UL, + 0x115746f1UL, 0x944109f4UL, 0xa32bcbf5UL, 0xfa958df7UL, 0xcdff4ff6UL, + 0x605d78d9UL, 0x5737bad8UL, 0x0e89fcdaUL, 0x39e33edbUL, 0xbcf571deUL, + 0x8b9fb3dfUL, 0xd221f5ddUL, 0xe54b37dcUL, 0xd80c6bd7UL, 0xef66a9d6UL, + 0xb6d8efd4UL, 0x81b22dd5UL, 0x04a462d0UL, 0x33cea0d1UL, 0x6a70e6d3UL, + 0x5d1a24d2UL, 0x10fe5ec5UL, 0x27949cc4UL, 0x7e2adac6UL, 0x494018c7UL, + 0xcc5657c2UL, 0xfb3c95c3UL, 0xa282d3c1UL, 0x95e811c0UL, 0xa8af4dcbUL, + 0x9fc58fcaUL, 0xc67bc9c8UL, 0xf1110bc9UL, 0x740744ccUL, 0x436d86cdUL, + 0x1ad3c0cfUL, 0x2db902ceUL, 0x4096af91UL, 0x77fc6d90UL, 0x2e422b92UL, + 0x1928e993UL, 0x9c3ea696UL, 0xab546497UL, 0xf2ea2295UL, 0xc580e094UL, + 0xf8c7bc9fUL, 0xcfad7e9eUL, 0x9613389cUL, 0xa179fa9dUL, 0x246fb598UL, + 0x13057799UL, 0x4abb319bUL, 0x7dd1f39aUL, 0x3035898dUL, 0x075f4b8cUL, + 0x5ee10d8eUL, 0x698bcf8fUL, 0xec9d808aUL, 0xdbf7428bUL, 0x82490489UL, + 0xb523c688UL, 0x88649a83UL, 0xbf0e5882UL, 0xe6b01e80UL, 0xd1dadc81UL, + 0x54cc9384UL, 0x63a65185UL, 0x3a181787UL, 0x0d72d586UL, 0xa0d0e2a9UL, + 0x97ba20a8UL, 0xce0466aaUL, 0xf96ea4abUL, 0x7c78ebaeUL, 0x4b1229afUL, + 0x12ac6fadUL, 0x25c6adacUL, 0x1881f1a7UL, 0x2feb33a6UL, 0x765575a4UL, + 0x413fb7a5UL, 0xc429f8a0UL, 0xf3433aa1UL, 0xaafd7ca3UL, 0x9d97bea2UL, + 0xd073c4b5UL, 0xe71906b4UL, 0xbea740b6UL, 0x89cd82b7UL, 0x0cdbcdb2UL, + 0x3bb10fb3UL, 0x620f49b1UL, 0x55658bb0UL, 0x6822d7bbUL, 0x5f4815baUL, + 0x06f653b8UL, 0x319c91b9UL, 0xb48adebcUL, 0x83e01cbdUL, 0xda5e5abfUL, + 0xed3498beUL + }, + { + 0x00000000UL, 0x6567bcb8UL, 0x8bc809aaUL, 0xeeafb512UL, 0x5797628fUL, + 0x32f0de37UL, 0xdc5f6b25UL, 0xb938d79dUL, 0xef28b4c5UL, 0x8a4f087dUL, + 0x64e0bd6fUL, 0x018701d7UL, 0xb8bfd64aUL, 0xddd86af2UL, 0x3377dfe0UL, + 0x56106358UL, 0x9f571950UL, 0xfa30a5e8UL, 0x149f10faUL, 0x71f8ac42UL, + 0xc8c07bdfUL, 0xada7c767UL, 0x43087275UL, 0x266fcecdUL, 0x707fad95UL, + 0x1518112dUL, 0xfbb7a43fUL, 0x9ed01887UL, 0x27e8cf1aUL, 0x428f73a2UL, + 0xac20c6b0UL, 0xc9477a08UL, 0x3eaf32a0UL, 0x5bc88e18UL, 0xb5673b0aUL, + 0xd00087b2UL, 0x6938502fUL, 0x0c5fec97UL, 0xe2f05985UL, 0x8797e53dUL, + 0xd1878665UL, 0xb4e03addUL, 0x5a4f8fcfUL, 0x3f283377UL, 0x8610e4eaUL, + 0xe3775852UL, 0x0dd8ed40UL, 0x68bf51f8UL, 0xa1f82bf0UL, 0xc49f9748UL, + 0x2a30225aUL, 0x4f579ee2UL, 0xf66f497fUL, 0x9308f5c7UL, 0x7da740d5UL, + 0x18c0fc6dUL, 0x4ed09f35UL, 0x2bb7238dUL, 0xc518969fUL, 0xa07f2a27UL, + 0x1947fdbaUL, 0x7c204102UL, 0x928ff410UL, 0xf7e848a8UL, 0x3d58149bUL, + 0x583fa823UL, 0xb6901d31UL, 0xd3f7a189UL, 0x6acf7614UL, 0x0fa8caacUL, + 0xe1077fbeUL, 0x8460c306UL, 0xd270a05eUL, 0xb7171ce6UL, 0x59b8a9f4UL, + 0x3cdf154cUL, 0x85e7c2d1UL, 0xe0807e69UL, 0x0e2fcb7bUL, 0x6b4877c3UL, + 0xa20f0dcbUL, 0xc768b173UL, 0x29c70461UL, 0x4ca0b8d9UL, 0xf5986f44UL, + 0x90ffd3fcUL, 0x7e5066eeUL, 0x1b37da56UL, 0x4d27b90eUL, 0x284005b6UL, + 0xc6efb0a4UL, 0xa3880c1cUL, 0x1ab0db81UL, 0x7fd76739UL, 0x9178d22bUL, + 0xf41f6e93UL, 0x03f7263bUL, 0x66909a83UL, 0x883f2f91UL, 0xed589329UL, + 0x546044b4UL, 0x3107f80cUL, 0xdfa84d1eUL, 0xbacff1a6UL, 0xecdf92feUL, + 0x89b82e46UL, 0x67179b54UL, 0x027027ecUL, 0xbb48f071UL, 0xde2f4cc9UL, + 0x3080f9dbUL, 0x55e74563UL, 0x9ca03f6bUL, 0xf9c783d3UL, 0x176836c1UL, + 0x720f8a79UL, 0xcb375de4UL, 0xae50e15cUL, 0x40ff544eUL, 0x2598e8f6UL, + 0x73888baeUL, 0x16ef3716UL, 0xf8408204UL, 0x9d273ebcUL, 0x241fe921UL, + 0x41785599UL, 0xafd7e08bUL, 0xcab05c33UL, 0x3bb659edUL, 0x5ed1e555UL, + 0xb07e5047UL, 0xd519ecffUL, 0x6c213b62UL, 0x094687daUL, 0xe7e932c8UL, + 0x828e8e70UL, 0xd49eed28UL, 0xb1f95190UL, 0x5f56e482UL, 0x3a31583aUL, + 0x83098fa7UL, 0xe66e331fUL, 0x08c1860dUL, 0x6da63ab5UL, 0xa4e140bdUL, + 0xc186fc05UL, 0x2f294917UL, 0x4a4ef5afUL, 0xf3762232UL, 0x96119e8aUL, + 0x78be2b98UL, 0x1dd99720UL, 0x4bc9f478UL, 0x2eae48c0UL, 0xc001fdd2UL, + 0xa566416aUL, 0x1c5e96f7UL, 0x79392a4fUL, 0x97969f5dUL, 0xf2f123e5UL, + 0x05196b4dUL, 0x607ed7f5UL, 0x8ed162e7UL, 0xebb6de5fUL, 0x528e09c2UL, + 0x37e9b57aUL, 0xd9460068UL, 0xbc21bcd0UL, 0xea31df88UL, 0x8f566330UL, + 0x61f9d622UL, 0x049e6a9aUL, 0xbda6bd07UL, 0xd8c101bfUL, 0x366eb4adUL, + 0x53090815UL, 0x9a4e721dUL, 0xff29cea5UL, 0x11867bb7UL, 0x74e1c70fUL, + 0xcdd91092UL, 0xa8beac2aUL, 0x46111938UL, 0x2376a580UL, 0x7566c6d8UL, + 0x10017a60UL, 0xfeaecf72UL, 0x9bc973caUL, 0x22f1a457UL, 0x479618efUL, + 0xa939adfdUL, 0xcc5e1145UL, 0x06ee4d76UL, 0x6389f1ceUL, 0x8d2644dcUL, + 0xe841f864UL, 0x51792ff9UL, 0x341e9341UL, 0xdab12653UL, 0xbfd69aebUL, + 0xe9c6f9b3UL, 0x8ca1450bUL, 0x620ef019UL, 0x07694ca1UL, 0xbe519b3cUL, + 0xdb362784UL, 0x35999296UL, 0x50fe2e2eUL, 0x99b95426UL, 0xfcdee89eUL, + 0x12715d8cUL, 0x7716e134UL, 0xce2e36a9UL, 0xab498a11UL, 0x45e63f03UL, + 0x208183bbUL, 0x7691e0e3UL, 0x13f65c5bUL, 0xfd59e949UL, 0x983e55f1UL, + 0x2106826cUL, 0x44613ed4UL, 0xaace8bc6UL, 0xcfa9377eUL, 0x38417fd6UL, + 0x5d26c36eUL, 0xb389767cUL, 0xd6eecac4UL, 0x6fd61d59UL, 0x0ab1a1e1UL, + 0xe41e14f3UL, 0x8179a84bUL, 0xd769cb13UL, 0xb20e77abUL, 0x5ca1c2b9UL, + 0x39c67e01UL, 0x80fea99cUL, 0xe5991524UL, 0x0b36a036UL, 0x6e511c8eUL, + 0xa7166686UL, 0xc271da3eUL, 0x2cde6f2cUL, 0x49b9d394UL, 0xf0810409UL, + 0x95e6b8b1UL, 0x7b490da3UL, 0x1e2eb11bUL, 0x483ed243UL, 0x2d596efbUL, + 0xc3f6dbe9UL, 0xa6916751UL, 0x1fa9b0ccUL, 0x7ace0c74UL, 0x9461b966UL, + 0xf10605deUL +#endif + } +}; diff --git a/snesreader/zlib/inffast.c b/snesreader/zlib/inffast.c new file mode 100644 index 00000000..7a148eb7 --- /dev/null +++ b/snesreader/zlib/inffast.c @@ -0,0 +1,318 @@ +/* inffast.c -- fast decoding + * Copyright (C) 1995-2004 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "zutil.h" +#include "inftrees.h" +#include "inflate.h" +#include "inffast.h" + +#ifndef ASMINF + +/* Allow machine dependent optimization for post-increment or pre-increment. + Based on testing to date, + Pre-increment preferred for: + - PowerPC G3 (Adler) + - MIPS R5000 (Randers-Pehrson) + Post-increment preferred for: + - none + No measurable difference: + - Pentium III (Anderson) + - M68060 (Nikl) + */ +#ifdef POSTINC +# define OFF 0 +# define PUP(a) *(a)++ +#else +# define OFF 1 +# define PUP(a) *++(a) +#endif + +/* + Decode literal, length, and distance codes and write out the resulting + literal and match bytes until either not enough input or output is + available, an end-of-block is encountered, or a data error is encountered. + When large enough input and output buffers are supplied to inflate(), for + example, a 16K input buffer and a 64K output buffer, more than 95% of the + inflate execution time is spent in this routine. + + Entry assumptions: + + state->mode == LEN + strm->avail_in >= 6 + strm->avail_out >= 258 + start >= strm->avail_out + state->bits < 8 + + On return, state->mode is one of: + + LEN -- ran out of enough output space or enough available input + TYPE -- reached end of block code, inflate() to interpret next block + BAD -- error in block data + + Notes: + + - The maximum input bits used by a length/distance pair is 15 bits for the + length code, 5 bits for the length extra, 15 bits for the distance code, + and 13 bits for the distance extra. This totals 48 bits, or six bytes. + Therefore if strm->avail_in >= 6, then there is enough input to avoid + checking for available input while decoding. + + - The maximum bytes that a single length/distance pair can output is 258 + bytes, which is the maximum length that can be coded. inflate_fast() + requires strm->avail_out >= 258 for each loop to avoid checking for + output space. + */ +void inflate_fast(strm, start) +z_streamp strm; +unsigned start; /* inflate()'s starting value for strm->avail_out */ +{ + struct inflate_state FAR *state; + unsigned char FAR *in; /* local strm->next_in */ + unsigned char FAR *last; /* while in < last, enough input available */ + unsigned char FAR *out; /* local strm->next_out */ + unsigned char FAR *beg; /* inflate()'s initial strm->next_out */ + unsigned char FAR *end; /* while out < end, enough space available */ +#ifdef INFLATE_STRICT + unsigned dmax; /* maximum distance from zlib header */ +#endif + unsigned wsize; /* window size or zero if not using window */ + unsigned whave; /* valid bytes in the window */ + unsigned write; /* window write index */ + unsigned char FAR *window; /* allocated sliding window, if wsize != 0 */ + unsigned long hold; /* local strm->hold */ + unsigned bits; /* local strm->bits */ + code const FAR *lcode; /* local strm->lencode */ + code const FAR *dcode; /* local strm->distcode */ + unsigned lmask; /* mask for first level of length codes */ + unsigned dmask; /* mask for first level of distance codes */ + code this; /* retrieved table entry */ + unsigned op; /* code bits, operation, extra bits, or */ + /* window position, window bytes to copy */ + unsigned len; /* match length, unused bytes */ + unsigned dist; /* match distance */ + unsigned char FAR *from; /* where to copy match from */ + + /* copy state to local variables */ + state = (struct inflate_state FAR *)strm->state; + in = strm->next_in - OFF; + last = in + (strm->avail_in - 5); + out = strm->next_out - OFF; + beg = out - (start - strm->avail_out); + end = out + (strm->avail_out - 257); +#ifdef INFLATE_STRICT + dmax = state->dmax; +#endif + wsize = state->wsize; + whave = state->whave; + write = state->write; + window = state->window; + hold = state->hold; + bits = state->bits; + lcode = state->lencode; + dcode = state->distcode; + lmask = (1U << state->lenbits) - 1; + dmask = (1U << state->distbits) - 1; + + /* decode literals and length/distances until end-of-block or not enough + input data or output space */ + do { + if (bits < 15) { + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + } + this = lcode[hold & lmask]; + dolen: + op = (unsigned)(this.bits); + hold >>= op; + bits -= op; + op = (unsigned)(this.op); + if (op == 0) { /* literal */ + Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ? + "inflate: literal '%c'\n" : + "inflate: literal 0x%02x\n", this.val)); + PUP(out) = (unsigned char)(this.val); + } + else if (op & 16) { /* length base */ + len = (unsigned)(this.val); + op &= 15; /* number of extra bits */ + if (op) { + if (bits < op) { + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + } + len += (unsigned)hold & ((1U << op) - 1); + hold >>= op; + bits -= op; + } + Tracevv((stderr, "inflate: length %u\n", len)); + if (bits < 15) { + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + } + this = dcode[hold & dmask]; + dodist: + op = (unsigned)(this.bits); + hold >>= op; + bits -= op; + op = (unsigned)(this.op); + if (op & 16) { /* distance base */ + dist = (unsigned)(this.val); + op &= 15; /* number of extra bits */ + if (bits < op) { + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + if (bits < op) { + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + } + } + dist += (unsigned)hold & ((1U << op) - 1); +#ifdef INFLATE_STRICT + if (dist > dmax) { + strm->msg = "invalid distance too far back"; + state->mode = BAD; + break; + } +#endif + hold >>= op; + bits -= op; + Tracevv((stderr, "inflate: distance %u\n", dist)); + op = (unsigned)(out - beg); /* max distance in output */ + if (dist > op) { /* see if copy from window */ + op = dist - op; /* distance back in window */ + if (op > whave) { + strm->msg = "invalid distance too far back"; + state->mode = BAD; + break; + } + from = window - OFF; + if (write == 0) { /* very common case */ + from += wsize - op; + if (op < len) { /* some from window */ + len -= op; + do { + PUP(out) = PUP(from); + } while (--op); + from = out - dist; /* rest from output */ + } + } + else if (write < op) { /* wrap around window */ + from += wsize + write - op; + op -= write; + if (op < len) { /* some from end of window */ + len -= op; + do { + PUP(out) = PUP(from); + } while (--op); + from = window - OFF; + if (write < len) { /* some from start of window */ + op = write; + len -= op; + do { + PUP(out) = PUP(from); + } while (--op); + from = out - dist; /* rest from output */ + } + } + } + else { /* contiguous in window */ + from += write - op; + if (op < len) { /* some from window */ + len -= op; + do { + PUP(out) = PUP(from); + } while (--op); + from = out - dist; /* rest from output */ + } + } + while (len > 2) { + PUP(out) = PUP(from); + PUP(out) = PUP(from); + PUP(out) = PUP(from); + len -= 3; + } + if (len) { + PUP(out) = PUP(from); + if (len > 1) + PUP(out) = PUP(from); + } + } + else { + from = out - dist; /* copy direct from output */ + do { /* minimum length is three */ + PUP(out) = PUP(from); + PUP(out) = PUP(from); + PUP(out) = PUP(from); + len -= 3; + } while (len > 2); + if (len) { + PUP(out) = PUP(from); + if (len > 1) + PUP(out) = PUP(from); + } + } + } + else if ((op & 64) == 0) { /* 2nd level distance code */ + this = dcode[this.val + (hold & ((1U << op) - 1))]; + goto dodist; + } + else { + strm->msg = "invalid distance code"; + state->mode = BAD; + break; + } + } + else if ((op & 64) == 0) { /* 2nd level length code */ + this = lcode[this.val + (hold & ((1U << op) - 1))]; + goto dolen; + } + else if (op & 32) { /* end-of-block */ + Tracevv((stderr, "inflate: end of block\n")); + state->mode = TYPE; + break; + } + else { + strm->msg = "invalid literal/length code"; + state->mode = BAD; + break; + } + } while (in < last && out < end); + + /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ + len = bits >> 3; + in -= len; + bits -= len << 3; + hold &= (1U << bits) - 1; + + /* update state and return */ + strm->next_in = in + OFF; + strm->next_out = out + OFF; + strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last)); + strm->avail_out = (unsigned)(out < end ? + 257 + (end - out) : 257 - (out - end)); + state->hold = hold; + state->bits = bits; + return; +} + +/* + inflate_fast() speedups that turned out slower (on a PowerPC G3 750CXe): + - Using bit fields for code structure + - Different op definition to avoid & for extra bits (do & for table bits) + - Three separate decoding do-loops for direct, window, and write == 0 + - Special case for distance > 1 copies to do overlapped load and store copy + - Explicit branch predictions (based on measured branch probabilities) + - Deferring match copy and interspersed it with decoding subsequent codes + - Swapping literal/length else + - Swapping window/direct else + - Larger unrolled copy loops (three is about right) + - Moving len -= 3 statement into middle of loop + */ + +#endif /* !ASMINF */ diff --git a/snesreader/zlib/inffast.h b/snesreader/zlib/inffast.h new file mode 100644 index 00000000..1e88d2d9 --- /dev/null +++ b/snesreader/zlib/inffast.h @@ -0,0 +1,11 @@ +/* inffast.h -- header to use inffast.c + * Copyright (C) 1995-2003 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +void inflate_fast OF((z_streamp strm, unsigned start)); diff --git a/snesreader/zlib/inffixed.h b/snesreader/zlib/inffixed.h new file mode 100644 index 00000000..75ed4b59 --- /dev/null +++ b/snesreader/zlib/inffixed.h @@ -0,0 +1,94 @@ + /* inffixed.h -- table for decoding fixed codes + * Generated automatically by makefixed(). + */ + + /* WARNING: this file should *not* be used by applications. It + is part of the implementation of the compression library and + is subject to change. Applications should only use zlib.h. + */ + + static const code lenfix[512] = { + {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48}, + {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128}, + {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59}, + {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176}, + {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20}, + {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100}, + {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8}, + {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216}, + {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76}, + {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114}, + {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2}, + {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148}, + {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42}, + {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86}, + {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15}, + {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236}, + {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62}, + {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142}, + {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31}, + {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162}, + {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25}, + {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105}, + {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4}, + {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202}, + {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69}, + {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125}, + {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13}, + {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195}, + {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35}, + {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91}, + {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19}, + {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246}, + {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55}, + {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135}, + {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99}, + {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190}, + {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16}, + {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96}, + {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6}, + {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209}, + {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72}, + {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116}, + {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4}, + {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153}, + {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44}, + {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82}, + {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11}, + {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229}, + {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58}, + {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138}, + {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51}, + {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173}, + {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30}, + {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110}, + {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0}, + {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195}, + {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65}, + {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121}, + {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9}, + {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258}, + {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37}, + {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93}, + {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23}, + {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251}, + {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51}, + {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131}, + {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67}, + {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183}, + {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23}, + {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103}, + {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9}, + {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223}, + {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79}, + {0,9,255} + }; + + static const code distfix[32] = { + {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025}, + {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193}, + {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385}, + {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577}, + {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073}, + {22,5,193},{64,5,0} + }; diff --git a/snesreader/zlib/inflate.c b/snesreader/zlib/inflate.c new file mode 100644 index 00000000..37744b3e --- /dev/null +++ b/snesreader/zlib/inflate.c @@ -0,0 +1,1368 @@ +/* inflate.c -- zlib decompression + * Copyright (C) 1995-2005 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* + * Change history: + * + * 1.2.beta0 24 Nov 2002 + * - First version -- complete rewrite of inflate to simplify code, avoid + * creation of window when not needed, minimize use of window when it is + * needed, make inffast.c even faster, implement gzip decoding, and to + * improve code readability and style over the previous zlib inflate code + * + * 1.2.beta1 25 Nov 2002 + * - Use pointers for available input and output checking in inffast.c + * - Remove input and output counters in inffast.c + * - Change inffast.c entry and loop from avail_in >= 7 to >= 6 + * - Remove unnecessary second byte pull from length extra in inffast.c + * - Unroll direct copy to three copies per loop in inffast.c + * + * 1.2.beta2 4 Dec 2002 + * - Change external routine names to reduce potential conflicts + * - Correct filename to inffixed.h for fixed tables in inflate.c + * - Make hbuf[] unsigned char to match parameter type in inflate.c + * - Change strm->next_out[-state->offset] to *(strm->next_out - state->offset) + * to avoid negation problem on Alphas (64 bit) in inflate.c + * + * 1.2.beta3 22 Dec 2002 + * - Add comments on state->bits assertion in inffast.c + * - Add comments on op field in inftrees.h + * - Fix bug in reuse of allocated window after inflateReset() + * - Remove bit fields--back to byte structure for speed + * - Remove distance extra == 0 check in inflate_fast()--only helps for lengths + * - Change post-increments to pre-increments in inflate_fast(), PPC biased? + * - Add compile time option, POSTINC, to use post-increments instead (Intel?) + * - Make MATCH copy in inflate() much faster for when inflate_fast() not used + * - Use local copies of stream next and avail values, as well as local bit + * buffer and bit count in inflate()--for speed when inflate_fast() not used + * + * 1.2.beta4 1 Jan 2003 + * - Split ptr - 257 statements in inflate_table() to avoid compiler warnings + * - Move a comment on output buffer sizes from inffast.c to inflate.c + * - Add comments in inffast.c to introduce the inflate_fast() routine + * - Rearrange window copies in inflate_fast() for speed and simplification + * - Unroll last copy for window match in inflate_fast() + * - Use local copies of window variables in inflate_fast() for speed + * - Pull out common write == 0 case for speed in inflate_fast() + * - Make op and len in inflate_fast() unsigned for consistency + * - Add FAR to lcode and dcode declarations in inflate_fast() + * - Simplified bad distance check in inflate_fast() + * - Added inflateBackInit(), inflateBack(), and inflateBackEnd() in new + * source file infback.c to provide a call-back interface to inflate for + * programs like gzip and unzip -- uses window as output buffer to avoid + * window copying + * + * 1.2.beta5 1 Jan 2003 + * - Improved inflateBack() interface to allow the caller to provide initial + * input in strm. + * - Fixed stored blocks bug in inflateBack() + * + * 1.2.beta6 4 Jan 2003 + * - Added comments in inffast.c on effectiveness of POSTINC + * - Typecasting all around to reduce compiler warnings + * - Changed loops from while (1) or do {} while (1) to for (;;), again to + * make compilers happy + * - Changed type of window in inflateBackInit() to unsigned char * + * + * 1.2.beta7 27 Jan 2003 + * - Changed many types to unsigned or unsigned short to avoid warnings + * - Added inflateCopy() function + * + * 1.2.0 9 Mar 2003 + * - Changed inflateBack() interface to provide separate opaque descriptors + * for the in() and out() functions + * - Changed inflateBack() argument and in_func typedef to swap the length + * and buffer address return values for the input function + * - Check next_in and next_out for Z_NULL on entry to inflate() + * + * The history for versions after 1.2.0 are in ChangeLog in zlib distribution. + */ + +#include "zutil.h" +#include "inftrees.h" +#include "inflate.h" +#include "inffast.h" + +#ifdef MAKEFIXED +# ifndef BUILDFIXED +# define BUILDFIXED +# endif +#endif + +/* function prototypes */ +local void fixedtables OF((struct inflate_state FAR *state)); +local int updatewindow OF((z_streamp strm, unsigned out)); +#ifdef BUILDFIXED + void makefixed OF((void)); +#endif +local unsigned syncsearch OF((unsigned FAR *have, unsigned char FAR *buf, + unsigned len)); + +int ZEXPORT inflateReset(strm) +z_streamp strm; +{ + struct inflate_state FAR *state; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + strm->total_in = strm->total_out = state->total = 0; + strm->msg = Z_NULL; + strm->adler = 1; /* to support ill-conceived Java test suite */ + state->mode = HEAD; + state->last = 0; + state->havedict = 0; + state->dmax = 32768U; + state->head = Z_NULL; + state->wsize = 0; + state->whave = 0; + state->write = 0; + state->hold = 0; + state->bits = 0; + state->lencode = state->distcode = state->next = state->codes; + Tracev((stderr, "inflate: reset\n")); + return Z_OK; +} + +int ZEXPORT inflatePrime(strm, bits, value) +z_streamp strm; +int bits; +int value; +{ + struct inflate_state FAR *state; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if (bits > 16 || state->bits + bits > 32) return Z_STREAM_ERROR; + value &= (1L << bits) - 1; + state->hold += value << state->bits; + state->bits += bits; + return Z_OK; +} + +int ZEXPORT inflateInit2_(strm, windowBits, version, stream_size) +z_streamp strm; +int windowBits; +const char *version; +int stream_size; +{ + struct inflate_state FAR *state; + + if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || + stream_size != (int)(sizeof(z_stream))) + return Z_VERSION_ERROR; + if (strm == Z_NULL) return Z_STREAM_ERROR; + strm->msg = Z_NULL; /* in case we return an error */ + if (strm->zalloc == (alloc_func)0) { + strm->zalloc = zcalloc; + strm->opaque = (voidpf)0; + } + if (strm->zfree == (free_func)0) strm->zfree = zcfree; + state = (struct inflate_state FAR *) + ZALLOC(strm, 1, sizeof(struct inflate_state)); + if (state == Z_NULL) return Z_MEM_ERROR; + Tracev((stderr, "inflate: allocated\n")); + strm->state = (struct internal_state FAR *)state; + if (windowBits < 0) { + state->wrap = 0; + windowBits = -windowBits; + } + else { + state->wrap = (windowBits >> 4) + 1; +#ifdef GUNZIP + if (windowBits < 48) windowBits &= 15; +#endif + } + if (windowBits < 8 || windowBits > 15) { + ZFREE(strm, state); + strm->state = Z_NULL; + return Z_STREAM_ERROR; + } + state->wbits = (unsigned)windowBits; + state->window = Z_NULL; + return inflateReset(strm); +} + +int ZEXPORT inflateInit_(strm, version, stream_size) +z_streamp strm; +const char *version; +int stream_size; +{ + return inflateInit2_(strm, DEF_WBITS, version, stream_size); +} + +/* + Return state with length and distance decoding tables and index sizes set to + fixed code decoding. Normally this returns fixed tables from inffixed.h. + If BUILDFIXED is defined, then instead this routine builds the tables the + first time it's called, and returns those tables the first time and + thereafter. This reduces the size of the code by about 2K bytes, in + exchange for a little execution time. However, BUILDFIXED should not be + used for threaded applications, since the rewriting of the tables and virgin + may not be thread-safe. + */ +local void fixedtables(state) +struct inflate_state FAR *state; +{ +#ifdef BUILDFIXED + static int virgin = 1; + static code *lenfix, *distfix; + static code fixed[544]; + + /* build fixed huffman tables if first call (may not be thread safe) */ + if (virgin) { + unsigned sym, bits; + static code *next; + + /* literal/length table */ + sym = 0; + while (sym < 144) state->lens[sym++] = 8; + while (sym < 256) state->lens[sym++] = 9; + while (sym < 280) state->lens[sym++] = 7; + while (sym < 288) state->lens[sym++] = 8; + next = fixed; + lenfix = next; + bits = 9; + inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work); + + /* distance table */ + sym = 0; + while (sym < 32) state->lens[sym++] = 5; + distfix = next; + bits = 5; + inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work); + + /* do this just once */ + virgin = 0; + } +#else /* !BUILDFIXED */ +# include "inffixed.h" +#endif /* BUILDFIXED */ + state->lencode = lenfix; + state->lenbits = 9; + state->distcode = distfix; + state->distbits = 5; +} + +#ifdef MAKEFIXED +#include + +/* + Write out the inffixed.h that is #include'd above. Defining MAKEFIXED also + defines BUILDFIXED, so the tables are built on the fly. makefixed() writes + those tables to stdout, which would be piped to inffixed.h. A small program + can simply call makefixed to do this: + + void makefixed(void); + + int main(void) + { + makefixed(); + return 0; + } + + Then that can be linked with zlib built with MAKEFIXED defined and run: + + a.out > inffixed.h + */ +void makefixed() +{ + unsigned low, size; + struct inflate_state state; + + fixedtables(&state); + puts(" /* inffixed.h -- table for decoding fixed codes"); + puts(" * Generated automatically by makefixed()."); + puts(" */"); + puts(""); + puts(" /* WARNING: this file should *not* be used by applications."); + puts(" It is part of the implementation of this library and is"); + puts(" subject to change. Applications should only use zlib.h."); + puts(" */"); + puts(""); + size = 1U << 9; + printf(" static const code lenfix[%u] = {", size); + low = 0; + for (;;) { + if ((low % 7) == 0) printf("\n "); + printf("{%u,%u,%d}", state.lencode[low].op, state.lencode[low].bits, + state.lencode[low].val); + if (++low == size) break; + putchar(','); + } + puts("\n };"); + size = 1U << 5; + printf("\n static const code distfix[%u] = {", size); + low = 0; + for (;;) { + if ((low % 6) == 0) printf("\n "); + printf("{%u,%u,%d}", state.distcode[low].op, state.distcode[low].bits, + state.distcode[low].val); + if (++low == size) break; + putchar(','); + } + puts("\n };"); +} +#endif /* MAKEFIXED */ + +/* + Update the window with the last wsize (normally 32K) bytes written before + returning. If window does not exist yet, create it. This is only called + when a window is already in use, or when output has been written during this + inflate call, but the end of the deflate stream has not been reached yet. + It is also called to create a window for dictionary data when a dictionary + is loaded. + + Providing output buffers larger than 32K to inflate() should provide a speed + advantage, since only the last 32K of output is copied to the sliding window + upon return from inflate(), and since all distances after the first 32K of + output will fall in the output data, making match copies simpler and faster. + The advantage may be dependent on the size of the processor's data caches. + */ +local int updatewindow(strm, out) +z_streamp strm; +unsigned out; +{ + struct inflate_state FAR *state; + unsigned copy, dist; + + state = (struct inflate_state FAR *)strm->state; + + /* if it hasn't been done already, allocate space for the window */ + if (state->window == Z_NULL) { + state->window = (unsigned char FAR *) + ZALLOC(strm, 1U << state->wbits, + sizeof(unsigned char)); + if (state->window == Z_NULL) return 1; + } + + /* if window not in use yet, initialize */ + if (state->wsize == 0) { + state->wsize = 1U << state->wbits; + state->write = 0; + state->whave = 0; + } + + /* copy state->wsize or less output bytes into the circular window */ + copy = out - strm->avail_out; + if (copy >= state->wsize) { + zmemcpy(state->window, strm->next_out - state->wsize, state->wsize); + state->write = 0; + state->whave = state->wsize; + } + else { + dist = state->wsize - state->write; + if (dist > copy) dist = copy; + zmemcpy(state->window + state->write, strm->next_out - copy, dist); + copy -= dist; + if (copy) { + zmemcpy(state->window, strm->next_out - copy, copy); + state->write = copy; + state->whave = state->wsize; + } + else { + state->write += dist; + if (state->write == state->wsize) state->write = 0; + if (state->whave < state->wsize) state->whave += dist; + } + } + return 0; +} + +/* Macros for inflate(): */ + +/* check function to use adler32() for zlib or crc32() for gzip */ +#ifdef GUNZIP +# define UPDATE(check, buf, len) \ + (state->flags ? crc32(check, buf, len) : adler32(check, buf, len)) +#else +# define UPDATE(check, buf, len) adler32(check, buf, len) +#endif + +/* check macros for header crc */ +#ifdef GUNZIP +# define CRC2(check, word) \ + do { \ + hbuf[0] = (unsigned char)(word); \ + hbuf[1] = (unsigned char)((word) >> 8); \ + check = crc32(check, hbuf, 2); \ + } while (0) + +# define CRC4(check, word) \ + do { \ + hbuf[0] = (unsigned char)(word); \ + hbuf[1] = (unsigned char)((word) >> 8); \ + hbuf[2] = (unsigned char)((word) >> 16); \ + hbuf[3] = (unsigned char)((word) >> 24); \ + check = crc32(check, hbuf, 4); \ + } while (0) +#endif + +/* Load registers with state in inflate() for speed */ +#define LOAD() \ + do { \ + put = strm->next_out; \ + left = strm->avail_out; \ + next = strm->next_in; \ + have = strm->avail_in; \ + hold = state->hold; \ + bits = state->bits; \ + } while (0) + +/* Restore state from registers in inflate() */ +#define RESTORE() \ + do { \ + strm->next_out = put; \ + strm->avail_out = left; \ + strm->next_in = next; \ + strm->avail_in = have; \ + state->hold = hold; \ + state->bits = bits; \ + } while (0) + +/* Clear the input bit accumulator */ +#define INITBITS() \ + do { \ + hold = 0; \ + bits = 0; \ + } while (0) + +/* Get a byte of input into the bit accumulator, or return from inflate() + if there is no input available. */ +#define PULLBYTE() \ + do { \ + if (have == 0) goto inf_leave; \ + have--; \ + hold += (unsigned long)(*next++) << bits; \ + bits += 8; \ + } while (0) + +/* Assure that there are at least n bits in the bit accumulator. If there is + not enough available input to do that, then return from inflate(). */ +#define NEEDBITS(n) \ + do { \ + while (bits < (unsigned)(n)) \ + PULLBYTE(); \ + } while (0) + +/* Return the low n bits of the bit accumulator (n < 16) */ +#define BITS(n) \ + ((unsigned)hold & ((1U << (n)) - 1)) + +/* Remove n bits from the bit accumulator */ +#define DROPBITS(n) \ + do { \ + hold >>= (n); \ + bits -= (unsigned)(n); \ + } while (0) + +/* Remove zero to seven bits as needed to go to a byte boundary */ +#define BYTEBITS() \ + do { \ + hold >>= bits & 7; \ + bits -= bits & 7; \ + } while (0) + +/* Reverse the bytes in a 32-bit value */ +#define REVERSE(q) \ + ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \ + (((q) & 0xff00) << 8) + (((q) & 0xff) << 24)) + +/* + inflate() uses a state machine to process as much input data and generate as + much output data as possible before returning. The state machine is + structured roughly as follows: + + for (;;) switch (state) { + ... + case STATEn: + if (not enough input data or output space to make progress) + return; + ... make progress ... + state = STATEm; + break; + ... + } + + so when inflate() is called again, the same case is attempted again, and + if the appropriate resources are provided, the machine proceeds to the + next state. The NEEDBITS() macro is usually the way the state evaluates + whether it can proceed or should return. NEEDBITS() does the return if + the requested bits are not available. The typical use of the BITS macros + is: + + NEEDBITS(n); + ... do something with BITS(n) ... + DROPBITS(n); + + where NEEDBITS(n) either returns from inflate() if there isn't enough + input left to load n bits into the accumulator, or it continues. BITS(n) + gives the low n bits in the accumulator. When done, DROPBITS(n) drops + the low n bits off the accumulator. INITBITS() clears the accumulator + and sets the number of available bits to zero. BYTEBITS() discards just + enough bits to put the accumulator on a byte boundary. After BYTEBITS() + and a NEEDBITS(8), then BITS(8) would return the next byte in the stream. + + NEEDBITS(n) uses PULLBYTE() to get an available byte of input, or to return + if there is no input available. The decoding of variable length codes uses + PULLBYTE() directly in order to pull just enough bytes to decode the next + code, and no more. + + Some states loop until they get enough input, making sure that enough + state information is maintained to continue the loop where it left off + if NEEDBITS() returns in the loop. For example, want, need, and keep + would all have to actually be part of the saved state in case NEEDBITS() + returns: + + case STATEw: + while (want < need) { + NEEDBITS(n); + keep[want++] = BITS(n); + DROPBITS(n); + } + state = STATEx; + case STATEx: + + As shown above, if the next state is also the next case, then the break + is omitted. + + A state may also return if there is not enough output space available to + complete that state. Those states are copying stored data, writing a + literal byte, and copying a matching string. + + When returning, a "goto inf_leave" is used to update the total counters, + update the check value, and determine whether any progress has been made + during that inflate() call in order to return the proper return code. + Progress is defined as a change in either strm->avail_in or strm->avail_out. + When there is a window, goto inf_leave will update the window with the last + output written. If a goto inf_leave occurs in the middle of decompression + and there is no window currently, goto inf_leave will create one and copy + output to the window for the next call of inflate(). + + In this implementation, the flush parameter of inflate() only affects the + return code (per zlib.h). inflate() always writes as much as possible to + strm->next_out, given the space available and the provided input--the effect + documented in zlib.h of Z_SYNC_FLUSH. Furthermore, inflate() always defers + the allocation of and copying into a sliding window until necessary, which + provides the effect documented in zlib.h for Z_FINISH when the entire input + stream available. So the only thing the flush parameter actually does is: + when flush is set to Z_FINISH, inflate() cannot return Z_OK. Instead it + will return Z_BUF_ERROR if it has not reached the end of the stream. + */ + +int ZEXPORT inflate(strm, flush) +z_streamp strm; +int flush; +{ + struct inflate_state FAR *state; + unsigned char FAR *next; /* next input */ + unsigned char FAR *put; /* next output */ + unsigned have, left; /* available input and output */ + unsigned long hold; /* bit buffer */ + unsigned bits; /* bits in bit buffer */ + unsigned in, out; /* save starting available input and output */ + unsigned copy; /* number of stored or match bytes to copy */ + unsigned char FAR *from; /* where to copy match bytes from */ + code this; /* current decoding table entry */ + code last; /* parent table entry */ + unsigned len; /* length to copy for repeats, bits to drop */ + int ret; /* return code */ +#ifdef GUNZIP + unsigned char hbuf[4]; /* buffer for gzip header crc calculation */ +#endif + static const unsigned short order[19] = /* permutation of code lengths */ + {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; + + if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL || + (strm->next_in == Z_NULL && strm->avail_in != 0)) + return Z_STREAM_ERROR; + + state = (struct inflate_state FAR *)strm->state; + if (state->mode == TYPE) state->mode = TYPEDO; /* skip check */ + LOAD(); + in = have; + out = left; + ret = Z_OK; + for (;;) + switch (state->mode) { + case HEAD: + if (state->wrap == 0) { + state->mode = TYPEDO; + break; + } + NEEDBITS(16); +#ifdef GUNZIP + if ((state->wrap & 2) && hold == 0x8b1f) { /* gzip header */ + state->check = crc32(0L, Z_NULL, 0); + CRC2(state->check, hold); + INITBITS(); + state->mode = FLAGS; + break; + } + state->flags = 0; /* expect zlib header */ + if (state->head != Z_NULL) + state->head->done = -1; + if (!(state->wrap & 1) || /* check if zlib header allowed */ +#else + if ( +#endif + ((BITS(8) << 8) + (hold >> 8)) % 31) { + strm->msg = "incorrect header check"; + state->mode = BAD; + break; + } + if (BITS(4) != Z_DEFLATED) { + strm->msg = "unknown compression method"; + state->mode = BAD; + break; + } + DROPBITS(4); + len = BITS(4) + 8; + if (len > state->wbits) { + strm->msg = "invalid window size"; + state->mode = BAD; + break; + } + state->dmax = 1U << len; + Tracev((stderr, "inflate: zlib header ok\n")); + strm->adler = state->check = adler32(0L, Z_NULL, 0); + state->mode = hold & 0x200 ? DICTID : TYPE; + INITBITS(); + break; +#ifdef GUNZIP + case FLAGS: + NEEDBITS(16); + state->flags = (int)(hold); + if ((state->flags & 0xff) != Z_DEFLATED) { + strm->msg = "unknown compression method"; + state->mode = BAD; + break; + } + if (state->flags & 0xe000) { + strm->msg = "unknown header flags set"; + state->mode = BAD; + break; + } + if (state->head != Z_NULL) + state->head->text = (int)((hold >> 8) & 1); + if (state->flags & 0x0200) CRC2(state->check, hold); + INITBITS(); + state->mode = TIME; + case TIME: + NEEDBITS(32); + if (state->head != Z_NULL) + state->head->time = hold; + if (state->flags & 0x0200) CRC4(state->check, hold); + INITBITS(); + state->mode = OS; + case OS: + NEEDBITS(16); + if (state->head != Z_NULL) { + state->head->xflags = (int)(hold & 0xff); + state->head->os = (int)(hold >> 8); + } + if (state->flags & 0x0200) CRC2(state->check, hold); + INITBITS(); + state->mode = EXLEN; + case EXLEN: + if (state->flags & 0x0400) { + NEEDBITS(16); + state->length = (unsigned)(hold); + if (state->head != Z_NULL) + state->head->extra_len = (unsigned)hold; + if (state->flags & 0x0200) CRC2(state->check, hold); + INITBITS(); + } + else if (state->head != Z_NULL) + state->head->extra = Z_NULL; + state->mode = EXTRA; + case EXTRA: + if (state->flags & 0x0400) { + copy = state->length; + if (copy > have) copy = have; + if (copy) { + if (state->head != Z_NULL && + state->head->extra != Z_NULL) { + len = state->head->extra_len - state->length; + zmemcpy(state->head->extra + len, next, + len + copy > state->head->extra_max ? + state->head->extra_max - len : copy); + } + if (state->flags & 0x0200) + state->check = crc32(state->check, next, copy); + have -= copy; + next += copy; + state->length -= copy; + } + if (state->length) goto inf_leave; + } + state->length = 0; + state->mode = NAME; + case NAME: + if (state->flags & 0x0800) { + if (have == 0) goto inf_leave; + copy = 0; + do { + len = (unsigned)(next[copy++]); + if (state->head != Z_NULL && + state->head->name != Z_NULL && + state->length < state->head->name_max) + state->head->name[state->length++] = len; + } while (len && copy < have); + if (state->flags & 0x0200) + state->check = crc32(state->check, next, copy); + have -= copy; + next += copy; + if (len) goto inf_leave; + } + else if (state->head != Z_NULL) + state->head->name = Z_NULL; + state->length = 0; + state->mode = COMMENT; + case COMMENT: + if (state->flags & 0x1000) { + if (have == 0) goto inf_leave; + copy = 0; + do { + len = (unsigned)(next[copy++]); + if (state->head != Z_NULL && + state->head->comment != Z_NULL && + state->length < state->head->comm_max) + state->head->comment[state->length++] = len; + } while (len && copy < have); + if (state->flags & 0x0200) + state->check = crc32(state->check, next, copy); + have -= copy; + next += copy; + if (len) goto inf_leave; + } + else if (state->head != Z_NULL) + state->head->comment = Z_NULL; + state->mode = HCRC; + case HCRC: + if (state->flags & 0x0200) { + NEEDBITS(16); + if (hold != (state->check & 0xffff)) { + strm->msg = "header crc mismatch"; + state->mode = BAD; + break; + } + INITBITS(); + } + if (state->head != Z_NULL) { + state->head->hcrc = (int)((state->flags >> 9) & 1); + state->head->done = 1; + } + strm->adler = state->check = crc32(0L, Z_NULL, 0); + state->mode = TYPE; + break; +#endif + case DICTID: + NEEDBITS(32); + strm->adler = state->check = REVERSE(hold); + INITBITS(); + state->mode = DICT; + case DICT: + if (state->havedict == 0) { + RESTORE(); + return Z_NEED_DICT; + } + strm->adler = state->check = adler32(0L, Z_NULL, 0); + state->mode = TYPE; + case TYPE: + if (flush == Z_BLOCK) goto inf_leave; + case TYPEDO: + if (state->last) { + BYTEBITS(); + state->mode = CHECK; + break; + } + NEEDBITS(3); + state->last = BITS(1); + DROPBITS(1); + switch (BITS(2)) { + case 0: /* stored block */ + Tracev((stderr, "inflate: stored block%s\n", + state->last ? " (last)" : "")); + state->mode = STORED; + break; + case 1: /* fixed block */ + fixedtables(state); + Tracev((stderr, "inflate: fixed codes block%s\n", + state->last ? " (last)" : "")); + state->mode = LEN; /* decode codes */ + break; + case 2: /* dynamic block */ + Tracev((stderr, "inflate: dynamic codes block%s\n", + state->last ? " (last)" : "")); + state->mode = TABLE; + break; + case 3: + strm->msg = "invalid block type"; + state->mode = BAD; + } + DROPBITS(2); + break; + case STORED: + BYTEBITS(); /* go to byte boundary */ + NEEDBITS(32); + if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) { + strm->msg = "invalid stored block lengths"; + state->mode = BAD; + break; + } + state->length = (unsigned)hold & 0xffff; + Tracev((stderr, "inflate: stored length %u\n", + state->length)); + INITBITS(); + state->mode = COPY; + case COPY: + copy = state->length; + if (copy) { + if (copy > have) copy = have; + if (copy > left) copy = left; + if (copy == 0) goto inf_leave; + zmemcpy(put, next, copy); + have -= copy; + next += copy; + left -= copy; + put += copy; + state->length -= copy; + break; + } + Tracev((stderr, "inflate: stored end\n")); + state->mode = TYPE; + break; + case TABLE: + NEEDBITS(14); + state->nlen = BITS(5) + 257; + DROPBITS(5); + state->ndist = BITS(5) + 1; + DROPBITS(5); + state->ncode = BITS(4) + 4; + DROPBITS(4); +#ifndef PKZIP_BUG_WORKAROUND + if (state->nlen > 286 || state->ndist > 30) { + strm->msg = "too many length or distance symbols"; + state->mode = BAD; + break; + } +#endif + Tracev((stderr, "inflate: table sizes ok\n")); + state->have = 0; + state->mode = LENLENS; + case LENLENS: + while (state->have < state->ncode) { + NEEDBITS(3); + state->lens[order[state->have++]] = (unsigned short)BITS(3); + DROPBITS(3); + } + while (state->have < 19) + state->lens[order[state->have++]] = 0; + state->next = state->codes; + state->lencode = (code const FAR *)(state->next); + state->lenbits = 7; + ret = inflate_table(CODES, state->lens, 19, &(state->next), + &(state->lenbits), state->work); + if (ret) { + strm->msg = "invalid code lengths set"; + state->mode = BAD; + break; + } + Tracev((stderr, "inflate: code lengths ok\n")); + state->have = 0; + state->mode = CODELENS; + case CODELENS: + while (state->have < state->nlen + state->ndist) { + for (;;) { + this = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(this.bits) <= bits) break; + PULLBYTE(); + } + if (this.val < 16) { + NEEDBITS(this.bits); + DROPBITS(this.bits); + state->lens[state->have++] = this.val; + } + else { + if (this.val == 16) { + NEEDBITS(this.bits + 2); + DROPBITS(this.bits); + if (state->have == 0) { + strm->msg = "invalid bit length repeat"; + state->mode = BAD; + break; + } + len = state->lens[state->have - 1]; + copy = 3 + BITS(2); + DROPBITS(2); + } + else if (this.val == 17) { + NEEDBITS(this.bits + 3); + DROPBITS(this.bits); + len = 0; + copy = 3 + BITS(3); + DROPBITS(3); + } + else { + NEEDBITS(this.bits + 7); + DROPBITS(this.bits); + len = 0; + copy = 11 + BITS(7); + DROPBITS(7); + } + if (state->have + copy > state->nlen + state->ndist) { + strm->msg = "invalid bit length repeat"; + state->mode = BAD; + break; + } + while (copy--) + state->lens[state->have++] = (unsigned short)len; + } + } + + /* handle error breaks in while */ + if (state->mode == BAD) break; + + /* build code tables */ + state->next = state->codes; + state->lencode = (code const FAR *)(state->next); + state->lenbits = 9; + ret = inflate_table(LENS, state->lens, state->nlen, &(state->next), + &(state->lenbits), state->work); + if (ret) { + strm->msg = "invalid literal/lengths set"; + state->mode = BAD; + break; + } + state->distcode = (code const FAR *)(state->next); + state->distbits = 6; + ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist, + &(state->next), &(state->distbits), state->work); + if (ret) { + strm->msg = "invalid distances set"; + state->mode = BAD; + break; + } + Tracev((stderr, "inflate: codes ok\n")); + state->mode = LEN; + case LEN: + if (have >= 6 && left >= 258) { + RESTORE(); + inflate_fast(strm, out); + LOAD(); + break; + } + for (;;) { + this = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(this.bits) <= bits) break; + PULLBYTE(); + } + if (this.op && (this.op & 0xf0) == 0) { + last = this; + for (;;) { + this = state->lencode[last.val + + (BITS(last.bits + last.op) >> last.bits)]; + if ((unsigned)(last.bits + this.bits) <= bits) break; + PULLBYTE(); + } + DROPBITS(last.bits); + } + DROPBITS(this.bits); + state->length = (unsigned)this.val; + if ((int)(this.op) == 0) { + Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ? + "inflate: literal '%c'\n" : + "inflate: literal 0x%02x\n", this.val)); + state->mode = LIT; + break; + } + if (this.op & 32) { + Tracevv((stderr, "inflate: end of block\n")); + state->mode = TYPE; + break; + } + if (this.op & 64) { + strm->msg = "invalid literal/length code"; + state->mode = BAD; + break; + } + state->extra = (unsigned)(this.op) & 15; + state->mode = LENEXT; + case LENEXT: + if (state->extra) { + NEEDBITS(state->extra); + state->length += BITS(state->extra); + DROPBITS(state->extra); + } + Tracevv((stderr, "inflate: length %u\n", state->length)); + state->mode = DIST; + case DIST: + for (;;) { + this = state->distcode[BITS(state->distbits)]; + if ((unsigned)(this.bits) <= bits) break; + PULLBYTE(); + } + if ((this.op & 0xf0) == 0) { + last = this; + for (;;) { + this = state->distcode[last.val + + (BITS(last.bits + last.op) >> last.bits)]; + if ((unsigned)(last.bits + this.bits) <= bits) break; + PULLBYTE(); + } + DROPBITS(last.bits); + } + DROPBITS(this.bits); + if (this.op & 64) { + strm->msg = "invalid distance code"; + state->mode = BAD; + break; + } + state->offset = (unsigned)this.val; + state->extra = (unsigned)(this.op) & 15; + state->mode = DISTEXT; + case DISTEXT: + if (state->extra) { + NEEDBITS(state->extra); + state->offset += BITS(state->extra); + DROPBITS(state->extra); + } +#ifdef INFLATE_STRICT + if (state->offset > state->dmax) { + strm->msg = "invalid distance too far back"; + state->mode = BAD; + break; + } +#endif + if (state->offset > state->whave + out - left) { + strm->msg = "invalid distance too far back"; + state->mode = BAD; + break; + } + Tracevv((stderr, "inflate: distance %u\n", state->offset)); + state->mode = MATCH; + case MATCH: + if (left == 0) goto inf_leave; + copy = out - left; + if (state->offset > copy) { /* copy from window */ + copy = state->offset - copy; + if (copy > state->write) { + copy -= state->write; + from = state->window + (state->wsize - copy); + } + else + from = state->window + (state->write - copy); + if (copy > state->length) copy = state->length; + } + else { /* copy from output */ + from = put - state->offset; + copy = state->length; + } + if (copy > left) copy = left; + left -= copy; + state->length -= copy; + do { + *put++ = *from++; + } while (--copy); + if (state->length == 0) state->mode = LEN; + break; + case LIT: + if (left == 0) goto inf_leave; + *put++ = (unsigned char)(state->length); + left--; + state->mode = LEN; + break; + case CHECK: + if (state->wrap) { + NEEDBITS(32); + out -= left; + strm->total_out += out; + state->total += out; + if (out) + strm->adler = state->check = + UPDATE(state->check, put - out, out); + out = left; + if (( +#ifdef GUNZIP + state->flags ? hold : +#endif + REVERSE(hold)) != state->check) { + strm->msg = "incorrect data check"; + state->mode = BAD; + break; + } + INITBITS(); + Tracev((stderr, "inflate: check matches trailer\n")); + } +#ifdef GUNZIP + state->mode = LENGTH; + case LENGTH: + if (state->wrap && state->flags) { + NEEDBITS(32); + if (hold != (state->total & 0xffffffffUL)) { + strm->msg = "incorrect length check"; + state->mode = BAD; + break; + } + INITBITS(); + Tracev((stderr, "inflate: length matches trailer\n")); + } +#endif + state->mode = DONE; + case DONE: + ret = Z_STREAM_END; + goto inf_leave; + case BAD: + ret = Z_DATA_ERROR; + goto inf_leave; + case MEM: + return Z_MEM_ERROR; + case SYNC: + default: + return Z_STREAM_ERROR; + } + + /* + Return from inflate(), updating the total counts and the check value. + If there was no progress during the inflate() call, return a buffer + error. Call updatewindow() to create and/or update the window state. + Note: a memory error from inflate() is non-recoverable. + */ + inf_leave: + RESTORE(); + if (state->wsize || (state->mode < CHECK && out != strm->avail_out)) + if (updatewindow(strm, out)) { + state->mode = MEM; + return Z_MEM_ERROR; + } + in -= strm->avail_in; + out -= strm->avail_out; + strm->total_in += in; + strm->total_out += out; + state->total += out; + if (state->wrap && out) + strm->adler = state->check = + UPDATE(state->check, strm->next_out - out, out); + strm->data_type = state->bits + (state->last ? 64 : 0) + + (state->mode == TYPE ? 128 : 0); + if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK) + ret = Z_BUF_ERROR; + return ret; +} + +int ZEXPORT inflateEnd(strm) +z_streamp strm; +{ + struct inflate_state FAR *state; + if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0) + return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if (state->window != Z_NULL) ZFREE(strm, state->window); + ZFREE(strm, strm->state); + strm->state = Z_NULL; + Tracev((stderr, "inflate: end\n")); + return Z_OK; +} + +int ZEXPORT inflateSetDictionary(strm, dictionary, dictLength) +z_streamp strm; +const Bytef *dictionary; +uInt dictLength; +{ + struct inflate_state FAR *state; + unsigned long id; + + /* check state */ + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if (state->wrap != 0 && state->mode != DICT) + return Z_STREAM_ERROR; + + /* check for correct dictionary id */ + if (state->mode == DICT) { + id = adler32(0L, Z_NULL, 0); + id = adler32(id, dictionary, dictLength); + if (id != state->check) + return Z_DATA_ERROR; + } + + /* copy dictionary to window */ + if (updatewindow(strm, strm->avail_out)) { + state->mode = MEM; + return Z_MEM_ERROR; + } + if (dictLength > state->wsize) { + zmemcpy(state->window, dictionary + dictLength - state->wsize, + state->wsize); + state->whave = state->wsize; + } + else { + zmemcpy(state->window + state->wsize - dictLength, dictionary, + dictLength); + state->whave = dictLength; + } + state->havedict = 1; + Tracev((stderr, "inflate: dictionary set\n")); + return Z_OK; +} + +int ZEXPORT inflateGetHeader(strm, head) +z_streamp strm; +gz_headerp head; +{ + struct inflate_state FAR *state; + + /* check state */ + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if ((state->wrap & 2) == 0) return Z_STREAM_ERROR; + + /* save header structure */ + state->head = head; + head->done = 0; + return Z_OK; +} + +/* + Search buf[0..len-1] for the pattern: 0, 0, 0xff, 0xff. Return when found + or when out of input. When called, *have is the number of pattern bytes + found in order so far, in 0..3. On return *have is updated to the new + state. If on return *have equals four, then the pattern was found and the + return value is how many bytes were read including the last byte of the + pattern. If *have is less than four, then the pattern has not been found + yet and the return value is len. In the latter case, syncsearch() can be + called again with more data and the *have state. *have is initialized to + zero for the first call. + */ +local unsigned syncsearch(have, buf, len) +unsigned FAR *have; +unsigned char FAR *buf; +unsigned len; +{ + unsigned got; + unsigned next; + + got = *have; + next = 0; + while (next < len && got < 4) { + if ((int)(buf[next]) == (got < 2 ? 0 : 0xff)) + got++; + else if (buf[next]) + got = 0; + else + got = 4 - got; + next++; + } + *have = got; + return next; +} + +int ZEXPORT inflateSync(strm) +z_streamp strm; +{ + unsigned len; /* number of bytes to look at or looked at */ + unsigned long in, out; /* temporary to save total_in and total_out */ + unsigned char buf[4]; /* to restore bit buffer to byte string */ + struct inflate_state FAR *state; + + /* check parameters */ + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR; + + /* if first time, start search in bit buffer */ + if (state->mode != SYNC) { + state->mode = SYNC; + state->hold <<= state->bits & 7; + state->bits -= state->bits & 7; + len = 0; + while (state->bits >= 8) { + buf[len++] = (unsigned char)(state->hold); + state->hold >>= 8; + state->bits -= 8; + } + state->have = 0; + syncsearch(&(state->have), buf, len); + } + + /* search available input */ + len = syncsearch(&(state->have), strm->next_in, strm->avail_in); + strm->avail_in -= len; + strm->next_in += len; + strm->total_in += len; + + /* return no joy or set up to restart inflate() on a new block */ + if (state->have != 4) return Z_DATA_ERROR; + in = strm->total_in; out = strm->total_out; + inflateReset(strm); + strm->total_in = in; strm->total_out = out; + state->mode = TYPE; + return Z_OK; +} + +/* + Returns true if inflate is currently at the end of a block generated by + Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP + implementation to provide an additional safety check. PPP uses + Z_SYNC_FLUSH but removes the length bytes of the resulting empty stored + block. When decompressing, PPP checks that at the end of input packet, + inflate is waiting for these length bytes. + */ +int ZEXPORT inflateSyncPoint(strm) +z_streamp strm; +{ + struct inflate_state FAR *state; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + return state->mode == STORED && state->bits == 0; +} + +int ZEXPORT inflateCopy(dest, source) +z_streamp dest; +z_streamp source; +{ + struct inflate_state FAR *state; + struct inflate_state FAR *copy; + unsigned char FAR *window; + unsigned wsize; + + /* check input */ + if (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL || + source->zalloc == (alloc_func)0 || source->zfree == (free_func)0) + return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)source->state; + + /* allocate space */ + copy = (struct inflate_state FAR *) + ZALLOC(source, 1, sizeof(struct inflate_state)); + if (copy == Z_NULL) return Z_MEM_ERROR; + window = Z_NULL; + if (state->window != Z_NULL) { + window = (unsigned char FAR *) + ZALLOC(source, 1U << state->wbits, sizeof(unsigned char)); + if (window == Z_NULL) { + ZFREE(source, copy); + return Z_MEM_ERROR; + } + } + + /* copy state */ + zmemcpy(dest, source, sizeof(z_stream)); + zmemcpy(copy, state, sizeof(struct inflate_state)); + if (state->lencode >= state->codes && + state->lencode <= state->codes + ENOUGH - 1) { + copy->lencode = copy->codes + (state->lencode - state->codes); + copy->distcode = copy->codes + (state->distcode - state->codes); + } + copy->next = copy->codes + (state->next - state->codes); + if (window != Z_NULL) { + wsize = 1U << state->wbits; + zmemcpy(window, state->window, wsize); + } + copy->window = window; + dest->state = (struct internal_state FAR *)copy; + return Z_OK; +} diff --git a/snesreader/zlib/inflate.h b/snesreader/zlib/inflate.h new file mode 100644 index 00000000..07bd3e78 --- /dev/null +++ b/snesreader/zlib/inflate.h @@ -0,0 +1,115 @@ +/* inflate.h -- internal inflate state definition + * Copyright (C) 1995-2004 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* define NO_GZIP when compiling if you want to disable gzip header and + trailer decoding by inflate(). NO_GZIP would be used to avoid linking in + the crc code when it is not needed. For shared libraries, gzip decoding + should be left enabled. */ +#ifndef NO_GZIP +# define GUNZIP +#endif + +/* Possible inflate modes between inflate() calls */ +typedef enum { + HEAD, /* i: waiting for magic header */ + FLAGS, /* i: waiting for method and flags (gzip) */ + TIME, /* i: waiting for modification time (gzip) */ + OS, /* i: waiting for extra flags and operating system (gzip) */ + EXLEN, /* i: waiting for extra length (gzip) */ + EXTRA, /* i: waiting for extra bytes (gzip) */ + NAME, /* i: waiting for end of file name (gzip) */ + COMMENT, /* i: waiting for end of comment (gzip) */ + HCRC, /* i: waiting for header crc (gzip) */ + DICTID, /* i: waiting for dictionary check value */ + DICT, /* waiting for inflateSetDictionary() call */ + TYPE, /* i: waiting for type bits, including last-flag bit */ + TYPEDO, /* i: same, but skip check to exit inflate on new block */ + STORED, /* i: waiting for stored size (length and complement) */ + COPY, /* i/o: waiting for input or output to copy stored block */ + TABLE, /* i: waiting for dynamic block table lengths */ + LENLENS, /* i: waiting for code length code lengths */ + CODELENS, /* i: waiting for length/lit and distance code lengths */ + LEN, /* i: waiting for length/lit code */ + LENEXT, /* i: waiting for length extra bits */ + DIST, /* i: waiting for distance code */ + DISTEXT, /* i: waiting for distance extra bits */ + MATCH, /* o: waiting for output space to copy string */ + LIT, /* o: waiting for output space to write literal */ + CHECK, /* i: waiting for 32-bit check value */ + LENGTH, /* i: waiting for 32-bit length (gzip) */ + DONE, /* finished check, done -- remain here until reset */ + BAD, /* got a data error -- remain here until reset */ + MEM, /* got an inflate() memory error -- remain here until reset */ + SYNC /* looking for synchronization bytes to restart inflate() */ +} inflate_mode; + +/* + State transitions between above modes - + + (most modes can go to the BAD or MEM mode -- not shown for clarity) + + Process header: + HEAD -> (gzip) or (zlib) + (gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME + NAME -> COMMENT -> HCRC -> TYPE + (zlib) -> DICTID or TYPE + DICTID -> DICT -> TYPE + Read deflate blocks: + TYPE -> STORED or TABLE or LEN or CHECK + STORED -> COPY -> TYPE + TABLE -> LENLENS -> CODELENS -> LEN + Read deflate codes: + LEN -> LENEXT or LIT or TYPE + LENEXT -> DIST -> DISTEXT -> MATCH -> LEN + LIT -> LEN + Process trailer: + CHECK -> LENGTH -> DONE + */ + +/* state maintained between inflate() calls. Approximately 7K bytes. */ +struct inflate_state { + inflate_mode mode; /* current inflate mode */ + int last; /* true if processing last block */ + int wrap; /* bit 0 true for zlib, bit 1 true for gzip */ + int havedict; /* true if dictionary provided */ + int flags; /* gzip header method and flags (0 if zlib) */ + unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */ + unsigned long check; /* protected copy of check value */ + unsigned long total; /* protected copy of output count */ + gz_headerp head; /* where to save gzip header information */ + /* sliding window */ + unsigned wbits; /* log base 2 of requested window size */ + unsigned wsize; /* window size or zero if not using window */ + unsigned whave; /* valid bytes in the window */ + unsigned write; /* window write index */ + unsigned char FAR *window; /* allocated sliding window, if needed */ + /* bit accumulator */ + unsigned long hold; /* input bit accumulator */ + unsigned bits; /* number of bits in "in" */ + /* for string and stored block copying */ + unsigned length; /* literal or length of data to copy */ + unsigned offset; /* distance back to copy string from */ + /* for table and code decoding */ + unsigned extra; /* extra bits needed */ + /* fixed and dynamic code tables */ + code const FAR *lencode; /* starting table for length/literal codes */ + code const FAR *distcode; /* starting table for distance codes */ + unsigned lenbits; /* index bits for lencode */ + unsigned distbits; /* index bits for distcode */ + /* dynamic table building */ + unsigned ncode; /* number of code length code lengths */ + unsigned nlen; /* number of length code lengths */ + unsigned ndist; /* number of distance code lengths */ + unsigned have; /* number of code lengths in lens[] */ + code FAR *next; /* next available space in codes[] */ + unsigned short lens[320]; /* temporary storage for code lengths */ + unsigned short work[288]; /* work area for code table building */ + code codes[ENOUGH]; /* space for code tables */ +}; diff --git a/snesreader/zlib/inftrees.c b/snesreader/zlib/inftrees.c new file mode 100644 index 00000000..8a9c13ff --- /dev/null +++ b/snesreader/zlib/inftrees.c @@ -0,0 +1,329 @@ +/* inftrees.c -- generate Huffman trees for efficient decoding + * Copyright (C) 1995-2005 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "zutil.h" +#include "inftrees.h" + +#define MAXBITS 15 + +const char inflate_copyright[] = + " inflate 1.2.3 Copyright 1995-2005 Mark Adler "; +/* + If you use the zlib library in a product, an acknowledgment is welcome + in the documentation of your product. If for some reason you cannot + include such an acknowledgment, I would appreciate that you keep this + copyright string in the executable of your product. + */ + +/* + Build a set of tables to decode the provided canonical Huffman code. + The code lengths are lens[0..codes-1]. The result starts at *table, + whose indices are 0..2^bits-1. work is a writable array of at least + lens shorts, which is used as a work area. type is the type of code + to be generated, CODES, LENS, or DISTS. On return, zero is success, + -1 is an invalid code, and +1 means that ENOUGH isn't enough. table + on return points to the next available entry's address. bits is the + requested root table index bits, and on return it is the actual root + table index bits. It will differ if the request is greater than the + longest code or if it is less than the shortest code. + */ +int inflate_table(type, lens, codes, table, bits, work) +codetype type; +unsigned short FAR *lens; +unsigned codes; +code FAR * FAR *table; +unsigned FAR *bits; +unsigned short FAR *work; +{ + unsigned len; /* a code's length in bits */ + unsigned sym; /* index of code symbols */ + unsigned min, max; /* minimum and maximum code lengths */ + unsigned root; /* number of index bits for root table */ + unsigned curr; /* number of index bits for current table */ + unsigned drop; /* code bits to drop for sub-table */ + int left; /* number of prefix codes available */ + unsigned used; /* code entries in table used */ + unsigned huff; /* Huffman code */ + unsigned incr; /* for incrementing code, index */ + unsigned fill; /* index for replicating entries */ + unsigned low; /* low bits for current root entry */ + unsigned mask; /* mask for low root bits */ + code this; /* table entry for duplication */ + code FAR *next; /* next available space in table */ + const unsigned short FAR *base; /* base value table to use */ + const unsigned short FAR *extra; /* extra bits table to use */ + int end; /* use base and extra for symbol > end */ + unsigned short count[MAXBITS+1]; /* number of codes of each length */ + unsigned short offs[MAXBITS+1]; /* offsets in table for each length */ + static const unsigned short lbase[31] = { /* Length codes 257..285 base */ + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, + 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; + static const unsigned short lext[31] = { /* Length codes 257..285 extra */ + 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 201, 196}; + static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, + 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, + 8193, 12289, 16385, 24577, 0, 0}; + static const unsigned short dext[32] = { /* Distance codes 0..29 extra */ + 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, + 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, + 28, 28, 29, 29, 64, 64}; + + /* + Process a set of code lengths to create a canonical Huffman code. The + code lengths are lens[0..codes-1]. Each length corresponds to the + symbols 0..codes-1. The Huffman code is generated by first sorting the + symbols by length from short to long, and retaining the symbol order + for codes with equal lengths. Then the code starts with all zero bits + for the first code of the shortest length, and the codes are integer + increments for the same length, and zeros are appended as the length + increases. For the deflate format, these bits are stored backwards + from their more natural integer increment ordering, and so when the + decoding tables are built in the large loop below, the integer codes + are incremented backwards. + + This routine assumes, but does not check, that all of the entries in + lens[] are in the range 0..MAXBITS. The caller must assure this. + 1..MAXBITS is interpreted as that code length. zero means that that + symbol does not occur in this code. + + The codes are sorted by computing a count of codes for each length, + creating from that a table of starting indices for each length in the + sorted table, and then entering the symbols in order in the sorted + table. The sorted table is work[], with that space being provided by + the caller. + + The length counts are used for other purposes as well, i.e. finding + the minimum and maximum length codes, determining if there are any + codes at all, checking for a valid set of lengths, and looking ahead + at length counts to determine sub-table sizes when building the + decoding tables. + */ + + /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ + for (len = 0; len <= MAXBITS; len++) + count[len] = 0; + for (sym = 0; sym < codes; sym++) + count[lens[sym]]++; + + /* bound code lengths, force root to be within code lengths */ + root = *bits; + for (max = MAXBITS; max >= 1; max--) + if (count[max] != 0) break; + if (root > max) root = max; + if (max == 0) { /* no symbols to code at all */ + this.op = (unsigned char)64; /* invalid code marker */ + this.bits = (unsigned char)1; + this.val = (unsigned short)0; + *(*table)++ = this; /* make a table to force an error */ + *(*table)++ = this; + *bits = 1; + return 0; /* no symbols, but wait for decoding to report error */ + } + for (min = 1; min <= MAXBITS; min++) + if (count[min] != 0) break; + if (root < min) root = min; + + /* check for an over-subscribed or incomplete set of lengths */ + left = 1; + for (len = 1; len <= MAXBITS; len++) { + left <<= 1; + left -= count[len]; + if (left < 0) return -1; /* over-subscribed */ + } + if (left > 0 && (type == CODES || max != 1)) + return -1; /* incomplete set */ + + /* generate offsets into symbol table for each length for sorting */ + offs[1] = 0; + for (len = 1; len < MAXBITS; len++) + offs[len + 1] = offs[len] + count[len]; + + /* sort symbols by length, by symbol order within each length */ + for (sym = 0; sym < codes; sym++) + if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym; + + /* + Create and fill in decoding tables. In this loop, the table being + filled is at next and has curr index bits. The code being used is huff + with length len. That code is converted to an index by dropping drop + bits off of the bottom. For codes where len is less than drop + curr, + those top drop + curr - len bits are incremented through all values to + fill the table with replicated entries. + + root is the number of index bits for the root table. When len exceeds + root, sub-tables are created pointed to by the root entry with an index + of the low root bits of huff. This is saved in low to check for when a + new sub-table should be started. drop is zero when the root table is + being filled, and drop is root when sub-tables are being filled. + + When a new sub-table is needed, it is necessary to look ahead in the + code lengths to determine what size sub-table is needed. The length + counts are used for this, and so count[] is decremented as codes are + entered in the tables. + + used keeps track of how many table entries have been allocated from the + provided *table space. It is checked when a LENS table is being made + against the space in *table, ENOUGH, minus the maximum space needed by + the worst case distance code, MAXD. This should never happen, but the + sufficiency of ENOUGH has not been proven exhaustively, hence the check. + This assumes that when type == LENS, bits == 9. + + sym increments through all symbols, and the loop terminates when + all codes of length max, i.e. all codes, have been processed. This + routine permits incomplete codes, so another loop after this one fills + in the rest of the decoding tables with invalid code markers. + */ + + /* set up for code type */ + switch (type) { + case CODES: + base = extra = work; /* dummy value--not used */ + end = 19; + break; + case LENS: + base = lbase; + base -= 257; + extra = lext; + extra -= 257; + end = 256; + break; + default: /* DISTS */ + base = dbase; + extra = dext; + end = -1; + } + + /* initialize state for loop */ + huff = 0; /* starting code */ + sym = 0; /* starting code symbol */ + len = min; /* starting code length */ + next = *table; /* current table to fill in */ + curr = root; /* current table index bits */ + drop = 0; /* current bits to drop from code for index */ + low = (unsigned)(-1); /* trigger new sub-table when len > root */ + used = 1U << root; /* use root table entries */ + mask = used - 1; /* mask for comparing low */ + + /* check available table space */ + if (type == LENS && used >= ENOUGH - MAXD) + return 1; + + /* process all codes and make table entries */ + for (;;) { + /* create table entry */ + this.bits = (unsigned char)(len - drop); + if ((int)(work[sym]) < end) { + this.op = (unsigned char)0; + this.val = work[sym]; + } + else if ((int)(work[sym]) > end) { + this.op = (unsigned char)(extra[work[sym]]); + this.val = base[work[sym]]; + } + else { + this.op = (unsigned char)(32 + 64); /* end of block */ + this.val = 0; + } + + /* replicate for those indices with low len bits equal to huff */ + incr = 1U << (len - drop); + fill = 1U << curr; + min = fill; /* save offset to next table */ + do { + fill -= incr; + next[(huff >> drop) + fill] = this; + } while (fill != 0); + + /* backwards increment the len-bit code huff */ + incr = 1U << (len - 1); + while (huff & incr) + incr >>= 1; + if (incr != 0) { + huff &= incr - 1; + huff += incr; + } + else + huff = 0; + + /* go to next symbol, update count, len */ + sym++; + if (--(count[len]) == 0) { + if (len == max) break; + len = lens[work[sym]]; + } + + /* create new sub-table if needed */ + if (len > root && (huff & mask) != low) { + /* if first time, transition to sub-tables */ + if (drop == 0) + drop = root; + + /* increment past last table */ + next += min; /* here min is 1 << curr */ + + /* determine length of next table */ + curr = len - drop; + left = (int)(1 << curr); + while (curr + drop < max) { + left -= count[curr + drop]; + if (left <= 0) break; + curr++; + left <<= 1; + } + + /* check for enough space */ + used += 1U << curr; + if (type == LENS && used >= ENOUGH - MAXD) + return 1; + + /* point entry in root table to sub-table */ + low = huff & mask; + (*table)[low].op = (unsigned char)curr; + (*table)[low].bits = (unsigned char)root; + (*table)[low].val = (unsigned short)(next - *table); + } + } + + /* + Fill in rest of table for incomplete codes. This loop is similar to the + loop above in incrementing huff for table indices. It is assumed that + len is equal to curr + drop, so there is no loop needed to increment + through high index bits. When the current sub-table is filled, the loop + drops back to the root table to fill in any remaining entries there. + */ + this.op = (unsigned char)64; /* invalid code marker */ + this.bits = (unsigned char)(len - drop); + this.val = (unsigned short)0; + while (huff != 0) { + /* when done with sub-table, drop back to root table */ + if (drop != 0 && (huff & mask) != low) { + drop = 0; + len = root; + next = *table; + this.bits = (unsigned char)len; + } + + /* put invalid code marker in table */ + next[huff >> drop] = this; + + /* backwards increment the len-bit code huff */ + incr = 1U << (len - 1); + while (huff & incr) + incr >>= 1; + if (incr != 0) { + huff &= incr - 1; + huff += incr; + } + else + huff = 0; + } + + /* set return parameters */ + *table += used; + *bits = root; + return 0; +} diff --git a/snesreader/zlib/inftrees.h b/snesreader/zlib/inftrees.h new file mode 100644 index 00000000..b1104c87 --- /dev/null +++ b/snesreader/zlib/inftrees.h @@ -0,0 +1,55 @@ +/* inftrees.h -- header to use inftrees.c + * Copyright (C) 1995-2005 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* Structure for decoding tables. Each entry provides either the + information needed to do the operation requested by the code that + indexed that table entry, or it provides a pointer to another + table that indexes more bits of the code. op indicates whether + the entry is a pointer to another table, a literal, a length or + distance, an end-of-block, or an invalid code. For a table + pointer, the low four bits of op is the number of index bits of + that table. For a length or distance, the low four bits of op + is the number of extra bits to get after the code. bits is + the number of bits in this code or part of the code to drop off + of the bit buffer. val is the actual byte to output in the case + of a literal, the base length or distance, or the offset from + the current table to the next table. Each entry is four bytes. */ +typedef struct { + unsigned char op; /* operation, extra bits, table bits */ + unsigned char bits; /* bits in this part of the code */ + unsigned short val; /* offset in table or code value */ +} code; + +/* op values as set by inflate_table(): + 00000000 - literal + 0000tttt - table link, tttt != 0 is the number of table index bits + 0001eeee - length or distance, eeee is the number of extra bits + 01100000 - end of block + 01000000 - invalid code + */ + +/* Maximum size of dynamic tree. The maximum found in a long but non- + exhaustive search was 1444 code structures (852 for length/literals + and 592 for distances, the latter actually the result of an + exhaustive search). The true maximum is not known, but the value + below is more than safe. */ +#define ENOUGH 2048 +#define MAXD 592 + +/* Type of code to build for inftable() */ +typedef enum { + CODES, + LENS, + DISTS +} codetype; + +extern int inflate_table OF((codetype type, unsigned short FAR *lens, + unsigned codes, code FAR * FAR *table, + unsigned FAR *bits, unsigned short FAR *work)); diff --git a/snesreader/zlib/readme.txt b/snesreader/zlib/readme.txt new file mode 100644 index 00000000..d1331635 --- /dev/null +++ b/snesreader/zlib/readme.txt @@ -0,0 +1,10 @@ +This is NOT the complete zlib distribution; it is just a subset of the +source needed by the File_Extractor library. I've made some minor +changes: + +* Enabled DYNAMIC_CRC_TABLE in zconf.h, to reduce executable size +slightly. +* Made z_stream_s's msg const char* to eliminate many warnings. + +You can remove these sources and link to your own copy of zlib if +desired. diff --git a/snesreader/zlib/zconf.h b/snesreader/zlib/zconf.h new file mode 100644 index 00000000..ee5a9181 --- /dev/null +++ b/snesreader/zlib/zconf.h @@ -0,0 +1,335 @@ +/* zconf.h -- configuration of the zlib compression library + * Copyright (C) 1995-2005 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#ifndef ZCONF_H +#define ZCONF_H + +/* added for file_extractor; OK to remove, just increases executable size */ +#define DYNAMIC_CRC_TABLE + +/* + * If you *really* need a unique prefix for all types and library functions, + * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + */ +#ifdef Z_PREFIX +# define deflateInit_ z_deflateInit_ +# define deflate z_deflate +# define deflateEnd z_deflateEnd +# define inflateInit_ z_inflateInit_ +# define inflate z_inflate +# define inflateEnd z_inflateEnd +# define deflateInit2_ z_deflateInit2_ +# define deflateSetDictionary z_deflateSetDictionary +# define deflateCopy z_deflateCopy +# define deflateReset z_deflateReset +# define deflateParams z_deflateParams +# define deflateBound z_deflateBound +# define deflatePrime z_deflatePrime +# define inflateInit2_ z_inflateInit2_ +# define inflateSetDictionary z_inflateSetDictionary +# define inflateSync z_inflateSync +# define inflateSyncPoint z_inflateSyncPoint +# define inflateCopy z_inflateCopy +# define inflateReset z_inflateReset +# define inflateBack z_inflateBack +# define inflateBackEnd z_inflateBackEnd +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# define uncompress z_uncompress +# define adler32 z_adler32 +# define crc32 z_crc32 +# define get_crc_table z_get_crc_table +# define zError z_zError + +# define alloc_func z_alloc_func +# define free_func z_free_func +# define in_func z_in_func +# define out_func z_out_func +# define Byte z_Byte +# define uInt z_uInt +# define uLong z_uLong +# define Bytef z_Bytef +# define charf z_charf +# define intf z_intf +# define uIntf z_uIntf +# define uLongf z_uLongf +# define voidpf z_voidpf +# define voidp z_voidp +#endif + +#if defined(__MSDOS__) && !defined(MSDOS) +# define MSDOS +#endif +#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) +# define OS2 +#endif +#if defined(_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +#endif +#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) +# ifndef WIN32 +# define WIN32 +# endif +#endif +#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) +# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) +# ifndef SYS16BIT +# define SYS16BIT +# endif +# endif +#endif + +/* + * Compile with -DMAXSEG_64K if the alloc function cannot allocate more + * than 64k bytes at a time (needed on systems with 16-bit int). + */ +#ifdef SYS16BIT +# define MAXSEG_64K +#endif +#ifdef MSDOS +# define UNALIGNED_OK +#endif + +#ifdef __STDC_VERSION__ +# ifndef STDC +# define STDC +# endif +# if __STDC_VERSION__ >= 199901L +# ifndef STDC99 +# define STDC99 +# endif +# endif +#endif +#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) +# define STDC +#endif +#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) +# define STDC +#endif +#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) +# define STDC +#endif +#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) +# define STDC +#endif + +#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ +# define STDC +#endif + +#ifndef STDC +# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +# define const /* note: need a more gentle solution here */ +# endif +#endif + +/* Some Mac compilers merge all .h files incorrectly: */ +#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__) +# define NO_DUMMY_DECL +#endif + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2. + * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files + * created by gzip. (Files created by minigzip can still be extracted by + * gzip.) + */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + (1 << (windowBits+2)) + (1 << (memLevel+9)) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus a few kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +/* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have + * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, + * just define FAR to be empty. + */ +#ifdef SYS16BIT +# if defined(M_I86SM) || defined(M_I86MM) + /* MSC small or medium model */ +# define SMALL_MEDIUM +# ifdef _MSC_VER +# define FAR _far +# else +# define FAR far +# endif +# endif +# if (defined(__SMALL__) || defined(__MEDIUM__)) + /* Turbo C small or medium model */ +# define SMALL_MEDIUM +# ifdef __BORLANDC__ +# define FAR _far +# else +# define FAR far +# endif +# endif +#endif + +#if defined(WINDOWS) || defined(WIN32) + /* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ +# ifdef ZLIB_DLL +# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) +# ifdef ZLIB_INTERNAL +# define ZEXTERN extern __declspec(dllexport) +# else +# define ZEXTERN extern __declspec(dllimport) +# endif +# endif +# endif /* ZLIB_DLL */ + /* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ +# ifdef ZLIB_WINAPI +# ifdef FAR +# undef FAR +# endif +# include + /* No need for _export, use ZLIB.DEF instead. */ + /* For complete Windows compatibility, use WINAPI, not __stdcall. */ +# define ZEXPORT WINAPI +# ifdef WIN32 +# define ZEXPORTVA WINAPIV +# else +# define ZEXPORTVA FAR CDECL +# endif +# endif +#endif + +#if defined (__BEOS__) +# ifdef ZLIB_DLL +# ifdef ZLIB_INTERNAL +# define ZEXPORT __declspec(dllexport) +# define ZEXPORTVA __declspec(dllexport) +# else +# define ZEXPORT __declspec(dllimport) +# define ZEXPORTVA __declspec(dllimport) +# endif +# endif +#endif + +#ifndef ZEXTERN +# define ZEXTERN extern +#endif +#ifndef ZEXPORT +# define ZEXPORT +#endif +#ifndef ZEXPORTVA +# define ZEXPORTVA +#endif + +#ifndef FAR +# define FAR +#endif + +#if !defined(__MACTYPES__) +typedef unsigned char Byte; /* 8 bits */ +#endif +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +#ifdef SMALL_MEDIUM + /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +# define Bytef Byte FAR +#else + typedef Byte FAR Bytef; +#endif +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void const *voidpc; + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte const *voidpc; + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +#if 0 /* HAVE_UNISTD_H -- this line is updated by ./configure */ +# include /* for off_t */ +# include /* for SEEK_* and off_t */ +# ifdef VMS +# include /* for off_t */ +# endif +# define z_off_t off_t +#endif +#ifndef SEEK_SET +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#endif +#ifndef z_off_t +# define z_off_t long +#endif + +#if defined(__OS400__) +# define NO_vsnprintf +#endif + +#if defined(__MVS__) +# define NO_vsnprintf +# ifdef FAR +# undef FAR +# endif +#endif + +/* MVS linker does not support external names larger than 8 bytes */ +#if defined(__MVS__) +# pragma map(deflateInit_,"DEIN") +# pragma map(deflateInit2_,"DEIN2") +# pragma map(deflateEnd,"DEEND") +# pragma map(deflateBound,"DEBND") +# pragma map(inflateInit_,"ININ") +# pragma map(inflateInit2_,"ININ2") +# pragma map(inflateEnd,"INEND") +# pragma map(inflateSync,"INSY") +# pragma map(inflateSetDictionary,"INSEDI") +# pragma map(compressBound,"CMBND") +# pragma map(inflate_table,"INTABL") +# pragma map(inflate_fast,"INFA") +# pragma map(inflate_copyright,"INCOPY") +#endif + +#endif /* ZCONF_H */ diff --git a/snesreader/zlib/zlib.h b/snesreader/zlib/zlib.h new file mode 100644 index 00000000..e4768717 --- /dev/null +++ b/snesreader/zlib/zlib.h @@ -0,0 +1,1357 @@ +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.2.3, July 18th, 2005 + + Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + + + The data format used by the zlib library is described by RFCs (Request for + Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt + (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). +*/ + +#ifndef ZLIB_H +#define ZLIB_H + +#include "zconf.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ZLIB_VERSION "1.2.3" +#define ZLIB_VERNUM 0x1230 + +/* + The 'zlib' compression library provides in-memory compression and + decompression functions, including integrity checks of the uncompressed + data. This version of the library supports only one compression method + (deflation) but other algorithms will be added later and will have the same + stream interface. + + Compression can be done in a single step if the buffers are large + enough (for example if an input file is mmap'ed), or can be done by + repeated calls of the compression function. In the latter case, the + application must provide more input and/or consume the output + (providing more output space) before each call. + + The compressed data format used by default by the in-memory functions is + the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped + around a deflate stream, which is itself documented in RFC 1951. + + The library also supports reading and writing files in gzip (.gz) format + with an interface similar to that of stdio using the functions that start + with "gz". The gzip format is different from the zlib format. gzip is a + gzip wrapper, documented in RFC 1952, wrapped around a deflate stream. + + This library can optionally read and write gzip streams in memory as well. + + The zlib format was designed to be compact and fast for use in memory + and on communications channels. The gzip format was designed for single- + file compression on file systems, has a larger header than zlib to maintain + directory information, and uses a different, slower check method than zlib. + + The library does not install any signal handler. The decoder checks + the consistency of the compressed data, so the library should never + crash even in case of corrupted input. +*/ + +typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); +typedef void (*free_func) OF((voidpf opaque, voidpf address)); + +struct internal_state; + +typedef struct z_stream_s { + Bytef *next_in; /* next input byte */ + uInt avail_in; /* number of bytes available at next_in */ + uLong total_in; /* total nb of input bytes read so far */ + + Bytef *next_out; /* next output byte should be put there */ + uInt avail_out; /* remaining free space at next_out */ + uLong total_out; /* total nb of bytes output so far */ + + const char *msg; /* last error message, NULL if no error */ + struct internal_state FAR *state; /* not visible by applications */ + + alloc_func zalloc; /* used to allocate the internal state */ + free_func zfree; /* used to free the internal state */ + voidpf opaque; /* private data object passed to zalloc and zfree */ + + int data_type; /* best guess about the data type: binary or text */ + uLong adler; /* adler32 value of the uncompressed data */ + uLong reserved; /* reserved for future use */ +} z_stream; + +typedef z_stream FAR *z_streamp; + +/* + gzip header information passed to and from zlib routines. See RFC 1952 + for more details on the meanings of these fields. +*/ +typedef struct gz_header_s { + int text; /* true if compressed data believed to be text */ + uLong time; /* modification time */ + int xflags; /* extra flags (not used when writing a gzip file) */ + int os; /* operating system */ + Bytef *extra; /* pointer to extra field or Z_NULL if none */ + uInt extra_len; /* extra field length (valid if extra != Z_NULL) */ + uInt extra_max; /* space at extra (only when reading header) */ + Bytef *name; /* pointer to zero-terminated file name or Z_NULL */ + uInt name_max; /* space at name (only when reading header) */ + Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */ + uInt comm_max; /* space at comment (only when reading header) */ + int hcrc; /* true if there was or will be a header crc */ + int done; /* true when done reading gzip header (not used + when writing a gzip file) */ +} gz_header; + +typedef gz_header FAR *gz_headerp; + +/* + The application must update next_in and avail_in when avail_in has + dropped to zero. It must update next_out and avail_out when avail_out + has dropped to zero. The application must initialize zalloc, zfree and + opaque before calling the init function. All other fields are set by the + compression library and must not be updated by the application. + + The opaque value provided by the application will be passed as the first + parameter for calls of zalloc and zfree. This can be useful for custom + memory management. The compression library attaches no meaning to the + opaque value. + + zalloc must return Z_NULL if there is not enough memory for the object. + If zlib is used in a multi-threaded application, zalloc and zfree must be + thread safe. + + On 16-bit systems, the functions zalloc and zfree must be able to allocate + exactly 65536 bytes, but will not be required to allocate more than this + if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, + pointers returned by zalloc for objects of exactly 65536 bytes *must* + have their offset normalized to zero. The default allocation function + provided by this library ensures this (see zutil.c). To reduce memory + requirements and avoid any allocation of 64K objects, at the expense of + compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h). + + The fields total_in and total_out can be used for statistics or + progress reports. After compression, total_in holds the total size of + the uncompressed data and may be saved for use in the decompressor + (particularly if the decompressor wants to decompress everything in + a single step). +*/ + + /* constants */ + +#define Z_NO_FLUSH 0 +#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */ +#define Z_SYNC_FLUSH 2 +#define Z_FULL_FLUSH 3 +#define Z_FINISH 4 +#define Z_BLOCK 5 +/* Allowed flush values; see deflate() and inflate() below for details */ + +#define Z_OK 0 +#define Z_STREAM_END 1 +#define Z_NEED_DICT 2 +#define Z_ERRNO (-1) +#define Z_STREAM_ERROR (-2) +#define Z_DATA_ERROR (-3) +#define Z_MEM_ERROR (-4) +#define Z_BUF_ERROR (-5) +#define Z_VERSION_ERROR (-6) +/* Return codes for the compression/decompression functions. Negative + * values are errors, positive values are used for special but normal events. + */ + +#define Z_NO_COMPRESSION 0 +#define Z_BEST_SPEED 1 +#define Z_BEST_COMPRESSION 9 +#define Z_DEFAULT_COMPRESSION (-1) +/* compression levels */ + +#define Z_FILTERED 1 +#define Z_HUFFMAN_ONLY 2 +#define Z_RLE 3 +#define Z_FIXED 4 +#define Z_DEFAULT_STRATEGY 0 +/* compression strategy; see deflateInit2() below for details */ + +#define Z_BINARY 0 +#define Z_TEXT 1 +#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */ +#define Z_UNKNOWN 2 +/* Possible values of the data_type field (though see inflate()) */ + +#define Z_DEFLATED 8 +/* The deflate compression method (the only one supported in this version) */ + +#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ + +#define zlib_version zlibVersion() +/* for compatibility with versions < 1.0.2 */ + + /* basic functions */ + +ZEXTERN const char * ZEXPORT zlibVersion OF((void)); +/* The application can compare zlibVersion and ZLIB_VERSION for consistency. + If the first character differs, the library code actually used is + not compatible with the zlib.h header file used by the application. + This check is automatically made by deflateInit and inflateInit. + */ + +/* +ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); + + Initializes the internal stream state for compression. The fields + zalloc, zfree and opaque must be initialized before by the caller. + If zalloc and zfree are set to Z_NULL, deflateInit updates them to + use default allocation functions. + + The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: + 1 gives best speed, 9 gives best compression, 0 gives no compression at + all (the input data is simply copied a block at a time). + Z_DEFAULT_COMPRESSION requests a default compromise between speed and + compression (currently equivalent to level 6). + + deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if level is not a valid compression level, + Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible + with the version assumed by the caller (ZLIB_VERSION). + msg is set to null if there is no error message. deflateInit does not + perform any compression: this will be done by deflate(). +*/ + + +ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); +/* + deflate compresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce some + output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. deflate performs one or both of the + following actions: + + - Compress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in and avail_in are updated and + processing will resume at this point for the next call of deflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. This action is forced if the parameter flush is non zero. + Forcing flush frequently degrades the compression ratio, so this parameter + should be set only when necessary (in interactive applications). + Some output may be provided even if flush is not set. + + Before the call of deflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming + more output, and updating avail_in or avail_out accordingly; avail_out + should never be zero before the call. The application can consume the + compressed output when it wants, for example when the output buffer is full + (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK + and with zero avail_out, it must be called again after making room in the + output buffer because there might be more output pending. + + Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to + decide how much data to accumualte before producing output, in order to + maximize compression. + + If the parameter flush is set to Z_SYNC_FLUSH, all pending output is + flushed to the output buffer and the output is aligned on a byte boundary, so + that the decompressor can get all input data available so far. (In particular + avail_in is zero after the call if enough output space has been provided + before the call.) Flushing may degrade compression for some compression + algorithms and so it should be used only when necessary. + + If flush is set to Z_FULL_FLUSH, all output is flushed as with + Z_SYNC_FLUSH, and the compression state is reset so that decompression can + restart from this point if previous compressed data has been damaged or if + random access is desired. Using Z_FULL_FLUSH too often can seriously degrade + compression. + + If deflate returns with avail_out == 0, this function must be called again + with the same value of the flush parameter and more output space (updated + avail_out), until the flush is complete (deflate returns with non-zero + avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that + avail_out is greater than six to avoid repeated flush markers due to + avail_out == 0 on return. + + If the parameter flush is set to Z_FINISH, pending input is processed, + pending output is flushed and deflate returns with Z_STREAM_END if there + was enough output space; if deflate returns with Z_OK, this function must be + called again with Z_FINISH and more output space (updated avail_out) but no + more input data, until it returns with Z_STREAM_END or an error. After + deflate has returned Z_STREAM_END, the only possible operations on the + stream are deflateReset or deflateEnd. + + Z_FINISH can be used immediately after deflateInit if all the compression + is to be done in a single step. In this case, avail_out must be at least + the value returned by deflateBound (see below). If deflate does not return + Z_STREAM_END, then it must be called again as described above. + + deflate() sets strm->adler to the adler32 checksum of all input read + so far (that is, total_in bytes). + + deflate() may update strm->data_type if it can make a good guess about + the input data type (Z_BINARY or Z_TEXT). In doubt, the data is considered + binary. This field is only for information purposes and does not affect + the compression algorithm in any manner. + + deflate() returns Z_OK if some progress has been made (more input + processed or more output produced), Z_STREAM_END if all input has been + consumed and all output has been produced (only when flush is set to + Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example + if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible + (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not + fatal, and deflate() can be called again with more input and more output + space to continue compressing. +*/ + + +ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any + pending output. + + deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the + stream state was inconsistent, Z_DATA_ERROR if the stream was freed + prematurely (some input or output was discarded). In the error case, + msg may be set but then points to a static string (which must not be + deallocated). +*/ + + +/* +ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); + + Initializes the internal stream state for decompression. The fields + next_in, avail_in, zalloc, zfree and opaque must be initialized before by + the caller. If next_in is not Z_NULL and avail_in is large enough (the exact + value depends on the compression method), inflateInit determines the + compression method from the zlib header and allocates all data structures + accordingly; otherwise the allocation will be deferred to the first call of + inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to + use default allocation functions. + + inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller. msg is set to null if there is no error + message. inflateInit does not perform any decompression apart from reading + the zlib header if present: this will be done by inflate(). (So next_in and + avail_in may be modified, but next_out and avail_out are unchanged.) +*/ + + +ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); +/* + inflate decompresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce + some output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. inflate performs one or both of the + following actions: + + - Decompress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in is updated and processing + will resume at this point for the next call of inflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. inflate() provides as much output as possible, until there + is no more input data or no more space in the output buffer (see below + about the flush parameter). + + Before the call of inflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming + more output, and updating the next_* and avail_* values accordingly. + The application can consume the uncompressed output when it wants, for + example when the output buffer is full (avail_out == 0), or after each + call of inflate(). If inflate returns Z_OK and with zero avail_out, it + must be called again after making room in the output buffer because there + might be more output pending. + + The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, + Z_FINISH, or Z_BLOCK. Z_SYNC_FLUSH requests that inflate() flush as much + output as possible to the output buffer. Z_BLOCK requests that inflate() stop + if and when it gets to the next deflate block boundary. When decoding the + zlib or gzip format, this will cause inflate() to return immediately after + the header and before the first block. When doing a raw inflate, inflate() + will go ahead and process the first block, and will return when it gets to + the end of that block, or when it runs out of data. + + The Z_BLOCK option assists in appending to or combining deflate streams. + Also to assist in this, on return inflate() will set strm->data_type to the + number of unused bits in the last byte taken from strm->next_in, plus 64 + if inflate() is currently decoding the last block in the deflate stream, + plus 128 if inflate() returned immediately after decoding an end-of-block + code or decoding the complete header up to just before the first byte of the + deflate stream. The end-of-block will not be indicated until all of the + uncompressed data from that block has been written to strm->next_out. The + number of unused bits may in general be greater than seven, except when + bit 7 of data_type is set, in which case the number of unused bits will be + less than eight. + + inflate() should normally be called until it returns Z_STREAM_END or an + error. However if all decompression is to be performed in a single step + (a single call of inflate), the parameter flush should be set to + Z_FINISH. In this case all pending input is processed and all pending + output is flushed; avail_out must be large enough to hold all the + uncompressed data. (The size of the uncompressed data may have been saved + by the compressor for this purpose.) The next operation on this stream must + be inflateEnd to deallocate the decompression state. The use of Z_FINISH + is never required, but can be used to inform inflate that a faster approach + may be used for the single inflate() call. + + In this implementation, inflate() always flushes as much output as + possible to the output buffer, and always uses the faster approach on the + first call. So the only effect of the flush parameter in this implementation + is on the return value of inflate(), as noted below, or when it returns early + because Z_BLOCK is used. + + If a preset dictionary is needed after this call (see inflateSetDictionary + below), inflate sets strm->adler to the adler32 checksum of the dictionary + chosen by the compressor and returns Z_NEED_DICT; otherwise it sets + strm->adler to the adler32 checksum of all output produced so far (that is, + total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described + below. At the end of the stream, inflate() checks that its computed adler32 + checksum is equal to that saved by the compressor and returns Z_STREAM_END + only if the checksum is correct. + + inflate() will decompress and check either zlib-wrapped or gzip-wrapped + deflate data. The header type is detected automatically. Any information + contained in the gzip header is not retained, so applications that need that + information should instead use raw inflate, see inflateInit2() below, or + inflateBack() and perform their own processing of the gzip header and + trailer. + + inflate() returns Z_OK if some progress has been made (more input processed + or more output produced), Z_STREAM_END if the end of the compressed data has + been reached and all uncompressed output has been produced, Z_NEED_DICT if a + preset dictionary is needed at this point, Z_DATA_ERROR if the input data was + corrupted (input stream not conforming to the zlib format or incorrect check + value), Z_STREAM_ERROR if the stream structure was inconsistent (for example + if next_in or next_out was NULL), Z_MEM_ERROR if there was not enough memory, + Z_BUF_ERROR if no progress is possible or if there was not enough room in the + output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and + inflate() can be called again with more input and more output space to + continue decompressing. If Z_DATA_ERROR is returned, the application may then + call inflateSync() to look for a good compression block if a partial recovery + of the data is desired. +*/ + + +ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any + pending output. + + inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state + was inconsistent. In the error case, msg may be set but then points to a + static string (which must not be deallocated). +*/ + + /* Advanced functions */ + +/* + The following functions are needed only in some special applications. +*/ + +/* +ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, + int level, + int method, + int windowBits, + int memLevel, + int strategy)); + + This is another version of deflateInit with more compression options. The + fields next_in, zalloc, zfree and opaque must be initialized before by + the caller. + + The method parameter is the compression method. It must be Z_DEFLATED in + this version of the library. + + The windowBits parameter is the base two logarithm of the window size + (the size of the history buffer). It should be in the range 8..15 for this + version of the library. Larger values of this parameter result in better + compression at the expense of memory usage. The default value is 15 if + deflateInit is used instead. + + windowBits can also be -8..-15 for raw deflate. In this case, -windowBits + determines the window size. deflate() will then generate raw deflate data + with no zlib header or trailer, and will not compute an adler32 check value. + + windowBits can also be greater than 15 for optional gzip encoding. Add + 16 to windowBits to write a simple gzip header and trailer around the + compressed data instead of a zlib wrapper. The gzip header will have no + file name, no extra data, no comment, no modification time (set to zero), + no header crc, and the operating system will be set to 255 (unknown). If a + gzip stream is being written, strm->adler is a crc32 instead of an adler32. + + The memLevel parameter specifies how much memory should be allocated + for the internal compression state. memLevel=1 uses minimum memory but + is slow and reduces compression ratio; memLevel=9 uses maximum memory + for optimal speed. The default value is 8. See zconf.h for total memory + usage as a function of windowBits and memLevel. + + The strategy parameter is used to tune the compression algorithm. Use the + value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a + filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no + string match), or Z_RLE to limit match distances to one (run-length + encoding). Filtered data consists mostly of small values with a somewhat + random distribution. In this case, the compression algorithm is tuned to + compress them better. The effect of Z_FILTERED is to force more Huffman + coding and less string matching; it is somewhat intermediate between + Z_DEFAULT and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as fast as + Z_HUFFMAN_ONLY, but give better compression for PNG image data. The strategy + parameter only affects the compression ratio but not the correctness of the + compressed output even if it is not set appropriately. Z_FIXED prevents the + use of dynamic Huffman codes, allowing for a simpler decoder for special + applications. + + deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid + method). msg is set to null if there is no error message. deflateInit2 does + not perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the compression dictionary from the given byte sequence + without producing any compressed output. This function must be called + immediately after deflateInit, deflateInit2 or deflateReset, before any + call of deflate. The compressor and decompressor must use exactly the same + dictionary (see inflateSetDictionary). + + The dictionary should consist of strings (byte sequences) that are likely + to be encountered later in the data to be compressed, with the most commonly + used strings preferably put towards the end of the dictionary. Using a + dictionary is most useful when the data to be compressed is short and can be + predicted with good accuracy; the data can then be compressed better than + with the default empty dictionary. + + Depending on the size of the compression data structures selected by + deflateInit or deflateInit2, a part of the dictionary may in effect be + discarded, for example if the dictionary is larger than the window size in + deflate or deflate2. Thus the strings most likely to be useful should be + put at the end of the dictionary, not at the front. In addition, the + current implementation of deflate will use at most the window size minus + 262 bytes of the provided dictionary. + + Upon return of this function, strm->adler is set to the adler32 value + of the dictionary; the decompressor may later use this value to determine + which dictionary has been used by the compressor. (The adler32 value + applies to the whole dictionary even if only a subset of the dictionary is + actually used by the compressor.) If a raw deflate was requested, then the + adler32 value is not computed and strm->adler is not set. + + deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a + parameter is invalid (such as NULL dictionary) or the stream state is + inconsistent (for example if deflate has already been called for this stream + or if the compression method is bsort). deflateSetDictionary does not + perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when several compression strategies will be + tried, for example when there are several ways of pre-processing the input + data with a filter. The streams that will be discarded should then be freed + by calling deflateEnd. Note that deflateCopy duplicates the internal + compression state which can be quite large, so this strategy is slow and + can consume lots of memory. + + deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); +/* + This function is equivalent to deflateEnd followed by deflateInit, + but does not free and reallocate all the internal compression state. + The stream will keep the same compression level and any other attributes + that may have been set by deflateInit2. + + deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being NULL). +*/ + +ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, + int level, + int strategy)); +/* + Dynamically update the compression level and compression strategy. The + interpretation of level and strategy is as in deflateInit2. This can be + used to switch between compression and straight copy of the input data, or + to switch to a different kind of input data requiring a different + strategy. If the compression level is changed, the input available so far + is compressed with the old level (and may be flushed); the new level will + take effect only at the next call of deflate(). + + Before the call of deflateParams, the stream state must be set as for + a call of deflate(), since the currently available input may have to + be compressed and flushed. In particular, strm->avail_out must be non-zero. + + deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source + stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR + if strm->avail_out was zero. +*/ + +ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm, + int good_length, + int max_lazy, + int nice_length, + int max_chain)); +/* + Fine tune deflate's internal compression parameters. This should only be + used by someone who understands the algorithm used by zlib's deflate for + searching for the best matching string, and even then only by the most + fanatic optimizer trying to squeeze out the last compressed bit for their + specific input data. Read the deflate.c source code for the meaning of the + max_lazy, good_length, nice_length, and max_chain parameters. + + deflateTune() can be called after deflateInit() or deflateInit2(), and + returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream. + */ + +ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, + uLong sourceLen)); +/* + deflateBound() returns an upper bound on the compressed size after + deflation of sourceLen bytes. It must be called after deflateInit() + or deflateInit2(). This would be used to allocate an output buffer + for deflation in a single pass, and so would be called before deflate(). +*/ + +ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, + int bits, + int value)); +/* + deflatePrime() inserts bits in the deflate output stream. The intent + is that this function is used to start off the deflate output with the + bits leftover from a previous deflate stream when appending to it. As such, + this function can only be used for raw deflate, and must be used before the + first deflate() call after a deflateInit2() or deflateReset(). bits must be + less than or equal to 16, and that many of the least significant bits of + value will be inserted in the output. + + deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, + gz_headerp head)); +/* + deflateSetHeader() provides gzip header information for when a gzip + stream is requested by deflateInit2(). deflateSetHeader() may be called + after deflateInit2() or deflateReset() and before the first call of + deflate(). The text, time, os, extra field, name, and comment information + in the provided gz_header structure are written to the gzip header (xflag is + ignored -- the extra flags are set according to the compression level). The + caller must assure that, if not Z_NULL, name and comment are terminated with + a zero byte, and that if extra is not Z_NULL, that extra_len bytes are + available there. If hcrc is true, a gzip header crc is included. Note that + the current versions of the command-line version of gzip (up through version + 1.3.x) do not support header crc's, and will report that it is a "multi-part + gzip file" and give up. + + If deflateSetHeader is not used, the default gzip header has text false, + the time set to zero, and os set to 255, with no extra, name, or comment + fields. The gzip header is returned to the default state by deflateReset(). + + deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, + int windowBits)); + + This is another version of inflateInit with an extra parameter. The + fields next_in, avail_in, zalloc, zfree and opaque must be initialized + before by the caller. + + The windowBits parameter is the base two logarithm of the maximum window + size (the size of the history buffer). It should be in the range 8..15 for + this version of the library. The default value is 15 if inflateInit is used + instead. windowBits must be greater than or equal to the windowBits value + provided to deflateInit2() while compressing, or it must be equal to 15 if + deflateInit2() was not used. If a compressed stream with a larger window + size is given as input, inflate() will return with the error code + Z_DATA_ERROR instead of trying to allocate a larger window. + + windowBits can also be -8..-15 for raw inflate. In this case, -windowBits + determines the window size. inflate() will then process raw deflate data, + not looking for a zlib or gzip header, not generating a check value, and not + looking for any check values for comparison at the end of the stream. This + is for use with other formats that use the deflate compressed data format + such as zip. Those formats provide their own check values. If a custom + format is developed using the raw deflate format for compressed data, it is + recommended that a check value such as an adler32 or a crc32 be applied to + the uncompressed data as is done in the zlib, gzip, and zip formats. For + most applications, the zlib format should be used as is. Note that comments + above on the use in deflateInit2() applies to the magnitude of windowBits. + + windowBits can also be greater than 15 for optional gzip decoding. Add + 32 to windowBits to enable zlib and gzip decoding with automatic header + detection, or add 16 to decode only the gzip format (the zlib format will + return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is + a crc32 instead of an adler32. + + inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if a parameter is invalid (such as a null strm). msg + is set to null if there is no error message. inflateInit2 does not perform + any decompression apart from reading the zlib header if present: this will + be done by inflate(). (So next_in and avail_in may be modified, but next_out + and avail_out are unchanged.) +*/ + +ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the decompression dictionary from the given uncompressed byte + sequence. This function must be called immediately after a call of inflate, + if that call returned Z_NEED_DICT. The dictionary chosen by the compressor + can be determined from the adler32 value returned by that call of inflate. + The compressor and decompressor must use exactly the same dictionary (see + deflateSetDictionary). For raw inflate, this function can be called + immediately after inflateInit2() or inflateReset() and before any call of + inflate() to set the dictionary. The application must insure that the + dictionary that was used for compression is provided. + + inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a + parameter is invalid (such as NULL dictionary) or the stream state is + inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the + expected one (incorrect adler32 value). inflateSetDictionary does not + perform any decompression: this will be done by subsequent calls of + inflate(). +*/ + +ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); +/* + Skips invalid compressed data until a full flush point (see above the + description of deflate with Z_FULL_FLUSH) can be found, or until all + available input is skipped. No output is provided. + + inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR + if no more input was provided, Z_DATA_ERROR if no flush point has been found, + or Z_STREAM_ERROR if the stream structure was inconsistent. In the success + case, the application may save the current current value of total_in which + indicates where valid compressed data was found. In the error case, the + application may repeatedly call inflateSync, providing more input each time, + until success or end of the input data. +*/ + +ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when randomly accessing a large stream. The + first pass through the stream can periodically record the inflate state, + allowing restarting inflate at those points when randomly accessing the + stream. + + inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); +/* + This function is equivalent to inflateEnd followed by inflateInit, + but does not free and reallocate all the internal decompression state. + The stream will keep attributes that may have been set by inflateInit2. + + inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being NULL). +*/ + +ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, + int bits, + int value)); +/* + This function inserts bits in the inflate input stream. The intent is + that this function is used to start inflating at a bit position in the + middle of a byte. The provided bits will be used before any bytes are used + from next_in. This function should only be used with raw inflate, and + should be used before the first inflate() call after inflateInit2() or + inflateReset(). bits must be less than or equal to 16, and that many of the + least significant bits of value will be inserted in the input. + + inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm, + gz_headerp head)); +/* + inflateGetHeader() requests that gzip header information be stored in the + provided gz_header structure. inflateGetHeader() may be called after + inflateInit2() or inflateReset(), and before the first call of inflate(). + As inflate() processes the gzip stream, head->done is zero until the header + is completed, at which time head->done is set to one. If a zlib stream is + being decoded, then head->done is set to -1 to indicate that there will be + no gzip header information forthcoming. Note that Z_BLOCK can be used to + force inflate() to return immediately after header processing is complete + and before any actual data is decompressed. + + The text, time, xflags, and os fields are filled in with the gzip header + contents. hcrc is set to true if there is a header CRC. (The header CRC + was valid if done is set to one.) If extra is not Z_NULL, then extra_max + contains the maximum number of bytes to write to extra. Once done is true, + extra_len contains the actual extra field length, and extra contains the + extra field, or that field truncated if extra_max is less than extra_len. + If name is not Z_NULL, then up to name_max characters are written there, + terminated with a zero unless the length is greater than name_max. If + comment is not Z_NULL, then up to comm_max characters are written there, + terminated with a zero unless the length is greater than comm_max. When + any of extra, name, or comment are not Z_NULL and the respective field is + not present in the header, then that field is set to Z_NULL to signal its + absence. This allows the use of deflateSetHeader() with the returned + structure to duplicate the header. However if those fields are set to + allocated memory, then the application will need to save those pointers + elsewhere so that they can be eventually freed. + + If inflateGetHeader is not used, then the header information is simply + discarded. The header is always checked for validity, including the header + CRC if present. inflateReset() will reset the process to discard the header + information. The application would need to call inflateGetHeader() again to + retrieve the header from the next gzip stream. + + inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits, + unsigned char FAR *window)); + + Initialize the internal stream state for decompression using inflateBack() + calls. The fields zalloc, zfree and opaque in strm must be initialized + before the call. If zalloc and zfree are Z_NULL, then the default library- + derived memory allocation routines are used. windowBits is the base two + logarithm of the window size, in the range 8..15. window is a caller + supplied buffer of that size. Except for special applications where it is + assured that deflate was used with small window sizes, windowBits must be 15 + and a 32K byte window must be supplied to be able to decompress general + deflate streams. + + See inflateBack() for the usage of these routines. + + inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of + the paramaters are invalid, Z_MEM_ERROR if the internal state could not + be allocated, or Z_VERSION_ERROR if the version of the library does not + match the version of the header file. +*/ + +typedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *)); +typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned)); + +ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, + in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc)); +/* + inflateBack() does a raw inflate with a single call using a call-back + interface for input and output. This is more efficient than inflate() for + file i/o applications in that it avoids copying between the output and the + sliding window by simply making the window itself the output buffer. This + function trusts the application to not change the output buffer passed by + the output function, at least until inflateBack() returns. + + inflateBackInit() must be called first to allocate the internal state + and to initialize the state with the user-provided window buffer. + inflateBack() may then be used multiple times to inflate a complete, raw + deflate stream with each call. inflateBackEnd() is then called to free + the allocated state. + + A raw deflate stream is one with no zlib or gzip header or trailer. + This routine would normally be used in a utility that reads zip or gzip + files and writes out uncompressed files. The utility would decode the + header and process the trailer on its own, hence this routine expects + only the raw deflate stream to decompress. This is different from the + normal behavior of inflate(), which expects either a zlib or gzip header and + trailer around the deflate stream. + + inflateBack() uses two subroutines supplied by the caller that are then + called by inflateBack() for input and output. inflateBack() calls those + routines until it reads a complete deflate stream and writes out all of the + uncompressed data, or until it encounters an error. The function's + parameters and return types are defined above in the in_func and out_func + typedefs. inflateBack() will call in(in_desc, &buf) which should return the + number of bytes of provided input, and a pointer to that input in buf. If + there is no input available, in() must return zero--buf is ignored in that + case--and inflateBack() will return a buffer error. inflateBack() will call + out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. out() + should return zero on success, or non-zero on failure. If out() returns + non-zero, inflateBack() will return with an error. Neither in() nor out() + are permitted to change the contents of the window provided to + inflateBackInit(), which is also the buffer that out() uses to write from. + The length written by out() will be at most the window size. Any non-zero + amount of input may be provided by in(). + + For convenience, inflateBack() can be provided input on the first call by + setting strm->next_in and strm->avail_in. If that input is exhausted, then + in() will be called. Therefore strm->next_in must be initialized before + calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called + immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in + must also be initialized, and then if strm->avail_in is not zero, input will + initially be taken from strm->next_in[0 .. strm->avail_in - 1]. + + The in_desc and out_desc parameters of inflateBack() is passed as the + first parameter of in() and out() respectively when they are called. These + descriptors can be optionally used to pass any information that the caller- + supplied in() and out() functions need to do their job. + + On return, inflateBack() will set strm->next_in and strm->avail_in to + pass back any unused input that was provided by the last in() call. The + return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR + if in() or out() returned an error, Z_DATA_ERROR if there was a format + error in the deflate stream (in which case strm->msg is set to indicate the + nature of the error), or Z_STREAM_ERROR if the stream was not properly + initialized. In the case of Z_BUF_ERROR, an input or output error can be + distinguished using strm->next_in which will be Z_NULL only if in() returned + an error. If strm->next is not Z_NULL, then the Z_BUF_ERROR was due to + out() returning non-zero. (in() will always be called before out(), so + strm->next_in is assured to be defined if out() returns non-zero.) Note + that inflateBack() cannot return Z_OK. +*/ + +ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm)); +/* + All memory allocated by inflateBackInit() is freed. + + inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream + state was inconsistent. +*/ + +ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); +/* Return flags indicating compile-time options. + + Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other: + 1.0: size of uInt + 3.2: size of uLong + 5.4: size of voidpf (pointer) + 7.6: size of z_off_t + + Compiler, assembler, and debug options: + 8: DEBUG + 9: ASMV or ASMINF -- use ASM code + 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention + 11: 0 (reserved) + + One-time table building (smaller code, but not thread-safe if true): + 12: BUILDFIXED -- build static block decoding tables when needed + 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed + 14,15: 0 (reserved) + + Library content (indicates missing functionality): + 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking + deflate code when not needed) + 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect + and decode gzip streams (to avoid linking crc code) + 18-19: 0 (reserved) + + Operation variations (changes in library functionality): + 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate + 21: FASTEST -- deflate algorithm with only one, lowest compression level + 22,23: 0 (reserved) + + The sprintf variant used by gzprintf (zero is best): + 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format + 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure! + 26: 0 = returns value, 1 = void -- 1 means inferred string length returned + + Remainder: + 27-31: 0 (reserved) + */ + + + /* utility functions */ + +/* + The following utility functions are implemented on top of the + basic stream-oriented functions. To simplify the interface, some + default options are assumed (compression level and memory usage, + standard memory allocation functions). The source code of these + utility functions can easily be modified if you need special options. +*/ + +ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Compresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total + size of the destination buffer, which must be at least the value returned + by compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed buffer. + This function can be used to compress a whole file at once if the + input file is mmap'ed. + compress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer. +*/ + +ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen, + int level)); +/* + Compresses the source buffer into the destination buffer. The level + parameter has the same meaning as in deflateInit. sourceLen is the byte + length of the source buffer. Upon entry, destLen is the total size of the + destination buffer, which must be at least the value returned by + compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed buffer. + + compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, + Z_STREAM_ERROR if the level parameter is invalid. +*/ + +ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen)); +/* + compressBound() returns an upper bound on the compressed size after + compress() or compress2() on sourceLen bytes. It would be used before + a compress() or compress2() call to allocate the destination buffer. +*/ + +ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Decompresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total + size of the destination buffer, which must be large enough to hold the + entire uncompressed data. (The size of the uncompressed data must have + been saved previously by the compressor and transmitted to the decompressor + by some mechanism outside the scope of this compression library.) + Upon exit, destLen is the actual size of the compressed buffer. + This function can be used to decompress a whole file at once if the + input file is mmap'ed. + + uncompress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. +*/ + + +typedef voidp gzFile; + +ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); +/* + Opens a gzip (.gz) file for reading or writing. The mode parameter + is as in fopen ("rb" or "wb") but can also include a compression level + ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for + Huffman only compression as in "wb1h", or 'R' for run-length encoding + as in "wb1R". (See the description of deflateInit2 for more information + about the strategy parameter.) + + gzopen can be used to read a file which is not in gzip format; in this + case gzread will directly read from the file without decompression. + + gzopen returns NULL if the file could not be opened or if there was + insufficient memory to allocate the (de)compression state; errno + can be checked to distinguish the two cases (if errno is zero, the + zlib error is Z_MEM_ERROR). */ + +ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); +/* + gzdopen() associates a gzFile with the file descriptor fd. File + descriptors are obtained from calls like open, dup, creat, pipe or + fileno (in the file has been previously opened with fopen). + The mode parameter is as in gzopen. + The next call of gzclose on the returned gzFile will also close the + file descriptor fd, just like fclose(fdopen(fd), mode) closes the file + descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode). + gzdopen returns NULL if there was insufficient memory to allocate + the (de)compression state. +*/ + +ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); +/* + Dynamically update the compression level or strategy. See the description + of deflateInit2 for the meaning of these parameters. + gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not + opened for writing. +*/ + +ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); +/* + Reads the given number of uncompressed bytes from the compressed file. + If the input file was not in gzip format, gzread copies the given number + of bytes into the buffer. + gzread returns the number of uncompressed bytes actually read (0 for + end of file, -1 for error). */ + +ZEXTERN int ZEXPORT gzwrite OF((gzFile file, + voidpc buf, unsigned len)); +/* + Writes the given number of uncompressed bytes into the compressed file. + gzwrite returns the number of uncompressed bytes actually written + (0 in case of error). +*/ + +ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...)); +/* + Converts, formats, and writes the args to the compressed file under + control of the format string, as in fprintf. gzprintf returns the number of + uncompressed bytes actually written (0 in case of error). The number of + uncompressed bytes written is limited to 4095. The caller should assure that + this limit is not exceeded. If it is exceeded, then gzprintf() will return + return an error (0) with nothing written. In this case, there may also be a + buffer overflow with unpredictable consequences, which is possible only if + zlib was compiled with the insecure functions sprintf() or vsprintf() + because the secure snprintf() or vsnprintf() functions were not available. +*/ + +ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); +/* + Writes the given null-terminated string to the compressed file, excluding + the terminating null character. + gzputs returns the number of characters written, or -1 in case of error. +*/ + +ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); +/* + Reads bytes from the compressed file until len-1 characters are read, or + a newline character is read and transferred to buf, or an end-of-file + condition is encountered. The string is then terminated with a null + character. + gzgets returns buf, or Z_NULL in case of error. +*/ + +ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); +/* + Writes c, converted to an unsigned char, into the compressed file. + gzputc returns the value that was written, or -1 in case of error. +*/ + +ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); +/* + Reads one byte from the compressed file. gzgetc returns this byte + or -1 in case of end of file or error. +*/ + +ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); +/* + Push one character back onto the stream to be read again later. + Only one character of push-back is allowed. gzungetc() returns the + character pushed, or -1 on failure. gzungetc() will fail if a + character has been pushed but not read yet, or if c is -1. The pushed + character will be discarded if the stream is repositioned with gzseek() + or gzrewind(). +*/ + +ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); +/* + Flushes all pending output into the compressed file. The parameter + flush is as in the deflate() function. The return value is the zlib + error number (see function gzerror below). gzflush returns Z_OK if + the flush parameter is Z_FINISH and all output could be flushed. + gzflush should be called only when strictly necessary because it can + degrade compression. +*/ + +ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, + z_off_t offset, int whence)); +/* + Sets the starting position for the next gzread or gzwrite on the + given compressed file. The offset represents a number of bytes in the + uncompressed data stream. The whence parameter is defined as in lseek(2); + the value SEEK_END is not supported. + If the file is opened for reading, this function is emulated but can be + extremely slow. If the file is opened for writing, only forward seeks are + supported; gzseek then compresses a sequence of zeroes up to the new + starting position. + + gzseek returns the resulting offset location as measured in bytes from + the beginning of the uncompressed stream, or -1 in case of error, in + particular if the file is opened for writing and the new starting position + would be before the current position. +*/ + +ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); +/* + Rewinds the given file. This function is supported only for reading. + + gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) +*/ + +ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); +/* + Returns the starting position for the next gzread or gzwrite on the + given compressed file. This position represents a number of bytes in the + uncompressed data stream. + + gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) +*/ + +ZEXTERN int ZEXPORT gzeof OF((gzFile file)); +/* + Returns 1 when EOF has previously been detected reading the given + input stream, otherwise zero. +*/ + +ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); +/* + Returns 1 if file is being read directly without decompression, otherwise + zero. +*/ + +ZEXTERN int ZEXPORT gzclose OF((gzFile file)); +/* + Flushes all pending output if necessary, closes the compressed file + and deallocates all the (de)compression state. The return value is the zlib + error number (see function gzerror below). +*/ + +ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); +/* + Returns the error message for the last error which occurred on the + given compressed file. errnum is set to zlib error number. If an + error occurred in the file system and not in the compression library, + errnum is set to Z_ERRNO and the application may consult errno + to get the exact error code. +*/ + +ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); +/* + Clears the error and end-of-file flags for file. This is analogous to the + clearerr() function in stdio. This is useful for continuing to read a gzip + file that is being written concurrently. +*/ + + /* checksum functions */ + +/* + These functions are not related to compression but are exported + anyway because they might be useful in applications using the + compression library. +*/ + +ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); +/* + Update a running Adler-32 checksum with the bytes buf[0..len-1] and + return the updated checksum. If buf is NULL, this function returns + the required initial value for the checksum. + An Adler-32 checksum is almost as reliable as a CRC32 but can be computed + much faster. Usage example: + + uLong adler = adler32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + adler = adler32(adler, buffer, length); + } + if (adler != original_adler) error(); +*/ + +ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, + z_off_t len2)); +/* + Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 + and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for + each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of + seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. +*/ + +ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); +/* + Update a running CRC-32 with the bytes buf[0..len-1] and return the + updated CRC-32. If buf is NULL, this function returns the required initial + value for the for the crc. Pre- and post-conditioning (one's complement) is + performed within this function so it shouldn't be done by the application. + Usage example: + + uLong crc = crc32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + crc = crc32(crc, buffer, length); + } + if (crc != original_crc) error(); +*/ + +ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2)); + +/* + Combine two CRC-32 check values into one. For two sequences of bytes, + seq1 and seq2 with lengths len1 and len2, CRC-32 check values were + calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 + check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and + len2. +*/ + + + /* various hacks, don't look :) */ + +/* deflateInit and inflateInit are macros to allow checking the zlib version + * and the compiler's view of z_stream: + */ +ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method, + int windowBits, int memLevel, + int strategy, const char *version, + int stream_size)); +ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits, + unsigned char FAR *window, + const char *version, + int stream_size)); +#define deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream)) +#define inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream)) +#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, sizeof(z_stream)) +#define inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) +#define inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), \ + ZLIB_VERSION, sizeof(z_stream)) + + +#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL) + struct internal_state {int dummy;}; /* hack for buggy compilers */ +#endif + +ZEXTERN const char * ZEXPORT zError OF((int)); +ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp z)); +ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void)); + +#ifdef __cplusplus +} +#endif + +#endif /* ZLIB_H */ diff --git a/snesreader/zlib/zlib.txt b/snesreader/zlib/zlib.txt new file mode 100644 index 00000000..80f71ae8 --- /dev/null +++ b/snesreader/zlib/zlib.txt @@ -0,0 +1,125 @@ +ZLIB DATA COMPRESSION LIBRARY + +zlib 1.2.3 is a general purpose data compression library. All the code is +thread safe. The data format used by the zlib library is described by RFCs +(Request for Comments) 1950 to 1952 in the files +http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) +and rfc1952.txt (gzip format). These documents are also available in other +formats from ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html + +All functions of the compression library are documented in the file zlib.h +(volunteer to write man pages welcome, contact zlib@gzip.org). A usage example +of the library is given in the file example.c which also tests that the library +is working correctly. Another example is given in the file minigzip.c. The +compression library itself is composed of all source files except example.c and +minigzip.c. + +To compile all files and run the test program, follow the instructions given at +the top of Makefile. In short "make test; make install" should work for most +machines. For Unix: "./configure; make test; make install". For MSDOS, use one +of the special makefiles such as Makefile.msc. For VMS, use make_vms.com. + +Questions about zlib should be sent to , or to Gilles Vollant + for the Windows DLL version. The zlib home page is +http://www.zlib.org or http://www.gzip.org/zlib/ Before reporting a problem, +please check this site to verify that you have the latest version of zlib; +otherwise get the latest version and check whether the problem still exists or +not. + +PLEASE read the zlib FAQ http://www.gzip.org/zlib/zlib_faq.html before asking +for help. + +Mark Nelson wrote an article about zlib for the Jan. 1997 +issue of Dr. Dobb's Journal; a copy of the article is available in +http://dogma.net/markn/articles/zlibtool/zlibtool.htm + +The changes made in version 1.2.3 are documented in the file ChangeLog. + +Unsupported third party contributions are provided in directory "contrib". + +A Java implementation of zlib is available in the Java Development Kit +http://java.sun.com/j2se/1.4.2/docs/api/java/util/zip/package-summary.html +See the zlib home page http://www.zlib.org for details. + +A Perl interface to zlib written by Paul Marquess is in the +CPAN (Comprehensive Perl Archive Network) sites +http://www.cpan.org/modules/by-module/Compress/ + +A Python interface to zlib written by A.M. Kuchling is +available in Python 1.5 and later versions, see +http://www.python.org/doc/lib/module-zlib.html + +A zlib binding for TCL written by Andreas Kupries is +availlable at http://www.oche.de/~akupries/soft/trf/trf_zip.html + +An experimental package to read and write files in .zip format, written on top +of zlib by Gilles Vollant , is available in the +contrib/minizip directory of zlib. + + +Notes for some targets: + +- For Windows DLL versions, please see win32/DLL_FAQ.txt + +- For 64-bit Irix, deflate.c must be compiled without any optimization. With + -O, one libpng test fails. The test works in 32 bit mode (with the -n32 + compiler flag). The compiler bug has been reported to SGI. + +- zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 it works + when compiled with cc. + +- On Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1 is + necessary to get gzprintf working correctly. This is done by configure. + +- zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with + other compilers. Use "make test" to check your compiler. + +- gzdopen is not supported on RISCOS, BEOS and by some Mac compilers. + +- For PalmOs, see http://palmzlib.sourceforge.net/ + +- When building a shared, i.e. dynamic library on Mac OS X, the library must be + installed before testing (do "make install" before "make test"), since the + library location is specified in the library. + + +Acknowledgments: + + The deflate format used by zlib was defined by Phil Katz. The deflate + and zlib specifications were written by L. Peter Deutsch. Thanks to all the + people who reported problems and suggested various improvements in zlib; + they are too numerous to cite here. + +Copyright notice: + + (C) 1995-2004 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +If you use the zlib library in a product, we would appreciate *not* +receiving lengthy legal documents to sign. The sources are provided +for free but without warranty of any kind. The library has been +entirely written by Jean-loup Gailly and Mark Adler; it does not +include third-party code. + +If you redistribute modified sources, we would appreciate that you include +in the file ChangeLog history information documenting your changes. Please +read the FAQ for more information on the distribution of modified source +versions. diff --git a/snesreader/zlib/zutil.c b/snesreader/zlib/zutil.c new file mode 100644 index 00000000..d55f5948 --- /dev/null +++ b/snesreader/zlib/zutil.c @@ -0,0 +1,318 @@ +/* zutil.c -- target dependent utility functions for the compression library + * Copyright (C) 1995-2005 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#include "zutil.h" + +#ifndef NO_DUMMY_DECL +struct internal_state {int dummy;}; /* for buggy compilers */ +#endif + +const char * const z_errmsg[10] = { +"need dictionary", /* Z_NEED_DICT 2 */ +"stream end", /* Z_STREAM_END 1 */ +"", /* Z_OK 0 */ +"file error", /* Z_ERRNO (-1) */ +"stream error", /* Z_STREAM_ERROR (-2) */ +"data error", /* Z_DATA_ERROR (-3) */ +"insufficient memory", /* Z_MEM_ERROR (-4) */ +"buffer error", /* Z_BUF_ERROR (-5) */ +"incompatible version",/* Z_VERSION_ERROR (-6) */ +""}; + + +const char * ZEXPORT zlibVersion() +{ + return ZLIB_VERSION; +} + +uLong ZEXPORT zlibCompileFlags() +{ + uLong flags; + + flags = 0; + switch (sizeof(uInt)) { + case 2: break; + case 4: flags += 1; break; + case 8: flags += 2; break; + default: flags += 3; + } + switch (sizeof(uLong)) { + case 2: break; + case 4: flags += 1 << 2; break; + case 8: flags += 2 << 2; break; + default: flags += 3 << 2; + } + switch (sizeof(voidpf)) { + case 2: break; + case 4: flags += 1 << 4; break; + case 8: flags += 2 << 4; break; + default: flags += 3 << 4; + } + switch (sizeof(z_off_t)) { + case 2: break; + case 4: flags += 1 << 6; break; + case 8: flags += 2 << 6; break; + default: flags += 3 << 6; + } +#ifdef DEBUG + flags += 1 << 8; +#endif +#if defined(ASMV) || defined(ASMINF) + flags += 1 << 9; +#endif +#ifdef ZLIB_WINAPI + flags += 1 << 10; +#endif +#ifdef BUILDFIXED + flags += 1 << 12; +#endif +#ifdef DYNAMIC_CRC_TABLE + flags += 1 << 13; +#endif +#ifdef NO_GZCOMPRESS + flags += 1L << 16; +#endif +#ifdef NO_GZIP + flags += 1L << 17; +#endif +#ifdef PKZIP_BUG_WORKAROUND + flags += 1L << 20; +#endif +#ifdef FASTEST + flags += 1L << 21; +#endif +#ifdef STDC +# ifdef NO_vsnprintf + flags += 1L << 25; +# ifdef HAS_vsprintf_void + flags += 1L << 26; +# endif +# else +# ifdef HAS_vsnprintf_void + flags += 1L << 26; +# endif +# endif +#else + flags += 1L << 24; +# ifdef NO_snprintf + flags += 1L << 25; +# ifdef HAS_sprintf_void + flags += 1L << 26; +# endif +# else +# ifdef HAS_snprintf_void + flags += 1L << 26; +# endif +# endif +#endif + return flags; +} + +#ifdef DEBUG + +# ifndef verbose +# define verbose 0 +# endif +int z_verbose = verbose; + +void z_error (m) + char *m; +{ + fprintf(stderr, "%s\n", m); + exit(1); +} +#endif + +/* exported to allow conversion of error code to string for compress() and + * uncompress() + */ +const char * ZEXPORT zError(err) + int err; +{ + return ERR_MSG(err); +} + +#if defined(_WIN32_WCE) + /* The Microsoft C Run-Time Library for Windows CE doesn't have + * errno. We define it as a global variable to simplify porting. + * Its value is always 0 and should not be used. + */ + int errno = 0; +#endif + +#ifndef HAVE_MEMCPY + +void zmemcpy(dest, source, len) + Bytef* dest; + const Bytef* source; + uInt len; +{ + if (len == 0) return; + do { + *dest++ = *source++; /* ??? to be unrolled */ + } while (--len != 0); +} + +int zmemcmp(s1, s2, len) + const Bytef* s1; + const Bytef* s2; + uInt len; +{ + uInt j; + + for (j = 0; j < len; j++) { + if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1; + } + return 0; +} + +void zmemzero(dest, len) + Bytef* dest; + uInt len; +{ + if (len == 0) return; + do { + *dest++ = 0; /* ??? to be unrolled */ + } while (--len != 0); +} +#endif + + +#ifdef SYS16BIT + +#ifdef __TURBOC__ +/* Turbo C in 16-bit mode */ + +# define MY_ZCALLOC + +/* Turbo C malloc() does not allow dynamic allocation of 64K bytes + * and farmalloc(64K) returns a pointer with an offset of 8, so we + * must fix the pointer. Warning: the pointer must be put back to its + * original form in order to free it, use zcfree(). + */ + +#define MAX_PTR 10 +/* 10*64K = 640K */ + +local int next_ptr = 0; + +typedef struct ptr_table_s { + voidpf org_ptr; + voidpf new_ptr; +} ptr_table; + +local ptr_table table[MAX_PTR]; +/* This table is used to remember the original form of pointers + * to large buffers (64K). Such pointers are normalized with a zero offset. + * Since MSDOS is not a preemptive multitasking OS, this table is not + * protected from concurrent access. This hack doesn't work anyway on + * a protected system like OS/2. Use Microsoft C instead. + */ + +voidpf zcalloc (voidpf opaque, unsigned items, unsigned size) +{ + voidpf buf = opaque; /* just to make some compilers happy */ + ulg bsize = (ulg)items*size; + + /* If we allocate less than 65520 bytes, we assume that farmalloc + * will return a usable pointer which doesn't have to be normalized. + */ + if (bsize < 65520L) { + buf = farmalloc(bsize); + if (*(ush*)&buf != 0) return buf; + } else { + buf = farmalloc(bsize + 16L); + } + if (buf == NULL || next_ptr >= MAX_PTR) return NULL; + table[next_ptr].org_ptr = buf; + + /* Normalize the pointer to seg:0 */ + *((ush*)&buf+1) += ((ush)((uch*)buf-0) + 15) >> 4; + *(ush*)&buf = 0; + table[next_ptr++].new_ptr = buf; + return buf; +} + +void zcfree (voidpf opaque, voidpf ptr) +{ + int n; + if (*(ush*)&ptr != 0) { /* object < 64K */ + farfree(ptr); + return; + } + /* Find the original pointer */ + for (n = 0; n < next_ptr; n++) { + if (ptr != table[n].new_ptr) continue; + + farfree(table[n].org_ptr); + while (++n < next_ptr) { + table[n-1] = table[n]; + } + next_ptr--; + return; + } + ptr = opaque; /* just to make some compilers happy */ + Assert(0, "zcfree: ptr not found"); +} + +#endif /* __TURBOC__ */ + + +#ifdef M_I86 +/* Microsoft C in 16-bit mode */ + +# define MY_ZCALLOC + +#if (!defined(_MSC_VER) || (_MSC_VER <= 600)) +# define _halloc halloc +# define _hfree hfree +#endif + +voidpf zcalloc (voidpf opaque, unsigned items, unsigned size) +{ + if (opaque) opaque = 0; /* to make compiler happy */ + return _halloc((long)items, size); +} + +void zcfree (voidpf opaque, voidpf ptr) +{ + if (opaque) opaque = 0; /* to make compiler happy */ + _hfree(ptr); +} + +#endif /* M_I86 */ + +#endif /* SYS16BIT */ + + +#ifndef MY_ZCALLOC /* Any system without a special alloc function */ + +#ifndef STDC +extern voidp malloc OF((uInt size)); +extern voidp calloc OF((uInt items, uInt size)); +extern void free OF((voidpf ptr)); +#endif + +voidpf zcalloc (opaque, items, size) + voidpf opaque; + unsigned items; + unsigned size; +{ + if (opaque) items += size - size; /* make compiler happy */ + return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) : + (voidpf)calloc(items, size); +} + +void zcfree (opaque, ptr) + voidpf opaque; + voidpf ptr; +{ + free(ptr); + if (opaque) return; /* make compiler happy */ +} + +#endif /* MY_ZCALLOC */ diff --git a/snesreader/zlib/zutil.h b/snesreader/zlib/zutil.h new file mode 100644 index 00000000..b7d5eff8 --- /dev/null +++ b/snesreader/zlib/zutil.h @@ -0,0 +1,269 @@ +/* zutil.h -- internal interface and configuration of the compression library + * Copyright (C) 1995-2005 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* @(#) $Id$ */ + +#ifndef ZUTIL_H +#define ZUTIL_H + +#define ZLIB_INTERNAL +#include "zlib.h" + +#ifdef STDC +# ifndef _WIN32_WCE +# include +# endif +# include +# include +#endif +#ifdef NO_ERRNO_H +# ifdef _WIN32_WCE + /* The Microsoft C Run-Time Library for Windows CE doesn't have + * errno. We define it as a global variable to simplify porting. + * Its value is always 0 and should not be used. We rename it to + * avoid conflict with other libraries that use the same workaround. + */ +# define errno z_errno +# endif + extern int errno; +#else +# ifndef _WIN32_WCE +# include +# endif +#endif + +#ifndef local +# define local static +#endif +/* compile with -Dlocal if your debugger can't find static symbols */ + +typedef unsigned char uch; +typedef uch FAR uchf; +typedef unsigned short ush; +typedef ush FAR ushf; +typedef unsigned long ulg; + +extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ +/* (size given to avoid silly warnings with Visual C++) */ + +#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)] + +#define ERR_RETURN(strm,err) \ + return (strm->msg = (char*)ERR_MSG(err), (err)) +/* To be used only when the state is known to be valid */ + + /* common constants */ + +#ifndef DEF_WBITS +# define DEF_WBITS MAX_WBITS +#endif +/* default windowBits for decompression. MAX_WBITS is for compression only */ + +#if MAX_MEM_LEVEL >= 8 +# define DEF_MEM_LEVEL 8 +#else +# define DEF_MEM_LEVEL MAX_MEM_LEVEL +#endif +/* default memLevel */ + +#define STORED_BLOCK 0 +#define STATIC_TREES 1 +#define DYN_TREES 2 +/* The three kinds of block type */ + +#define MIN_MATCH 3 +#define MAX_MATCH 258 +/* The minimum and maximum match lengths */ + +#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */ + + /* target dependencies */ + +#if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32)) +# define OS_CODE 0x00 +# if defined(__TURBOC__) || defined(__BORLANDC__) +# if(__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__)) + /* Allow compilation with ANSI keywords only enabled */ + void _Cdecl farfree( void *block ); + void *_Cdecl farmalloc( unsigned long nbytes ); +# else +# include +# endif +# else /* MSC or DJGPP */ +# include +# endif +#endif + +#ifdef AMIGA +# define OS_CODE 0x01 +#endif + +#if defined(VAXC) || defined(VMS) +# define OS_CODE 0x02 +# define F_OPEN(name, mode) \ + fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512") +#endif + +#if defined(ATARI) || defined(atarist) +# define OS_CODE 0x05 +#endif + +#ifdef OS2 +# define OS_CODE 0x06 +# ifdef M_I86 + #include +# endif +#endif + +#if defined(MACOS) || defined(TARGET_OS_MAC) +# define OS_CODE 0x07 +# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os +# include /* for fdopen */ +# else +# ifndef fdopen +# define fdopen(fd,mode) NULL /* No fdopen() */ +# endif +# endif +#endif + +#ifdef TOPS20 +# define OS_CODE 0x0a +#endif + +#ifdef WIN32 +# ifndef __CYGWIN__ /* Cygwin is Unix, not Win32 */ +# define OS_CODE 0x0b +# endif +#endif + +#ifdef __50SERIES /* Prime/PRIMOS */ +# define OS_CODE 0x0f +#endif + +#if defined(_BEOS_) || defined(RISCOS) +# define fdopen(fd,mode) NULL /* No fdopen() */ +#endif + +#if (defined(_MSC_VER) && (_MSC_VER > 600)) +# if defined(_WIN32_WCE) +# define fdopen(fd,mode) NULL /* No fdopen() */ +# ifndef _PTRDIFF_T_DEFINED + typedef int ptrdiff_t; +# define _PTRDIFF_T_DEFINED +# endif +# else +# define fdopen(fd,type) _fdopen(fd,type) +# endif +#endif + + /* common defaults */ + +#ifndef OS_CODE +# define OS_CODE 0x03 /* assume Unix */ +#endif + +#ifndef F_OPEN +# define F_OPEN(name, mode) fopen((name), (mode)) +#endif + + /* functions */ + +#if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550) +# ifndef HAVE_VSNPRINTF +# define HAVE_VSNPRINTF +# endif +#endif +#if defined(__CYGWIN__) +# ifndef HAVE_VSNPRINTF +# define HAVE_VSNPRINTF +# endif +#endif +#ifndef HAVE_VSNPRINTF +# ifdef MSDOS + /* vsnprintf may exist on some MS-DOS compilers (DJGPP?), + but for now we just assume it doesn't. */ +# define NO_vsnprintf +# endif +# ifdef __TURBOC__ +# define NO_vsnprintf +# endif +# ifdef WIN32 + /* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */ +# if !defined(vsnprintf) && !defined(NO_vsnprintf) +# define vsnprintf _vsnprintf +# endif +# endif +# ifdef __SASC +# define NO_vsnprintf +# endif +#endif +#ifdef VMS +# define NO_vsnprintf +#endif + +#if defined(pyr) +# define NO_MEMCPY +#endif +#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__) + /* Use our own functions for small and medium model with MSC <= 5.0. + * You may have to use the same strategy for Borland C (untested). + * The __SC__ check is for Symantec. + */ +# define NO_MEMCPY +#endif +#if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY) +# define HAVE_MEMCPY +#endif +#ifdef HAVE_MEMCPY +# ifdef SMALL_MEDIUM /* MSDOS small or medium model */ +# define zmemcpy _fmemcpy +# define zmemcmp _fmemcmp +# define zmemzero(dest, len) _fmemset(dest, 0, len) +# else +# define zmemcpy memcpy +# define zmemcmp memcmp +# define zmemzero(dest, len) memset(dest, 0, len) +# endif +#else + extern void zmemcpy OF((Bytef* dest, const Bytef* source, uInt len)); + extern int zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len)); + extern void zmemzero OF((Bytef* dest, uInt len)); +#endif + +/* Diagnostic functions */ +#ifdef DEBUG +# include + extern int z_verbose; + extern void z_error OF((char *m)); +# define Assert(cond,msg) {if(!(cond)) z_error(msg);} +# define Trace(x) {if (z_verbose>=0) fprintf x ;} +# define Tracev(x) {if (z_verbose>0) fprintf x ;} +# define Tracevv(x) {if (z_verbose>1) fprintf x ;} +# define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;} +# define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;} +#else +# define Assert(cond,msg) +# define Trace(x) +# define Tracev(x) +# define Tracevv(x) +# define Tracec(c,x) +# define Tracecv(c,x) +#endif + + +voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size)); +void zcfree OF((voidpf opaque, voidpf ptr)); + +#define ZALLOC(strm, items, size) \ + (*((strm)->zalloc))((strm)->opaque, (items), (size)) +#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr)) +#define TRY_FREE(s, p) {if (p) ZFREE(s, p);} + +#endif /* ZUTIL_H */ diff --git a/src/Makefile b/src/Makefile index feb11718..684edf74 100644 --- a/src/Makefile +++ b/src/Makefile @@ -78,7 +78,7 @@ link += $(call ifhas,input.rawinput,$(ruby),-ldinput8 -ldxguid) objects := libco ruby objects += system cartridge cheat -objects += memory smemory cpu cpucore scpu smp smpcore ssmp sdsp ppu bppu +objects += memory smemory cpu cpucore scpu smp smpcore ssmp dsp sdsp ppu bppu objects += supergameboy superfx sa1 objects += bsx srtc sdd1 spc7110 cx4 dsp1 dsp2 dsp3 dsp4 obc1 st010 st011 st018 objects += 21fx @@ -147,6 +147,7 @@ obj/ssmp.o : smp/ssmp/ssmp.cpp $(call rwildcard,smp/ssmp/) ### dsp ### ########### +obj/dsp.o: dsp/dsp.cpp dsp/* obj/adsp.o: dsp/adsp/adsp.cpp dsp/adsp/* obj/sdsp.o: dsp/sdsp/sdsp.cpp dsp/sdsp/* diff --git a/src/base.hpp b/src/base.hpp index 17bc404a..e01e51f3 100644 --- a/src/base.hpp +++ b/src/base.hpp @@ -1,4 +1,4 @@ -static const char bsnesVersion[] = "0.059"; +static const char bsnesVersion[] = "059.02"; static const char bsnesTitle[] = "bsnes"; static const unsigned bsnesSerializerVersion = 4; diff --git a/src/data/icons-16x16/go-up.png b/src/data/icons-16x16/go-up.png new file mode 100644 index 0000000000000000000000000000000000000000..fa9a7d71b5615dde4c5f702f95df533adadd56e0 GIT binary patch literal 652 zcmV;70(1R|P)5 zlTT<9K@`TnH@h?0jfHw>O#jh>1nt2m6SAzrkW<%*%=Q}tRboP9pC%r$9&(LA+0sq)ybQD9srhR zz3Fxu)^6aqJl)?FN%nOeOgb)4?+M_zJQ@)DvRBSb2FFH|!GH*69hXP{3*flC1BAti zbJNzAm&ca3iTKDR3xq|-Y2`eKx?tij|4I5$vH1yqf%5H^Fb8J54jK)5$VM-C5%i8b<|k&Kxh=#FG>Ox&>r z4?sb}hlkg>1-vahgJcyDBP0eg&{{(&pkA-x@zeQAv9vj35<}`!ZpEItce&w-qk8xH z6RRw9@QrP7!N5#{!3lE@ZdYYZTfgiFi6Lb!&3aDLCbZTHrTP~zgJ5t59%w*hO + +#define DSP_CPP +namespace SNES { + +#if defined(DEBUGGER) + #include "dsp-debugger.cpp" +#endif + +} diff --git a/src/dsp/dsp.hpp b/src/dsp/dsp.hpp index ae950952..c5d37040 100644 --- a/src/dsp/dsp.hpp +++ b/src/dsp/dsp.hpp @@ -1,3 +1,7 @@ +#if defined(DEBUGGER) + #include "dsp-debugger.hpp" +#endif + class DSP { public: virtual void enter() = 0; diff --git a/src/dsp/sdsp/debugger/debugger.cpp b/src/dsp/sdsp/debugger/debugger.cpp index 1debefa0..d40f73aa 100644 --- a/src/dsp/sdsp/debugger/debugger.cpp +++ b/src/dsp/sdsp/debugger/debugger.cpp @@ -1,3 +1,36 @@ #ifdef SDSP_CPP +//=========== +//DSPDebugger +//=========== + +unsigned sDSPDebugger::main_volume_left() { return state.regs[0x0c]; } +unsigned sDSPDebugger::main_volume_right() { return state.regs[0x1c]; } +unsigned sDSPDebugger::echo_volume_left() { return state.regs[0x2c]; } +unsigned sDSPDebugger::echo_volume_right() { return state.regs[0x3c]; } +unsigned sDSPDebugger::key_on() { return state.regs[0x4c]; } +unsigned sDSPDebugger::key_off() { return state.regs[0x5c]; } +bool sDSPDebugger::flag_reset() { return state.regs[0x6c] & 0x80; } +bool sDSPDebugger::flag_mute() { return state.regs[0x6c] & 0x40; } +bool sDSPDebugger::flag_echo_disable() { return state.regs[0x6c] & 0x20; } +unsigned sDSPDebugger::flag_noise_clock() { return state.regs[0x6c] & 0x1f; } +unsigned sDSPDebugger::source_end_block() { return state.regs[0x7c]; } +unsigned sDSPDebugger::echo_feedback() { return state.regs[0x0d]; } +unsigned sDSPDebugger::pitch_modulation_enable() { return state.regs[0x2d]; } +unsigned sDSPDebugger::noise_enable() { return state.regs[0x3d]; } +unsigned sDSPDebugger::echo_enable() { return state.regs[0x4d]; } +unsigned sDSPDebugger::source_directory() { return state.regs[0x5d]; } +unsigned sDSPDebugger::echo_start_address() { return state.regs[0x6d]; } +unsigned sDSPDebugger::echo_directory() { return state.regs[0x7d]; } +unsigned sDSPDebugger::echo_filter_coefficient(unsigned n) { return state.regs[(n << 4) + 0x0f]; } +unsigned sDSPDebugger::voice_volume_left(unsigned n) { return state.regs[(n << 4) + 0x00]; } +unsigned sDSPDebugger::voice_volume_right(unsigned n) { return state.regs[(n << 4) + 0x01]; } +unsigned sDSPDebugger::voice_pitch_height(unsigned n) { return state.regs[(n << 4) + 0x02] + (state.regs[(n << 4) + 0x03] << 8); } +unsigned sDSPDebugger::voice_source_number(unsigned n) { return state.regs[(n << 4) + 0x04]; } +unsigned sDSPDebugger::voice_adsr1(unsigned n) { return state.regs[(n << 4) + 0x05]; } +unsigned sDSPDebugger::voice_adsr2(unsigned n) { return state.regs[(n << 4) + 0x06]; } +unsigned sDSPDebugger::voice_gain(unsigned n) { return state.regs[(n << 4) + 0x07]; } +unsigned sDSPDebugger::voice_envx(unsigned n) { return state.regs[(n << 4) + 0x08]; } +unsigned sDSPDebugger::voice_outx(unsigned n) { return state.regs[(n << 4) + 0x09]; } + #endif diff --git a/src/dsp/sdsp/debugger/debugger.hpp b/src/dsp/sdsp/debugger/debugger.hpp index 5f152b4e..5f8d6110 100644 --- a/src/dsp/sdsp/debugger/debugger.hpp +++ b/src/dsp/sdsp/debugger/debugger.hpp @@ -1,3 +1,35 @@ -class sDSPDebugger : public sDSP { +class sDSPDebugger : public sDSP, public DSPDebugger { public: + //=========== + //DSPDebugger + //=========== + + unsigned main_volume_left(); + unsigned main_volume_right(); + unsigned echo_volume_left(); + unsigned echo_volume_right(); + unsigned key_on(); + unsigned key_off(); + bool flag_reset(); + bool flag_mute(); + bool flag_echo_disable(); + unsigned flag_noise_clock(); + unsigned source_end_block(); + unsigned echo_feedback(); + unsigned pitch_modulation_enable(); + unsigned noise_enable(); + unsigned echo_enable(); + unsigned source_directory(); + unsigned echo_start_address(); + unsigned echo_directory(); + unsigned echo_filter_coefficient(unsigned); + unsigned voice_volume_left(unsigned); + unsigned voice_volume_right(unsigned); + unsigned voice_pitch_height(unsigned); + unsigned voice_source_number(unsigned); + unsigned voice_adsr1(unsigned); + unsigned voice_adsr2(unsigned); + unsigned voice_gain(unsigned); + unsigned voice_envx(unsigned); + unsigned voice_outx(unsigned); }; diff --git a/src/dsp/sdsp/sdsp.hpp b/src/dsp/sdsp/sdsp.hpp index f9b17f0c..252dabc0 100644 --- a/src/dsp/sdsp/sdsp.hpp +++ b/src/dsp/sdsp/sdsp.hpp @@ -12,7 +12,7 @@ public: sDSP(); ~sDSP(); -private: +protected: //DSP_STATE_MACHINE variable unsigned phase_index; diff --git a/src/ppu/ppu.cpp b/src/ppu/ppu.cpp index c327601e..9790628d 100644 --- a/src/ppu/ppu.cpp +++ b/src/ppu/ppu.cpp @@ -53,4 +53,4 @@ PPU::~PPU() { delete[] output; } -}; +} diff --git a/src/smp/smp-debugger.cpp b/src/smp/smp-debugger.cpp new file mode 100644 index 00000000..8ba9f7dc --- /dev/null +++ b/src/smp/smp-debugger.cpp @@ -0,0 +1,23 @@ +#ifdef SMP_CPP + +bool SMPDebugger::property(unsigned id, string &name, string &value) { + unsigned n = 0; + + //$00f0 + if(id == n++) { name = "$00f0"; value = ""; return true; } + if(id == n++) { name = "Clock Speed"; value = clock_speed(); return true; } + if(id == n++) { name = "MMIO Disable"; value = mmio_disable(); return true; } + if(id == n++) { name = "RAM Writable"; value = ram_writable(); return true; } + + //$00f1 + if(id == n++) { name = "$00f1"; value = ""; return true; } + if(id == n++) { name = "IPLROM Enable"; value = iplrom_enable(); return true; } + + //$00f2 + if(id == n++) { name = "$00f2"; value = ""; return true; } + if(id == n++) { name = "DSP Address"; value = string::printf("0x%.2x", dsp_address()); return true; } + + return false; +} + +#endif diff --git a/src/smp/smp-debugger.hpp b/src/smp/smp-debugger.hpp new file mode 100644 index 00000000..f6c6c047 --- /dev/null +++ b/src/smp/smp-debugger.hpp @@ -0,0 +1,14 @@ +struct SMPDebugger : ChipDebugger { + bool property(unsigned id, string &name, string &value); + + //$00f0 + virtual unsigned clock_speed() { return 0; } + virtual bool mmio_disable() { return 0; } + virtual bool ram_writable() { return 0; } + + //$00f1 + virtual bool iplrom_enable() { return 0; } + + //$00f2 + virtual unsigned dsp_address() { return 0; } +}; diff --git a/src/smp/smp.cpp b/src/smp/smp.cpp index a7460e24..815b2a40 100644 --- a/src/smp/smp.cpp +++ b/src/smp/smp.cpp @@ -3,6 +3,10 @@ #define SMP_CPP namespace SNES { +#if defined(DEBUGGER) + #include "smp-debugger.cpp" +#endif + //this is the IPLROM for the S-SMP coprocessor. //the S-SMP does not allow writing to the IPLROM. //all writes are instead mapped to the extended diff --git a/src/smp/smp.hpp b/src/smp/smp.hpp index 8622d6c2..5d2223bf 100644 --- a/src/smp/smp.hpp +++ b/src/smp/smp.hpp @@ -1,3 +1,7 @@ +#if defined(DEBUGGER) + #include "smp-debugger.hpp" +#endif + class SMP { public: virtual void enter() = 0; diff --git a/src/smp/ssmp/debugger/debugger.cpp b/src/smp/ssmp/debugger/debugger.cpp index 6db906cb..74f03a5f 100644 --- a/src/smp/ssmp/debugger/debugger.cpp +++ b/src/smp/ssmp/debugger/debugger.cpp @@ -41,4 +41,19 @@ sSMPDebugger::~sSMPDebugger() { delete[] usage; } +//=========== +//SMPDebugger +//=========== + +//$00f0 +unsigned sSMPDebugger::clock_speed() { return status.clock_speed; } +bool sSMPDebugger::mmio_disable() { return status.mmio_disabled; } +bool sSMPDebugger::ram_writable() { return status.ram_writable; } + +//$00f1 +bool sSMPDebugger::iplrom_enable() { return status.iplrom_enabled; } + +//$00f2 +unsigned sSMPDebugger::dsp_address() { return status.dsp_addr; } + #endif diff --git a/src/smp/ssmp/debugger/debugger.hpp b/src/smp/ssmp/debugger/debugger.hpp index b67be979..4453767a 100644 --- a/src/smp/ssmp/debugger/debugger.hpp +++ b/src/smp/ssmp/debugger/debugger.hpp @@ -1,4 +1,4 @@ -class sSMPDebugger : public sSMP { +class sSMPDebugger : public sSMP, public SMPDebugger { public: function step_event; @@ -16,4 +16,19 @@ public: sSMPDebugger(); ~sSMPDebugger(); + + //=========== + //SMPDebugger + //=========== + + //$00f0 + unsigned clock_speed(); + bool mmio_disable(); + bool ram_writable(); + + //$00f1 + bool iplrom_enable(); + + //$00f2 + unsigned dsp_address(); }; diff --git a/src/smp/ssmp/ssmp.hpp b/src/smp/ssmp/ssmp.hpp index 1a83c1b6..b8955530 100644 --- a/src/smp/ssmp/ssmp.hpp +++ b/src/smp/ssmp/ssmp.hpp @@ -7,7 +7,6 @@ public: #include "timing/timing.hpp" struct { - uint8 opcode; bool in_opcode; diff --git a/src/ui_qt/base/diskbrowser.cpp b/src/ui_qt/base/diskbrowser.cpp index f1020160..6222f076 100644 --- a/src/ui_qt/base/diskbrowser.cpp +++ b/src/ui_qt/base/diskbrowser.cpp @@ -137,6 +137,7 @@ void DiskBrowser::chooseFolder(const function &callback_, string browseMode = Folder; hide(); + newFolder->show(); group->hide(); ok->setText("Choose"); setWindowTitle(string() << title); @@ -151,6 +152,7 @@ void DiskBrowser::chooseFile(const function &callback_, string &c browseMode = File; hide(); + newFolder->hide(); group->hide(); ok->setText("Choose"); setWindowTitle(string() << title); @@ -164,6 +166,7 @@ void DiskBrowser::loadCartridge() { browseMode = Cartridge; hide(); + newFolder->hide(); group->setVisible(config().diskBrowser.showPanel); ok->setText("Load"); setWindowTitle("Load Cartridge"); @@ -184,6 +187,7 @@ void DiskBrowser::loadBaseCartridge() { browseMode = BaseCartridge; hide(); + newFolder->hide(); group->setVisible(config().diskBrowser.showPanel); ok->setText("Load"); setWindowTitle("Load Base Cartridge"); @@ -200,6 +204,7 @@ void DiskBrowser::loadBsxCartridge() { browseMode = BsxCartridge; hide(); + newFolder->hide(); group->setVisible(config().diskBrowser.showPanel); ok->setText("Load"); setWindowTitle("Load BS-X Cartridge"); @@ -216,6 +221,7 @@ void DiskBrowser::loadSufamiTurboCartridge1() { browseMode = SufamiTurboCartridge1; hide(); + newFolder->hide(); group->setVisible(config().diskBrowser.showPanel); ok->setText("Load"); setWindowTitle("Load Slot-A Sufami Turbo Cartridge"); @@ -232,6 +238,7 @@ void DiskBrowser::loadSufamiTurboCartridge2() { browseMode = SufamiTurboCartridge2; hide(); + newFolder->hide(); group->setVisible(config().diskBrowser.showPanel); ok->setText("Load"); setWindowTitle("Load Slot-B Sufami Turbo Cartridge"); @@ -248,6 +255,7 @@ void DiskBrowser::loadSuperGameBoyCartridge() { browseMode = SuperGameBoyCartridge; hide(); + newFolder->hide(); group->setVisible(config().diskBrowser.showPanel); ok->setText("Load"); setWindowTitle("Load Super Game Boy Cartridge"); @@ -518,6 +526,11 @@ DiskBrowser::DiskBrowser() : QbWindow(config().geometry.diskBrowser) { newFolder->setIcon(QIcon(":/16x16/folder-new.png")); pathLayout->addWidget(newFolder); + upFolder = new QPushButton; + upFolder->setIconSize(QSize(16, 16)); + upFolder->setIcon(QIcon(":/16x16/go-up.png")); + pathLayout->addWidget(upFolder); + view = new DiskBrowserView; view->setIconSize(QSize(16, 16)); browseLayout->addWidget(view); @@ -590,6 +603,7 @@ DiskBrowser::DiskBrowser() : QbWindow(config().geometry.diskBrowser) { folderCreator = new FolderCreator; connect(newFolder, SIGNAL(released()), folderCreator, SLOT(show())); + connect(upFolder, SIGNAL(released()), this, SLOT(cdUp())); connect(view, SIGNAL(cdUp()), this, SLOT(cdUp())); connect(view, SIGNAL(activated(const QModelIndex&)), this, SLOT(activateItem(const QModelIndex&))); connect(view, SIGNAL(changed(const QModelIndex&)), this, SLOT(changeItem(const QModelIndex&))); diff --git a/src/ui_qt/base/diskbrowser.moc.hpp b/src/ui_qt/base/diskbrowser.moc.hpp index a5dbefb4..8c9cdaf3 100644 --- a/src/ui_qt/base/diskbrowser.moc.hpp +++ b/src/ui_qt/base/diskbrowser.moc.hpp @@ -48,6 +48,7 @@ public: QHBoxLayout *pathLayout; QComboBox *path; QPushButton *newFolder; + QPushButton *upFolder; DiskBrowserView *view; QVBoxLayout *panelLayout; QGroupBox *group; diff --git a/src/ui_qt/base/main.cpp b/src/ui_qt/base/main.cpp index 7864b1d2..7e2360b8 100644 --- a/src/ui_qt/base/main.cpp +++ b/src/ui_qt/base/main.cpp @@ -166,8 +166,14 @@ MainWindow::MainWindow() : QbWindow(config().geometry.mainWindow) { tools->addSeparator(); - tools_dialog = tools->addAction("&Tools Dialog ..."); - tools_dialog->setIcon(QIcon(":/16x16/preferences-desktop.png")); + tools_cheatEditor = tools->addAction("Cheat &Editor ..."); + tools_cheatEditor->setIcon(QIcon(":/16x16/accessories-text-editor.png")); + + tools_cheatFinder = tools->addAction("Cheat &Finder ..."); + tools_cheatFinder->setIcon(QIcon(":/16x16/system-search.png")); + + tools_stateManager = tools->addAction("&State Manager ..."); + tools_stateManager->setIcon(QIcon(":/16x16/system-file-manager.png")); tools_debugger = tools->addAction("&Debugger ..."); tools_debugger->setIcon(QIcon(":/16x16/utilities-terminal.png")); @@ -283,8 +289,10 @@ MainWindow::MainWindow() : QbWindow(config().geometry.mainWindow) { connect(tools_movies_recordFromPowerOn, SIGNAL(triggered()), this, SLOT(recordMovieFromPowerOn())); connect(tools_movies_recordFromHere, SIGNAL(triggered()), this, SLOT(recordMovieFromHere())); connect(tools_captureScreenshot, SIGNAL(triggered()), this, SLOT(saveScreenshot())); + connect(tools_cheatEditor, SIGNAL(triggered()), this, SLOT(showCheatEditor())); + connect(tools_cheatFinder, SIGNAL(triggered()), this, SLOT(showCheatFinder())); + connect(tools_stateManager, SIGNAL(triggered()), this, SLOT(showStateManager())); connect(tools_debugger, SIGNAL(triggered()), this, SLOT(showDebugger())); - connect(tools_dialog, SIGNAL(triggered()), this, SLOT(showToolsDialog())); connect(help_documentation, SIGNAL(triggered()), this, SLOT(showDocumentation())); connect(help_license, SIGNAL(triggered()), this, SLOT(showLicense())); connect(help_about, SIGNAL(triggered()), this, SLOT(showAbout())); @@ -549,14 +557,16 @@ void MainWindow::saveScreenshot() { interface.saveScreenshot = true; } +void MainWindow::showCheatEditor() { toolsWindow->tab->setCurrentIndex(0); toolsWindow->show(); } +void MainWindow::showCheatFinder() { toolsWindow->tab->setCurrentIndex(1); toolsWindow->show(); } +void MainWindow::showStateManager() { toolsWindow->tab->setCurrentIndex(2); toolsWindow->show(); } + void MainWindow::showDebugger() { #if defined(DEBUGGER) debugger->show(); #endif } -void MainWindow::showToolsDialog() { toolsWindow->show(); } - void MainWindow::showDocumentation() { QFile file(":/documentation.html"); if(file.open(QIODevice::ReadOnly | QIODevice::Text)) { diff --git a/src/ui_qt/base/main.moc.hpp b/src/ui_qt/base/main.moc.hpp index 2a9441af..2f7a154c 100644 --- a/src/ui_qt/base/main.moc.hpp +++ b/src/ui_qt/base/main.moc.hpp @@ -77,7 +77,9 @@ public: QAction *tools_movies_recordFromPowerOn; QAction *tools_movies_recordFromHere; QAction *tools_captureScreenshot; - QAction *tools_dialog; + QAction *tools_cheatEditor; + QAction *tools_cheatFinder; + QAction *tools_stateManager; QAction *tools_debugger; QMenu *help; QAction *help_documentation; @@ -141,8 +143,10 @@ public slots: void recordMovieFromPowerOn(); void recordMovieFromHere(); void saveScreenshot(); + void showCheatEditor(); + void showCheatFinder(); + void showStateManager(); void showDebugger(); - void showToolsDialog(); void showDocumentation(); void showLicense(); void showAbout(); diff --git a/src/ui_qt/cartridge/cartridge.cpp b/src/ui_qt/cartridge/cartridge.cpp index 227effce..bb560a41 100644 --- a/src/ui_qt/cartridge/cartridge.cpp +++ b/src/ui_qt/cartridge/cartridge.cpp @@ -220,7 +220,7 @@ bool Cartridge::loadCartridge(string &filename, SNES::MappedRAM &memory) { bool apply = false; if(result == ups::ok) apply = true; - if(config().file.bypass_patch_crc32) { + if(config().file.bypassPatchCrc32) { if(result == ups::input_crc32_invalid ) apply = true; if(result == ups::output_crc32_invalid) apply = true; } diff --git a/src/ui_qt/config.cpp b/src/ui_qt/config.cpp index c0b09e19..6eb669cf 100644 --- a/src/ui_qt/config.cpp +++ b/src/ui_qt/config.cpp @@ -50,13 +50,12 @@ Configuration::Configuration() { attach(system.speedFast = 150, "system.speedFast"); attach(system.speedFastest = 200, "system.speedFastest"); attach(system.autoSaveMemory = false, "system.autoSaveMemory", "Automatically save cartridge back-up RAM once every minute"); - attach(system.rewindEnabled = false, "system.rewindEnabled", "Automatically save states periodically to allow auto-rewind support"); + attach(system.rewindEnabled = false, "system.rewindEnabled", "Automatically save states periodically to allow auto-rewind support"); attach(diskBrowser.showPanel = true, "diskBrowser.showPanel"); - attach(file.autodetect_type = false, "file.autodetectType"); - attach(file.applyPatches = true, "file.applyPatches"); - attach(file.bypass_patch_crc32 = false, "file.bypassPatchCrc32"); + attach(file.applyPatches = true, "file.applyPatches"); + attach(file.bypassPatchCrc32 = false, "file.bypassPatchCrc32"); attach(path.rom = "", "path.rom"); attach(path.save = "", "path.save"); @@ -118,6 +117,7 @@ Configuration::Configuration() { attach(input.port2 = ControllerPort2::Gamepad, "input.port2"); attach(input.focusPolicy = Input::FocusPolicyIgnoreInput, "input.focusPolicy"); attach(input.allowInvalidInput = false, "input.allowInvalidInput", "Allow up+down / left+right combinations; may trigger bugs in some games"); + attach(input.modifierEnable = true, "input.modifierEnable"); attach(debugger.cacheUsageToDisk = false, "debugger.cacheUsageToDisk"); diff --git a/src/ui_qt/config.hpp b/src/ui_qt/config.hpp index 41edd9fa..75488d17 100644 --- a/src/ui_qt/config.hpp +++ b/src/ui_qt/config.hpp @@ -14,9 +14,8 @@ public: } system; struct File { - bool autodetect_type; bool applyPatches; - bool bypass_patch_crc32; + bool bypassPatchCrc32; } file; struct DiskBrowser { @@ -63,6 +62,7 @@ public: enum policy_t { FocusPolicyPauseEmulation, FocusPolicyIgnoreInput, FocusPolicyAllowInput }; unsigned focusPolicy; bool allowInvalidInput; + bool modifierEnable; } input; struct Debugger { diff --git a/src/ui_qt/debugger/tools/properties.cpp b/src/ui_qt/debugger/tools/properties.cpp index 9faeff72..c9a14880 100644 --- a/src/ui_qt/debugger/tools/properties.cpp +++ b/src/ui_qt/debugger/tools/properties.cpp @@ -1,6 +1,8 @@ #include "properties.moc" PropertiesWidget *cpuPropertiesTab; +PropertiesWidget *smpPropertiesTab; PropertiesWidget *ppuPropertiesTab; +PropertiesWidget *dspPropertiesTab; PropertiesViewer *propertiesViewer; void PropertiesWidget::refresh() { @@ -44,7 +46,9 @@ PropertiesWidget::PropertiesWidget(SNES::ChipDebugger &object) : object(object) void PropertiesViewer::refresh() { cpuPropertiesTab->refresh(); + smpPropertiesTab->refresh(); ppuPropertiesTab->refresh(); + dspPropertiesTab->refresh(); } void PropertiesViewer::show() { @@ -71,9 +75,15 @@ PropertiesViewer::PropertiesViewer() : QbWindow(config().geometry.propertiesView cpuPropertiesTab = new PropertiesWidget(SNES::cpu); tabWidget->addTab(cpuPropertiesTab, "S-CPU"); + smpPropertiesTab = new PropertiesWidget(SNES::smp); + tabWidget->addTab(smpPropertiesTab, "S-SMP"); + ppuPropertiesTab = new PropertiesWidget(SNES::ppu); tabWidget->addTab(ppuPropertiesTab, "S-PPU"); + dspPropertiesTab = new PropertiesWidget(SNES::dsp); + tabWidget->addTab(dspPropertiesTab, "S-DSP"); + controlLayout = new QHBoxLayout; controlLayout->setAlignment(Qt::AlignRight); layout->addLayout(controlLayout); diff --git a/src/ui_qt/debugger/tools/properties.moc.hpp b/src/ui_qt/debugger/tools/properties.moc.hpp index d8851006..a2d19e50 100644 --- a/src/ui_qt/debugger/tools/properties.moc.hpp +++ b/src/ui_qt/debugger/tools/properties.moc.hpp @@ -33,5 +33,7 @@ public slots: }; extern PropertiesWidget *cpuPropertiesTab; +extern PropertiesWidget *smpPropertiesTab; extern PropertiesWidget *ppuPropertiesTab; +extern PropertiesWidget *dspPropertiesTab; extern PropertiesViewer *propertiesViewer; diff --git a/src/ui_qt/input/controller.cpp b/src/ui_qt/input/controller.cpp index 53237497..e69887cf 100644 --- a/src/ui_qt/input/controller.cpp +++ b/src/ui_qt/input/controller.cpp @@ -18,6 +18,14 @@ DigitalInput(label, configName) { } int16_t Gamepad::status(unsigned index, unsigned id) const { + if(config().input.allowInvalidInput == false) { + //block up+down and left+right combinations: + //a real gamepad has a pivot in the D-pad that makes this impossible; + //some software titles will crash if up+down or left+right are detected + if(id == SNES::Input::JoypadDown && up.cachedState) return 0; + if(id == SNES::Input::JoypadRight && left.cachedState) return 0; + } + switch(id) { case SNES::Input::JoypadUp: return up.cachedState; case SNES::Input::JoypadDown: return down.cachedState; @@ -177,6 +185,11 @@ DigitalInput(label, configName) { } int16_t Asciipad::status(unsigned index, unsigned id) const { + if(config().input.allowInvalidInput == false) { + if(id == SNES::Input::JoypadDown && up.cachedState) return 0; + if(id == SNES::Input::JoypadRight && left.cachedState) return 0; + } + switch(id) { case SNES::Input::JoypadUp: return up.cachedState; case SNES::Input::JoypadDown: return down.cachedState; diff --git a/src/ui_qt/input/input.cpp b/src/ui_qt/input/input.cpp index cfe8087a..58d1dc2e 100644 --- a/src/ui_qt/input/input.cpp +++ b/src/ui_qt/input/input.cpp @@ -31,9 +31,6 @@ void MappedInput::bind() { if(part[1] == "Hi") specifier = InputSpecifier::Hi; if(part[1] == "Trigger") specifier = InputSpecifier::Trigger; - //bypass modifier matching if scancode is itself a modifier - modifierOverride = Keyboard::isAnyModifier(scancode); - //re-encode name, in case previous name was invalid name = ""; if(modifier & InputModifier::Shift) name << "Shift+"; @@ -56,7 +53,6 @@ void MappedInput::cache() { MappedInput::MappedInput(const char *label_, const char *configName) : parent(0), label(label_) { specifier = InputSpecifier::None; - modifierOverride = false; state = 0; previousState = 0; cachedState = 0; @@ -67,7 +63,7 @@ MappedInput::MappedInput(const char *label_, const char *configName) : parent(0) void DigitalInput::poll() { previousState = state; - if(modifier == mapper().modifier || modifierOverride) { + if(modifier == mapper().modifier || !config().input.modifierEnable) { if(specifier == InputSpecifier::None) { state = mapper().state(scancode); } else if(specifier == InputSpecifier::Up) { diff --git a/src/ui_qt/input/input.hpp b/src/ui_qt/input/input.hpp index 88fe2ab6..02c7c7dd 100644 --- a/src/ui_qt/input/input.hpp +++ b/src/ui_qt/input/input.hpp @@ -11,7 +11,6 @@ struct MappedInput { unsigned specifier; unsigned modifier; unsigned scancode; - bool modifierOverride; int16_t state; int16_t previousState; int16_t cachedState; diff --git a/src/ui_qt/resource/resource.qrc b/src/ui_qt/resource/resource.qrc index 84af06de..0156d64b 100644 --- a/src/ui_qt/resource/resource.qrc +++ b/src/ui_qt/resource/resource.qrc @@ -18,6 +18,7 @@ ../../data/icons-16x16/document-open.png ../../data/icons-16x16/folder.png ../../data/icons-16x16/folder-new.png + ../../data/icons-16x16/go-up.png ../../data/icons-16x16/help-browser.png ../../data/icons-16x16/image-x-generic.png ../../data/icons-16x16/input-gaming.png diff --git a/src/ui_qt/settings/input.cpp b/src/ui_qt/settings/input.cpp index 3698ccc3..5192d0fd 100644 --- a/src/ui_qt/settings/input.cpp +++ b/src/ui_qt/settings/input.cpp @@ -3,6 +3,9 @@ InputSettingsWindow *inputSettingsWindow; InputSettingsWindow::InputSettingsWindow() { activeInput = 0; + activeGroup = 0; + groupIndex = 0; + activeMouse = 0; layout = new QVBoxLayout; layout->setMargin(Style::WindowMargin); @@ -24,27 +27,36 @@ InputSettingsWindow::InputSettingsWindow() { message->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); controlLayout->addWidget(message); - optionButton = new QPushButton("Options"); - controlLayout->addWidget(optionButton); - - optionMenu = new QMenu; - optionButton->setMenu(optionMenu); - - optionAssignModifiers = new QbCheckAction("Assign Modifiers as Keys", 0); - optionMenu->addAction(optionAssignModifiers); - assignButton = new QPushButton("Assign"); controlLayout->addWidget(assignButton); unassignButton = new QPushButton("Unassign"); controlLayout->addWidget(unassignButton); + buttonBox = new QLabel("Mouse Button"); + buttonBox->setFrameStyle(QFrame::Panel | QFrame::Raised); + buttonBox->hide(); + controlLayout->addWidget(buttonBox); + + xAxisButton = new QPushButton("Mouse X-axis"); + xAxisButton->hide(); + controlLayout->addWidget(xAxisButton); + + yAxisButton = new QPushButton("Mouse Y-axis"); + yAxisButton->hide(); + controlLayout->addWidget(yAxisButton); + + stopButton = new QPushButton("Stop"); + stopButton->hide(); + controlLayout->addWidget(stopButton); + connect(list, SIGNAL(itemSelectionChanged()), this, SLOT(synchronize())); - connect(list, SIGNAL(itemActivated(QTreeWidgetItem*, int)), this, SLOT(assign())); + connect(list, SIGNAL(itemActivated(QTreeWidgetItem*, int)), this, SLOT(activateAssign())); connect(assignButton, SIGNAL(released()), this, SLOT(assign())); connect(unassignButton, SIGNAL(released()), this, SLOT(unassign())); - - connect(optionAssignModifiers, SIGNAL(triggered()), this, SLOT(toggleAssignModifiers())); + connect(xAxisButton, SIGNAL(released()), this, SLOT(xAxisAssign())); + connect(yAxisButton, SIGNAL(released()), this, SLOT(yAxisAssign())); + connect(stopButton, SIGNAL(released()), this, SLOT(stop())); //initialize list @@ -86,16 +98,60 @@ InputSettingsWindow::InputSettingsWindow() { void InputSettingsWindow::synchronize() { bool enable = false; + QList items = list->selectedItems(); if(items.count() > 0) { QTreeWidgetItem *item = items[0]; signed index = item->data(0, Qt::UserRole).toInt(); - enable = (index != -1); + if(index >= 0) enable = true; + else { + item = item->child(0); + if(item) { + index = item->data(0, Qt::UserRole).toInt(); + if(index >= 0) enable = true; + } + } } + assignButton->setEnabled(enable); unassignButton->setEnabled(enable); } +void InputSettingsWindow::setActiveInput(MappedInput *input) { + //flush any pending events to prevent instantaneous assignment of scancodes + activeInput = 0; + mapper().poll(); + activeInput = input; + + if(activeInput) { + assignButton->hide(); + unassignButton->hide(); + if(dynamic_cast(input)) { + buttonBox->show(); + xAxisButton->hide(); + yAxisButton->hide(); + } else { + buttonBox->hide(); + xAxisButton->show(); + yAxisButton->show(); + } + stopButton->show(); + + message->setFocus(); + message->setText(string() << "Set assignment for: " << activeInput->label); + } else { + assignButton->show(); + unassignButton->show(); + buttonBox->hide(); + xAxisButton->hide(); + yAxisButton->hide(); + stopButton->hide(); + + list->setFocus(); + message->setText(""); + } +} + void InputSettingsWindow::updateList() { QList all = list->findItems("", Qt::MatchContains); for(unsigned i = 0; i < all.size(); i++) { @@ -116,12 +172,26 @@ void InputSettingsWindow::updateList() { } void InputSettingsWindow::setAssignment(string name) { + //if all controls in a group are being assigned at once, + //ensure the same keycode is not used more than once + if(activeGroup) { + for(unsigned i = 0; i < groupIndex; i++) { + if((*activeGroup)[i]->name == name) return; + } + } + activeInput->name = name; - activeInput = 0; - list->setFocus(); - message->setText(""); mapper().bind(); updateList(); + + if(!activeGroup) { + setActiveInput(0); + } else if(++groupIndex >= activeGroup->size()) { + setActiveInput(0); + activeGroup = 0; + } else { + setActiveInput((*activeGroup)[groupIndex]); + } } void InputSettingsWindow::inputEvent(uint16_t scancode) { @@ -137,12 +207,12 @@ void InputSettingsWindow::inputEvent(uint16_t scancode) { } setAssignment(string() << mapper().modifierString() << Scancode::encode(scancode)); - } else if(Keyboard::isAnyModifier(scancode) && optionAssignModifiers->isChecked()) { + } else if(Keyboard::isAnyModifier(scancode) && !config().input.modifierEnable) { setAssignment(string() << Scancode::encode(scancode)); - } else if(Mouse::isAnyButton(scancode) && mapper().state(scancode)) { + } else if(Mouse::isAnyButton(scancode) && !mapper().state(scancode)) { //ensure button was clicked inside list box unsigned wx = 0, wy = 0; - QWidget *widget = message; + QWidget *widget = buttonBox; while(widget) { wx += widget->geometry().x(); wy += widget->geometry().y(); @@ -150,8 +220,8 @@ void InputSettingsWindow::inputEvent(uint16_t scancode) { } unsigned px = QCursor::pos().x(); unsigned py = QCursor::pos().y(); - if(px < wx || px >= wx + message->size().width()) return; - if(py < wy || py >= wy + message->size().height()) return; + if(px < wx || px >= wx + buttonBox->size().width()) return; + if(py < wy || py >= wy + buttonBox->size().height()) return; setAssignment(string() << mapper().modifierString() << Scancode::encode(scancode)); } else if(Joypad::isAnyHat(scancode)) { @@ -169,6 +239,7 @@ void InputSettingsWindow::inputEvent(uint16_t scancode) { activeInput = 0; mapper().calibrate(); activeInput = temp; + return; } if(mapper().isTrigger[Joypad::numberDecode(scancode)][Joypad::axisDecode(scancode)] == false) { @@ -187,30 +258,16 @@ void InputSettingsWindow::inputEvent(uint16_t scancode) { setAssignment(string() << mapper().modifierString() << Scancode::encode(scancode)); } } else if(dynamic_cast(activeInput)) { - if(Mouse::isAnyButton(scancode)) { - //ensure button was clicked inside list box - unsigned wx = 0, wy = 0; - QWidget *widget = message; - while(widget) { - wx += widget->geometry().x(); - wy += widget->geometry().y(); - widget = widget->parentWidget(); - } - unsigned px = QCursor::pos().x(); - unsigned py = QCursor::pos().y(); - if(px < wx || px >= wx + message->size().width()) return; - if(py < wy || py >= wy + message->size().height()) return; - - unsigned number = Mouse::numberDecode(scancode); - unsigned button = Mouse::buttonDecode(scancode); - if(button == 0) setAssignment(string() << Scancode::encode(mouse(number).axis(0))); - if(button == 2) setAssignment(string() << Scancode::encode(mouse(number).axis(1))); + if(Mouse::isAnyButton(scancode) && mapper().state(scancode)) { + //actual assignment occurs during (x,y)AxisButton::released() + activeMouse = Mouse::numberDecode(scancode); } else if(Joypad::isAnyAxis(scancode) && mapper().distance(scancode) > 64) { if(mapper().calibrated == false) { MappedInput *temp = activeInput; activeInput = 0; mapper().calibrate(); activeInput = temp; + return; } if(mapper().isTrigger[Joypad::numberDecode(scancode)][Joypad::axisDecode(scancode)] == false) { @@ -222,25 +279,43 @@ void InputSettingsWindow::inputEvent(uint16_t scancode) { } } +//called when double-clicking any list item; +//double-clicking a group expands or collapses it, +//so avoid triggering assign() unless this is not a group +void InputSettingsWindow::activateAssign() { + QTreeWidgetItem *item = list->currentItem(); + if(!item) return; + signed index = item->data(0, Qt::UserRole).toInt(); + if(index >= 0) assign(); +} + void InputSettingsWindow::assign() { QTreeWidgetItem *item = list->currentItem(); if(!item) return; signed index = item->data(0, Qt::UserRole).toInt(); + if(index == -1) return assignGroup(); + setActiveInput(inputTable[index]); +} + +void InputSettingsWindow::assignGroup() { + QTreeWidgetItem *item = list->currentItem(); + if(!item) return; + item->setExpanded(true); + item = item->child(0); + if(!item) return; + signed index = item->data(0, Qt::UserRole).toInt(); if(index == -1) return; - //flush any pending events to prevent instantaneous assignment of scancodes - mapper().poll(); - - activeInput = inputTable[index]; - message->setFocus(); - message->setText(string() << "Set assignment for: " << activeInput->label); + MappedInput *input = inputTable[index]; + activeGroup = input->parent; + setActiveInput((*activeGroup)[groupIndex = 0]); } void InputSettingsWindow::unassign() { QTreeWidgetItem *item = list->currentItem(); if(!item) return; signed index = item->data(0, Qt::UserRole).toInt(); - if(index == -1) return; + if(index == -1) return unassignGroup(); MappedInput *input = inputTable[index]; input->name = "None"; @@ -248,6 +323,32 @@ void InputSettingsWindow::unassign() { updateList(); } -void InputSettingsWindow::toggleAssignModifiers() { - optionAssignModifiers->setChecked(!optionAssignModifiers->isChecked()); +void InputSettingsWindow::unassignGroup() { + QTreeWidgetItem *item = list->currentItem(); + if(!item) return; + item = item->child(0); + if(!item) return; + signed index = item->data(0, Qt::UserRole).toInt(); + if(index == -1) return; + + MappedInput *input = inputTable[index]; + InputGroup &group = *(input->parent); + for(unsigned i = 0; i < group.size(); i++) { + group[i]->name = "None"; + } + mapper().bind(); + updateList(); +} + +void InputSettingsWindow::xAxisAssign() { + setAssignment(string() << Scancode::encode(mouse(activeMouse).axis(0))); +} + +void InputSettingsWindow::yAxisAssign() { + setAssignment(string() << Scancode::encode(mouse(activeMouse).axis(1))); +} + +void InputSettingsWindow::stop() { + setActiveInput(0); + activeGroup = 0; } diff --git a/src/ui_qt/settings/input.moc.hpp b/src/ui_qt/settings/input.moc.hpp index 1da10acf..1a328e6b 100644 --- a/src/ui_qt/settings/input.moc.hpp +++ b/src/ui_qt/settings/input.moc.hpp @@ -7,27 +7,38 @@ public: QHBoxLayout *controlLayout; QLabel *message; QPushButton *optionButton; - QMenu *optionMenu; - QbCheckAction *optionAssignModifiers; QPushButton *assignButton; QPushButton *unassignButton; + QLabel *buttonBox; + QPushButton *xAxisButton; + QPushButton *yAxisButton; + QPushButton *stopButton; void inputEvent(uint16_t scancode); InputSettingsWindow(); private slots: void synchronize(); + void activateAssign(); void assign(); + void assignGroup(); void unassign(); - void toggleAssignModifiers(); + void unassignGroup(); + void xAxisAssign(); + void yAxisAssign(); + void stop(); private: QTreeWidgetItem *port1, *port2, *userInterface; array inputTable; MappedInput *activeInput; + InputGroup *activeGroup; + unsigned groupIndex; + unsigned activeMouse; void updateList(); void setAssignment(string); + void setActiveInput(MappedInput*); }; extern InputSettingsWindow *inputSettingsWindow; diff --git a/src/ui_qt/tools/cheateditor.cpp b/src/ui_qt/tools/cheateditor.cpp index d0ffd24e..09ba4734 100644 --- a/src/ui_qt/tools/cheateditor.cpp +++ b/src/ui_qt/tools/cheateditor.cpp @@ -2,6 +2,8 @@ CheatEditorWindow *cheatEditorWindow; CheatEditorWindow::CheatEditorWindow() { + lock = false; + layout = new QVBoxLayout; layout->setMargin(Style::WindowMargin); layout->setSpacing(Style::WidgetSpacing); @@ -66,6 +68,7 @@ void CheatEditorWindow::synchronize() { } void CheatEditorWindow::load(const char *filename) { + lock = true; list->clear(); list->setSortingEnabled(false); SNES::cheat.reset(); @@ -97,6 +100,7 @@ void CheatEditorWindow::load(const char *filename) { list->setSortingEnabled(true); list->header()->setSortIndicatorShown(false); + lock = false; bind(); update(); } @@ -158,6 +162,8 @@ void CheatEditorWindow::update() { } void CheatEditorWindow::bind() { + if(lock) return; + QList items = list->findItems("", Qt::MatchContains); for(unsigned i = 0; i < items.count(); i++) { QTreeWidgetItem *item = items[i]; @@ -169,6 +175,8 @@ void CheatEditorWindow::bind() { } void CheatEditorWindow::listChanged() { + if(lock) return; + QList items = list->selectedItems(); if(items.count() > 0) { QTreeWidgetItem *item = items[0]; @@ -179,6 +187,8 @@ void CheatEditorWindow::listChanged() { } void CheatEditorWindow::codeEdited() { + if(lock) return; + QList items = list->selectedItems(); if(items.count() == 1) { QTreeWidgetItem *item = items[0]; @@ -189,6 +199,8 @@ void CheatEditorWindow::codeEdited() { } void CheatEditorWindow::descEdited() { + if(lock) return; + QList items = list->selectedItems(); if(items.count() == 1) { QTreeWidgetItem *item = items[0]; @@ -198,6 +210,8 @@ void CheatEditorWindow::descEdited() { } void CheatEditorWindow::clearSelected() { + if(lock) return; + QList items = list->selectedItems(); for(unsigned i = 0; i < items.count(); i++) { QTreeWidgetItem *item = items[i]; diff --git a/src/ui_qt/tools/cheateditor.moc.hpp b/src/ui_qt/tools/cheateditor.moc.hpp index 61ce1109..193981dc 100644 --- a/src/ui_qt/tools/cheateditor.moc.hpp +++ b/src/ui_qt/tools/cheateditor.moc.hpp @@ -25,6 +25,9 @@ private slots: void codeEdited(); void descEdited(); void clearSelected(); + +private: + bool lock; }; extern CheatEditorWindow *cheatEditorWindow; diff --git a/src/ui_qt/utility/window.cpp b/src/ui_qt/utility/window.cpp index 3c48f341..2acc9ceb 100644 --- a/src/ui_qt/utility/window.cpp +++ b/src/ui_qt/utility/window.cpp @@ -50,6 +50,17 @@ void Utility::resizeMainWindow() { } } + //at 5x scale, it is possible to correct the aspect ratio while maintaining + //an even number of pixels for every column and every row; very important for + //point / nearest-neighbor scaling ... + // + //NTSC: 1471x1120 -> 1536x1120 (6x5 scale) + //PAL : 1781x1195 -> 1792x1195 (7x5 scale) + if(multiplier == 5 && config().video.context->correctAspectRatio) { + width = 256 * (region == 0 ? 6 : 7); + height = (region == 0 ? 224 : 239) * 5; + } + if(config().video.isFullscreen == false) { //get effective desktop work area region (ignore Windows taskbar, OS X dock, etc.) QRect deskRect = QApplication::desktop()->availableGeometry(mainWindow); diff --git a/supergameboy.dll b/supergameboy.dll new file mode 100644 index 0000000000000000000000000000000000000000..033b1a93603b5aefcda10f159ec10cb86f8c80db GIT binary patch literal 750202 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

v5h(F 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

n>ClBtk%wKiy) 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 inc) + return diff - inc; + + diff = inc - diff; + + if (diff > oversleep + oversleepVar) { + diff -= oversleep + oversleepVar; + usecsleep(diff); + const usec_t ideal = now + diff; + now = getusecs(); + + { + usec_t curOversleep = now - ideal; + + if (negate(curOversleep) < curOversleep) + curOversleep = 0; + + oversleepVar = (oversleepVar * 15 + (curOversleep < oversleep ? oversleep - curOversleep : curOversleep - oversleep)) >> 4; + oversleep = (oversleep * 15 + curOversleep) >> 4; + } + + noSleep = 60; + } else if (--noSleep == 0) { + noSleep = 60; + oversleep = oversleepVar = 0; + } + + while (now - base < inc) + now = getusecs(); + + return 0; +} diff --git a/supergameboy/common/adaptivesleep.h b/supergameboy/common/adaptivesleep.h new file mode 100644 index 00000000..de2010a0 --- /dev/null +++ b/supergameboy/common/adaptivesleep.h @@ -0,0 +1,34 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre AamÃ¥s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef ADAPTIVE_SLEEP_H +#define ADAPTIVE_SLEEP_H + +#include "usec.h" + +class AdaptiveSleep { + usec_t oversleep; + usec_t oversleepVar; + unsigned noSleep; + +public: + AdaptiveSleep() : oversleep(0), oversleepVar(0), noSleep(60) {} + usec_t sleepUntil(usec_t base, usec_t inc); +}; + +#endif diff --git a/supergameboy/common/array.h b/supergameboy/common/array.h new file mode 100644 index 00000000..f01806ea --- /dev/null +++ b/supergameboy/common/array.h @@ -0,0 +1,40 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef ARRAY_H +#define ARRAY_H + +#include + +template +class Array { + T *a; + std::size_t sz; + + Array(const Array &ar); + +public: + Array(const std::size_t size = 0) : a(size ? new T[size] : 0), sz(size) {} + ~Array() { delete []a; } + void reset(const std::size_t size) { delete []a; a = size ? new T[size] : 0; sz = size; } + std::size_t size() const { return sz; } + operator T*() { return a; } + operator const T*() const { return a; } +}; + +#endif diff --git a/supergameboy/common/rateest.cpp b/supergameboy/common/rateest.cpp new file mode 100644 index 00000000..c1feba6c --- /dev/null +++ b/supergameboy/common/rateest.cpp @@ -0,0 +1,96 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre AamÃ¥s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "rateest.h" +#include + +void RateEst::SumQueue::reset() { + q.clear(); + samples_ = usecs_ = 0; +} + +void RateEst::SumQueue::push(const long samples, const usec_t usecs) { + q.push_back(pair_t(samples, usecs)); + samples_ += samples; + usecs_ += usecs; +} + +void RateEst::SumQueue::pop() { + const pair_t &f = q.front(); + samples_ -= f.first; + usecs_ -= f.second; + q.pop_front(); +} + +static usec_t sampleUsecs(long samples, long rate) { + return static_cast((samples * 1000000.0f) / (rate ? rate : 1) + 0.5f); +} + +static long limit(long est, const long reference) { + if (est > reference + (reference >> 6)) + est = reference + (reference >> 6); + else if (est < reference - (reference >> 6)) + est = reference - (reference >> 6); + + return est; +} + +void RateEst::init(long srate, long reference, const long maxSamplePeriod) { + maxPeriod = sampleUsecs(maxSamplePeriod, reference); + + srate <<= UPSHIFT; + reference <<= UPSHIFT; + + this->srate.est = limit(srate, reference); + this->srate.var = srate >> 12; + last = 0; + this->reference = reference; + samples = ((this->srate.est >> UPSHIFT) * 12) << 5; + usecs = 12000000 << 5; + sumq.reset(); +} + +void RateEst::feed(long samplesIn, const usec_t now) { + usec_t usecsIn = now - last; + + if (last && usecsIn < maxPeriod) { + sumq.push(samplesIn, usecsIn); + + while ((usecsIn = sumq.usecs()) > 100000) { + samplesIn = sumq.samples(); + sumq.pop(); + + if (std::abs(static_cast(samplesIn * (1000000.0f * UP) / usecsIn) - reference) < reference >> 1) { + samples += (samplesIn - sumq.samples()) << 5; + usecs += (usecsIn - sumq.usecs()) << 5; + + long est = static_cast(samples * (1000000.0f * UP) / usecs + 0.5f); + est = limit((srate.est * 31 + est + 16) >> 5, reference); + srate.var = (srate.var * 15 + std::abs(est - srate.est) + 8) >> 4; + srate.est = est; + + if (usecs > 16000000 << 5) { + samples = (samples * 3 + 2) >> 2; + usecs = (usecs * 3 + 2) >> 2; + } + } + } + } + + last = now; +} diff --git a/supergameboy/common/rateest.h b/supergameboy/common/rateest.h new file mode 100644 index 00000000..3e109541 --- /dev/null +++ b/supergameboy/common/rateest.h @@ -0,0 +1,73 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre AamÃ¥s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef RATEEST_H +#define RATEEST_H + +#include "usec.h" +#include +#include + +class RateEst { +public: + struct Result { + long est; + long var; + }; + +private: + class SumQueue { + typedef std::pair pair_t; + typedef std::deque q_t; + + q_t q; + long samples_; + usec_t usecs_; + + public: + SumQueue() : samples_(0), usecs_(0) {} + void reset(); + long samples() const { return samples_; } + usec_t usecs() const { return usecs_; } + void push(long samples, usec_t usecs); + void pop(); + }; + + enum { UPSHIFT = 5 }; + enum { UP = 1 << UPSHIFT }; + + Result srate; + SumQueue sumq; + usec_t last; + usec_t usecs; + usec_t maxPeriod; + long reference; + long samples; + +public: + RateEst(long srate = 0) { init(srate); } + RateEst(long srate, long reference) { init(srate, reference); } + void init(long srate) { init(srate, srate); } + void init(long srate, long reference) { init(srate, reference, reference); } + void init(long srate, long reference, long maxSamplePeriod); + void reset() { last = 0; } + void feed(long samples, usec_t usecs = getusecs()); + const Result result() const { const Result res = { (srate.est + UP / 2) >> UPSHIFT, (srate.var + UP / 2) >> UPSHIFT }; return res; } +}; + +#endif diff --git a/supergameboy/common/resample/blackmansinc.h b/supergameboy/common/resample/blackmansinc.h new file mode 100644 index 00000000..86578239 --- /dev/null +++ b/supergameboy/common/resample/blackmansinc.h @@ -0,0 +1,100 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre AamÃ¥s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef BLACKMANSINC_H +#define BLACKMANSINC_H + +#include "convoluter.h" +#include "subresampler.h" +#include "makesinckernel.h" +#include "cic4.h" +#include +#include + +template +class BlackmanSinc : public SubResampler { + PolyPhaseConvoluter convoluters[channels]; + short *kernel; + + static double blackmanWin(const long i, const long M) { + static const double PI = 3.14159265358979323846; + return 0.42 - 0.5 * std::cos(2 * PI * i / M) + 0.08 * std::cos(4 * PI * i / M); + } + + void init(unsigned div, unsigned phaseLen, double fc); + +public: + enum { MUL = phases }; + + typedef Cic4 Cic; + static float cicLimit() { return 4.7f; } + + class RollOff { + static unsigned toTaps(const float rollOffWidth) { + static const float widthTimesTaps = 4.5f; + return std::ceil(widthTimesTaps / rollOffWidth); + } + + static float toFc(const float rollOffStart, const int taps) { + static const float startToFcDeltaTimesTaps = 1.69f; + return startToFcDeltaTimesTaps / taps + rollOffStart; + } + + public: + const unsigned taps; + const float fc; + + RollOff(float rollOffStart, float rollOffWidth) : taps(toTaps(rollOffWidth)), fc(toFc(rollOffStart, taps)) {} + }; + + BlackmanSinc(unsigned div, unsigned phaseLen, double fc) { init(div, phaseLen, fc); } + BlackmanSinc(unsigned div, RollOff ro) { init(div, ro.taps, ro.fc); } + ~BlackmanSinc() { delete[] kernel; } + std::size_t resample(short *out, const short *in, std::size_t inlen); + void adjustDiv(unsigned div); + unsigned mul() const { return MUL; } + unsigned div() const { return convoluters[0].div(); } +}; + +template +void BlackmanSinc::init(const unsigned div, const unsigned phaseLen, const double fc) { + kernel = new short[phaseLen * phases]; + + makeSincKernel(kernel, phases, phaseLen, fc, blackmanWin); + + for (unsigned i = 0; i < channels; ++i) + convoluters[i].reset(kernel, phaseLen, div); +} + +template +std::size_t BlackmanSinc::resample(short *const out, const short *const in, const std::size_t inlen) { + std::size_t samplesOut; + + for (unsigned i = 0; i < channels; ++i) + samplesOut = convoluters[i].filter(out + i, in + i, inlen); + + return samplesOut; +} + +template +void BlackmanSinc::adjustDiv(const unsigned div) { + for (unsigned i = 0; i < channels; ++i) + convoluters[i].adjustDiv(div); +} + +#endif diff --git a/supergameboy/common/resample/chainresampler.cpp b/supergameboy/common/resample/chainresampler.cpp new file mode 100644 index 00000000..6836a05b --- /dev/null +++ b/supergameboy/common/resample/chainresampler.cpp @@ -0,0 +1,118 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre AamÃ¥s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "chainresampler.h" + +float ChainResampler::get2ChainMidRatio(const float ratio, const float rollOff) { + return std::sqrt(0.5f * rollOff * ratio) + 1; +} + +float ChainResampler::get2ChainCost(const float ratio, const float rollOff, const float midRatio) { + return midRatio * ratio / ((midRatio - 1) * 2) + midRatio / rollOff; +} + +float ChainResampler::get3ChainRatio1(float ratio1, const float rollOff, const float ratio) { + for (unsigned n = 8; n--;) { + ratio1 = std::sqrt(ratio - ratio / get3ChainRatio2(ratio1, rollOff)) + 1; + } + + return ratio1; +} + +float ChainResampler::get3ChainCost(const float ratio, const float rollOff, const float ratio1, const float ratio2) { + return ratio1 * ratio / ((ratio1 - 1) * 2) + ratio2 * ratio1 / ((ratio2 - 1) * 2) + ratio2 / rollOff; +} + +std::size_t ChainResampler::reallocateBuffer() { + std::size_t bufSz[2] = { 0, 0 }; + std::size_t inSz = periodSize; + int i = -1; + + for (list_t::iterator it = list.begin(); it != list.end(); ++it) { + inSz = (inSz * (*it)->mul() - 1) / (*it)->div() + 1; + + ++i; + + if (inSz > bufSz[i&1]) + bufSz[i&1] = inSz; + } + + if (inSz >= bufSz[i&1]) + bufSz[i&1] = 0; + + if (bufferSize < bufSz[0] + bufSz[1]) { + delete[] buffer; + buffer = (bufferSize = bufSz[0] + bufSz[1]) ? new short[bufferSize * channels] : NULL; + } + + buffer2 = bufSz[1] ? buffer + bufSz[0] * channels : NULL; + + return (maxOut_ = inSz); +} + +void ChainResampler::adjustRate(const long inRate, const long outRate) { + unsigned long mul, div; + + exactRatio(mul, div); + + bigSinc->adjustDiv(static_cast(inRate) * mul / (static_cast(div / bigSinc->div()) * outRate) + 0.5); + + reallocateBuffer(); + setRate(inRate, outRate); +} + +void ChainResampler::exactRatio(unsigned long &mul, unsigned long &div) const { + mul = 1; + div = 1; + + for (list_t::const_iterator it = list.begin(); it != list.end(); ++it) { + mul *= (*it)->mul(); + div *= (*it)->div(); + } +} + +std::size_t ChainResampler::resample(short *const out, const short *const in, std::size_t inlen) { + assert(inlen <= periodSize); + + short *const buf = buffer != buffer2 ? buffer : out; + short *const buf2 = buffer2 ? buffer2 : out; + + const short *inbuf = in; + short *outbuf = NULL; + + for (list_t::iterator it = list.begin(); it != list.end(); ++it) { + outbuf = ++list_t::iterator(it) == list.end() ? out : (inbuf == buf ? buf2 : buf); + inlen = (*it)->resample(outbuf, inbuf, inlen); + inbuf = outbuf; + } + + return inlen; +} + +void ChainResampler::uninit() { + delete[] buffer; + buffer2 = buffer = NULL; + bufferSize = 0; + periodSize = 0; + bigSinc = NULL; + + for (list_t::iterator it = list.begin(); it != list.end(); ++it) + delete *it; + + list.clear(); +} diff --git a/supergameboy/common/resample/chainresampler.h b/supergameboy/common/resample/chainresampler.h new file mode 100644 index 00000000..aeb52d6c --- /dev/null +++ b/supergameboy/common/resample/chainresampler.h @@ -0,0 +1,189 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre AamÃ¥s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef CHAINRESAMPLER_H +#define CHAINRESAMPLER_H + +#include +#include +#include +#include +#include +#include "subresampler.h" +#include "resampler.h" +#include "upsampler.h" + +class ChainResampler : public Resampler { + enum { channels = 2 }; + + typedef std::list list_t; + + list_t list; + SubResampler *bigSinc; + short *buffer; + short *buffer2; + std::size_t bufferSize; + std::size_t periodSize; + std::size_t maxOut_; + + static float get1ChainCost(const float ratio, const float rollOff) { + return ratio / rollOff; + } + + static float get2ChainMidRatio(float ratio, float rollOff); + static float get2ChainCost(float ratio, float rollOff, float midRatio); + + static float get3ChainRatio2(const float ratio1, const float rollOff) { + return get2ChainMidRatio(ratio1, rollOff); + } + + static float get3ChainRatio1(float ratio1, float rollOff, float ratio); + static float get3ChainCost(float ratio, float rollOff, float ratio1, float ratio2); + + template class Sinc> + std::size_t downinit(long inRate, long outRate, std::size_t periodSize); + + std::size_t reallocateBuffer(); + + template class Sinc> + std::size_t upinit(long inRate, long outRate, std::size_t periodSize); + +public: + ChainResampler() : bigSinc(NULL), buffer(NULL), buffer2(NULL), bufferSize(0), periodSize(0) {} + ~ChainResampler() { uninit(); } + + void adjustRate(long inRate, long outRate); + void exactRatio(unsigned long &mul, unsigned long &div) const; + + template class Sinc> + std::size_t init(long inRate, long outRate, std::size_t periodSize); + std::size_t maxOut(std::size_t /*inlen*/) const { return maxOut_; } + std::size_t resample(short *out, const short *in, std::size_t inlen); + void uninit(); +}; + +template class Sinc> +std::size_t ChainResampler::init(const long inRate, const long outRate, const std::size_t periodSize) { + setRate(inRate, outRate); + + if (outRate > inRate) + return upinit(inRate, outRate, periodSize); + else + return downinit(inRate, outRate, periodSize); +} + +template class Sinc> +std::size_t ChainResampler::downinit(const long inRate, const long outRate, const std::size_t periodSize) { + typedef Sinc BigSinc; + typedef Sinc SmallSinc; + + uninit(); + this->periodSize = periodSize; + + + const float rollOff = std::max((outRate - 36000.0f + outRate - 40000.0f) / outRate, 0.2f); + + double ratio = static_cast(inRate) / outRate; + + while (ratio >= BigSinc::cicLimit() * 2) { + const int div = std::min(static_cast(ratio / BigSinc::cicLimit()), BigSinc::Cic::MAX_DIV); + + list.push_back(new typename BigSinc::Cic(div)); + ratio /= div; + } + + { + int div_2c = ratio * SmallSinc::MUL / get2ChainMidRatio(ratio, rollOff) + 0.5f; + double ratio_2c = ratio * SmallSinc::MUL / div_2c; + float cost_2c = get2ChainCost(ratio, rollOff, ratio_2c); + + if (cost_2c < get1ChainCost(ratio, rollOff)) { + const int div1_3c = ratio * SmallSinc::MUL / get3ChainRatio1(ratio_2c, rollOff, ratio) + 0.5f; + const double ratio1_3c = ratio * SmallSinc::MUL / div1_3c; + const int div2_3c = ratio1_3c * SmallSinc::MUL / get3ChainRatio2(ratio1_3c, rollOff) + 0.5f; + const double ratio2_3c = ratio1_3c * SmallSinc::MUL / div2_3c; + + if (get3ChainCost(ratio, rollOff, ratio1_3c, ratio2_3c) < cost_2c) { + list.push_back(new SmallSinc(div1_3c, typename SmallSinc::RollOff(0.5f / ratio, (ratio1_3c - 1) / ratio))); + ratio = ratio1_3c; + div_2c = div2_3c; + ratio_2c = ratio2_3c; + } + + list.push_back(new SmallSinc(div_2c, typename SmallSinc::RollOff(0.5f / ratio, (ratio_2c - 1) / ratio))); + ratio = ratio_2c; + } + } + + list.push_back(bigSinc = new BigSinc(BigSinc::MUL * ratio + 0.5, + typename BigSinc::RollOff(0.5f * (1 + std::max((outRate - 40000.0f) / outRate, 0.0f) - rollOff) / ratio, 0.5f * rollOff / ratio))); + + return reallocateBuffer(); +} + +template class Sinc> +std::size_t ChainResampler::upinit(const long inRate, const long outRate, const std::size_t periodSize) { + typedef Sinc BigSinc; + typedef Sinc SmallSinc; + + uninit(); + this->periodSize = periodSize; + + const float rollOff = std::max((inRate - 36000.0f) / inRate, 0.2f); + + double ratio = static_cast(outRate) / inRate; + + // Spectral images above 20 kHz assumed inaudible + { + const int div = outRate / std::max(inRate, 40000l); + + if (div >= 2) { + list.push_front(new Upsampler(div)); + ratio /= div; + } + } + + { + int div_2c = get2ChainMidRatio(ratio, rollOff) * SmallSinc::MUL / ratio + 0.5f; + double ratio_2c = ratio * div_2c / SmallSinc::MUL; + float cost_2c = get2ChainCost(ratio, rollOff, ratio_2c); + + if (cost_2c < get1ChainCost(ratio, rollOff)) { + const int div1_3c = get3ChainRatio1(ratio_2c, rollOff, ratio) * SmallSinc::MUL / ratio + 0.5f; + const double ratio1_3c = ratio * div1_3c / SmallSinc::MUL; + const int div2_3c = get3ChainRatio2(ratio1_3c, rollOff) * SmallSinc::MUL / ratio1_3c + 0.5f; + const double ratio2_3c = ratio1_3c * div2_3c / SmallSinc::MUL; + + if (get3ChainCost(ratio, rollOff, ratio1_3c, ratio2_3c) < cost_2c) { + list.push_front(new SmallSinc(div1_3c, typename SmallSinc::RollOff(0.5f / ratio1_3c, (ratio1_3c - 1) / ratio1_3c))); + ratio = ratio1_3c; + div_2c = div2_3c; + ratio_2c = ratio2_3c; + } + + list.push_front(new SmallSinc(div_2c, typename SmallSinc::RollOff(0.5f / ratio_2c, (ratio_2c - 1) / ratio_2c))); + ratio = ratio_2c; + } + } + + list.push_front(bigSinc = new BigSinc(BigSinc::MUL / ratio + 0.5, typename BigSinc::RollOff(0.5f * (1 - rollOff), 0.5f * rollOff))); + + return reallocateBuffer(); +} + +#endif diff --git a/supergameboy/common/resample/cic2.h b/supergameboy/common/resample/cic2.h new file mode 100644 index 00000000..1f12bfc9 --- /dev/null +++ b/supergameboy/common/resample/cic2.h @@ -0,0 +1,198 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre AamÃ¥s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef CIC2_H +#define CIC2_H + +#include "subresampler.h" + +template +class Cic2Core { +// enum { BUFLEN = 64 }; +// unsigned long buf[BUFLEN]; + unsigned long sum1; + unsigned long sum2; + unsigned long prev1; + unsigned long prev2; + unsigned div_; + unsigned nextdivn; +// unsigned bufpos; + +public: + Cic2Core(const unsigned div = 2) { + reset(div); + } + + unsigned div() const { return div_; } + std::size_t filter(short *out, const short *in, std::size_t inlen); + void reset(unsigned div); +}; + +template +void Cic2Core::reset(const unsigned div) { + sum2 = sum1 = 0; + prev2 = prev1 = 0; + this->div_ = div; + nextdivn = div; +// bufpos = div - 1; +} + +template +std::size_t Cic2Core::filter(short *out, const short *const in, std::size_t inlen) { +// const std::size_t produced = (inlen + div_ - (bufpos + 1)) / div_; + const std::size_t produced = (inlen + div_ - nextdivn) / div_; + const long mul = 0x10000 / (div_ * div_); // trouble if div is too large, may be better to only support power of 2 div + const short *s = in; + + /*unsigned long sm1 = sum1; + unsigned long sm2 = sum2; + + while (inlen >> 2) { + unsigned n = (inlen < BUFLEN ? inlen >> 2 : BUFLEN >> 2); + const unsigned end = n * 4; + unsigned i = 0; + + do { + unsigned long s1 = sm1 += static_cast(*s); + s += channels; + sm1 += static_cast(*s); + s += channels; + buf[i++] = sm2 += s1; + buf[i++] = sm2 += sm1; + s1 = sm1 += static_cast(*s); + s += channels; + sm1 += static_cast(*s); + s += channels; + buf[i++] = sm2 += s1; + buf[i++] = sm2 += sm1; + } while (--n); + + while (bufpos < end) { + const unsigned long out2 = buf[bufpos] - prev2; + prev2 = buf[bufpos]; + bufpos += div_; + + *out = static_cast(out2 - prev1) * mul / 0x10000; + prev1 = out2; + out += channels; + } + + bufpos -= end; + inlen -= end; + } + + if (inlen) { + unsigned n = inlen; + unsigned i = 0; + + do { + sm1 += static_cast(*s); + s += channels; + buf[i++] = sm2 += sm1; + } while (--n); + + while (bufpos < inlen) { + const unsigned long out2 = buf[bufpos] - prev2; + prev2 = buf[bufpos]; + bufpos += div_; + + *out = static_cast(out2 - prev1) * mul / 0x10000; + prev1 = out2; + out += channels; + } + + bufpos -= inlen; + } + + sum1 = sm1; + sum2 = sm2;*/ + + unsigned long sm1 = sum1; + unsigned long sm2 = sum2; + + if (inlen >= nextdivn) { + unsigned divn = nextdivn; + std::size_t n = produced; + + do { + do { + sm1 += static_cast(*s); + s += channels; + sm2 += sm1; + } while (--divn); + + const unsigned long out2 = sm2 - prev2; + prev2 = sm2; + + *out = static_cast(out2 - prev1) * mul / 0x10000; + prev1 = out2; + out += channels; + + divn = div_; + } while (--n); + + nextdivn = div_; + } + + { + unsigned divn = (in + inlen * channels - s) / channels; + nextdivn -= divn; + + while (divn--) { + sm1 += static_cast(*s); + s += channels; + sm2 += sm1; + } + } + + sum1 = sm1; + sum2 = sm2; + + return produced; +} + +template +class Cic2 : public SubResampler { + Cic2Core cics[channels]; + +public: + enum { MAX_DIV = 64 }; + Cic2(unsigned div); + std::size_t resample(short *out, const short *in, std::size_t inlen); + unsigned mul() const { return 1; } + unsigned div() const { return cics[0].div(); } +}; + +template +Cic2::Cic2(const unsigned div) { + for (unsigned i = 0; i < channels; ++i) + cics[i].reset(div); +} + +template +std::size_t Cic2::resample(short *const out, const short *const in, const std::size_t inlen) { + std::size_t samplesOut; + + for (unsigned i = 0; i < channels; ++i) { + samplesOut = cics[i].filter(out + i, in + i, inlen); + } + + return samplesOut; +} + +#endif diff --git a/supergameboy/common/resample/cic3.h b/supergameboy/common/resample/cic3.h new file mode 100644 index 00000000..85b9dcee --- /dev/null +++ b/supergameboy/common/resample/cic3.h @@ -0,0 +1,382 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre AamÃ¥s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef CIC3_H +#define CIC3_H + +#include "subresampler.h" + +template +class Cic3Core { +// enum { BUFLEN = 64 }; +// unsigned long buf[BUFLEN]; + unsigned long sum1; + unsigned long sum2; + unsigned long sum3; + unsigned long prev1; + unsigned long prev2; + unsigned long prev3; + unsigned div_; + unsigned nextdivn; +// unsigned bufpos; + +public: + Cic3Core(const unsigned div = 1) { + reset(div); + } + + unsigned div() const { return div_; } + std::size_t filter(short *out, const short *in, std::size_t inlen); + void reset(unsigned div); +}; + +template +void Cic3Core::reset(const unsigned div) { + sum3 = sum2 = sum1 = 0; + prev3 = prev2 = prev1 = 0; + this->div_ = div; + nextdivn = div; +// bufpos = div - 1; +} + +template +std::size_t Cic3Core::filter(short *out, const short *const in, std::size_t inlen) { +// const std::size_t produced = (inlen + div_ - (bufpos + 1)) / div_; + const std::size_t produced = (inlen + div_ - nextdivn) / div_; + const long mul = 0x10000 / (div_ * div_ * div_); // trouble if div is too large, may be better to only support power of 2 div + const short *s = in; + + /*unsigned long sm1 = sum1; + unsigned long sm2 = sum2; + unsigned long sm3 = sum3; + + while (inlen >> 1) { + unsigned n = (inlen < BUFLEN ? inlen >> 1 : BUFLEN >> 1); + const unsigned end = n * 2; + unsigned i = 0; + + do { + unsigned long s1 = sm1 += static_cast(*s); + s += channels; + sm1 += static_cast(*s); + s += channels; + unsigned long s2 = sm2 += s1; + sm2 += sm1; + buf[i++] = sm3 += s2; + buf[i++] = sm3 += sm2; + } while (--n); + + while (bufpos < end) { + const unsigned long out3 = buf[bufpos] - prev3; + prev3 = buf[bufpos]; + bufpos += div_; + + const unsigned long out2 = out3 - prev2; + prev2 = out3; + + *out = static_cast(out2 - prev1) * mul / 0x10000; + prev1 = out2; + out += channels; + } + + bufpos -= end; + inlen -= end; + } + + if (inlen) { + unsigned n = inlen; + unsigned i = 0; + + do { + sm1 += static_cast(*s); + s += channels; + sm2 += sm1; + buf[i++] = sm3 += sm2; + } while (--n); + + while (bufpos < inlen) { + const unsigned long out3 = buf[bufpos] - prev3; + prev3 = buf[bufpos]; + bufpos += div_; + + const unsigned long out2 = out3 - prev2; + prev2 = out3; + + *out = static_cast(out2 - prev1) * mul / 0x10000; + prev1 = out2; + out += channels; + } + + bufpos -= inlen; + } + + sum1 = sm1; + sum2 = sm2; + sum3 = sm3;*/ + + + unsigned long sm1 = sum1; + unsigned long sm2 = sum2; + unsigned long sm3 = sum3; + + if (inlen >= nextdivn) { + unsigned divn = nextdivn; + std::size_t n = produced; + + do { + do { + sm1 += static_cast(*s); + sm2 += sm1; + sm3 += sm2; + s += channels; + } while (--divn); + + const unsigned long out3 = sm3 - prev3; + prev3 = sm3; + + const unsigned long out2 = out3 - prev2; + prev2 = out3; + + *out = static_cast(out2 - prev1) * mul / 0x10000; + prev1 = out2; + out += channels; + + divn = div_; + } while (--n); + + nextdivn = div_; + } + + { + unsigned divn = (in + inlen * channels - s) / channels; + nextdivn -= divn; + + while (divn--) { + sm1 += static_cast(*s); + sm2 += sm1; + sm3 += sm2; + s += channels; + } + } + + sum1 = sm1; + sum2 = sm2; + sum3 = sm3; + + return produced; +} + +/*template +class Cic3EvenOddCore { + unsigned long sum1; + unsigned long sum2; + unsigned long sum3; + unsigned long prev1; + unsigned long prev2; + unsigned long prev3; + unsigned div_; + unsigned nextdivn; + + static int getMul(unsigned div) { + return 0x10000 / (div * div * div); // trouble if div is too large, may be better to only support power of 2 div + } + + void filterEven(short *out, const short *s, std::size_t n); + void filterOdd(short *out, const short *s, std::size_t n); + +public: + Cic3EvenOddCore(const unsigned div = 2) { + reset(div); + } + + unsigned div() const { return div_; } + std::size_t filter(short *out, const short *in, std::size_t inlen); + void reset(unsigned div); +}; + +template +void Cic3EvenOddCore::reset(const unsigned div) { + sum3 = sum2 = sum1 = 0; + prev3 = prev2 = prev1 = 0; + this->div_ = div; + nextdivn = div; +} + +template +void Cic3EvenOddCore::filterEven(short *out, const short *s, std::size_t n) { + const int mul = getMul(div_); + unsigned long sm1 = sum1; + unsigned long sm2 = sum2; + unsigned long sm3 = sum3; + + while (n--) { + { + unsigned sn = div_ >> 1; + + do { + unsigned long s1 = sm1 += static_cast(*s); + s += channels; + sm1 += static_cast(*s); + s += channels; + unsigned long s2 = sm2 += s1; + sm2 += sm1; + sm3 += s2; + sm3 += sm2; + } while (--sn); + } + + const unsigned long out3 = sm3 - prev3; + prev3 = sm3; + const unsigned long out2 = out3 - prev2; + prev2 = out3; + *out = static_cast(out2 - prev1) * mul / 0x10000; + prev1 = out2; + out += channels; + } + + sum1 = sm1; + sum2 = sm2; + sum3 = sm3; +} + +template +void Cic3EvenOddCore::filterOdd(short *out, const short *s, std::size_t n) { + const int mul = getMul(div_); + unsigned long sm1 = sum1; + unsigned long sm2 = sum2; + unsigned long sm3 = sum3; + + while (n--) { + { + unsigned sn = div_ >> 1; + + do { + unsigned long s1 = sm1 += static_cast(*s); + s += channels; + sm1 += static_cast(*s); + s += channels; + unsigned long s2 = sm2 += s1; + sm2 += sm1; + sm3 += s2; + sm3 += sm2; + } while (--sn); + } + + sm1 += static_cast(*s); + s += channels; + sm2 += sm1; + sm3 += sm2; + + const unsigned long out3 = sm3 - prev3; + prev3 = sm3; + const unsigned long out2 = out3 - prev2; + prev2 = out3; + *out = static_cast(out2 - prev1) * mul / 0x10000; + prev1 = out2; + out += channels; + } + + sum1 = sm1; + sum2 = sm2; + sum3 = sm3; +} + +template +std::size_t Cic3EvenOddCore::filter(short *out, const short *const in, std::size_t inlen) { + short *const outStart = out; + const short *s = in; + + if (inlen >= nextdivn) { + { + { + unsigned divn = nextdivn; + + do { + sum1 += static_cast(*s); + s += channels; + sum2 += sum1; + sum3 += sum2; + } while (--divn); + } + + const unsigned long out3 = sum3 - prev3; + prev3 = sum3; + const unsigned long out2 = out3 - prev2; + prev2 = out3; + *out = static_cast(out2 - prev1) * getMul(div_) / 0x10000; + prev1 = out2; + out += channels; + } + + std::size_t n = (inlen - nextdivn) / div_; + + if (div_ & 1) + filterOdd(out, s, n); + else + filterEven(out, s, n); + + s += n * div_ * channels; + out += n * channels; + nextdivn = div_; + } + + { + unsigned divn = inlen - (s - in) / channels; + nextdivn -= divn; + + while (divn--) { + sum1 += static_cast(*s); + s += channels; + sum2 += sum1; + sum3 += sum2; + } + } + + return (out - outStart) / channels; +}*/ + +template +class Cic3 : public SubResampler { + Cic3Core cics[channels]; + +public: + enum { MAX_DIV = 23 }; + Cic3(unsigned div); + std::size_t resample(short *out, const short *in, std::size_t inlen); + unsigned mul() const { return 1; } + unsigned div() const { return cics[0].div(); } +}; + +template +Cic3::Cic3(const unsigned div) { + for (unsigned i = 0; i < channels; ++i) + cics[i].reset(div); +} + +template +std::size_t Cic3::resample(short *const out, const short *const in, const std::size_t inlen) { + std::size_t samplesOut; + + for (unsigned i = 0; i < channels; ++i) { + samplesOut = cics[i].filter(out + i, in + i, inlen); + } + + return samplesOut; +} + +#endif diff --git a/supergameboy/common/resample/cic4.h b/supergameboy/common/resample/cic4.h new file mode 100644 index 00000000..430cb03d --- /dev/null +++ b/supergameboy/common/resample/cic4.h @@ -0,0 +1,237 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre AamÃ¥s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef CIC4_H +#define CIC4_H + +#include "subresampler.h" + +template +class Cic4Core { + enum { BUFLEN = 64 }; + unsigned long buf[BUFLEN]; + unsigned long sum1; + unsigned long sum2; + unsigned long sum3; + unsigned long sum4; + unsigned long prev1; + unsigned long prev2; + unsigned long prev3; + unsigned long prev4; + unsigned div_; +// unsigned nextdivn; + unsigned bufpos; + +public: + Cic4Core(const unsigned div = 1) { + reset(div); + } + + unsigned div() const { return div_; } + std::size_t filter(short *out, const short *in, std::size_t inlen); + void reset(unsigned div); +}; + +template +void Cic4Core::reset(const unsigned div) { + sum4 = sum3 = sum2 = sum1 = 0; + prev4 = prev3 = prev2 = prev1 = 0; + this->div_ = div; +// nextdivn = div; + bufpos = div - 1; +} + +template +std::size_t Cic4Core::filter(short *out, const short *const in, std::size_t inlen) { + const std::size_t produced = (inlen + div_ - (bufpos + 1)) / div_; +// const std::size_t produced = (inlen + div_ - nextdivn) / div_; + const long mul = 0x10000 / (div_ * div_ * div_ * div_); // trouble if div is too large, may be better to only support power of 2 div + const short *s = in; + + unsigned long sm1 = sum1; + unsigned long sm2 = sum2; + unsigned long sm3 = sum3; + unsigned long sm4 = sum4; + + while (inlen >> 2) { + unsigned n = (inlen < BUFLEN ? inlen >> 2 : BUFLEN >> 2); + const unsigned end = n * 4; + unsigned i = 0; + + do { + unsigned long s1 = sm1 += static_cast(*s); + s += channels; + sm1 += static_cast(*s); + s += channels; + unsigned long s2 = sm2 += s1; + sm2 += sm1; + unsigned long s3 = sm3 += s2; + sm3 += sm2; + buf[i++] = sm4 += s3; + buf[i++] = sm4 += sm3; + s1 = sm1 += static_cast(*s); + s += channels; + sm1 += static_cast(*s); + s += channels; + s2 = sm2 += s1; + sm2 += sm1; + s3 = sm3 += s2; + sm3 += sm2; + buf[i++] = sm4 += s3; + buf[i++] = sm4 += sm3; + } while (--n); + + while (bufpos < end) { + const unsigned long out4 = buf[bufpos] - prev4; + prev4 = buf[bufpos]; + bufpos += div_; + + const unsigned long out3 = out4 - prev3; + prev3 = out4; + const unsigned long out2 = out3 - prev2; + prev2 = out3; + + *out = static_cast(out2 - prev1) * mul / 0x10000; + prev1 = out2; + out += channels; + } + + bufpos -= end; + inlen -= end; + } + + if (inlen) { + unsigned n = inlen; + unsigned i = 0; + + do { + sm1 += static_cast(*s); + s += channels; + sm2 += sm1; + sm3 += sm2; + buf[i++] = sm4 += sm3; + } while (--n); + + while (bufpos < inlen) { + const unsigned long out4 = buf[bufpos] - prev4; + prev4 = buf[bufpos]; + bufpos += div_; + + const unsigned long out3 = out4 - prev3; + prev3 = out4; + const unsigned long out2 = out3 - prev2; + prev2 = out3; + + *out = static_cast(out2 - prev1) * mul / 0x10000; + prev1 = out2; + out += channels; + } + + bufpos -= inlen; + } + + sum1 = sm1; + sum2 = sm2; + sum3 = sm3; + sum4 = sm4; + + /*unsigned long sm1 = sum1; + unsigned long sm2 = sum2; + unsigned long sm3 = sum3; + unsigned long sm4 = sum4; + + if (produced) { + unsigned divn = nextdivn; + std::size_t n = produced; + + do { + do { + sm1 += static_cast(*s); + s += channels; + sm2 += sm1; + sm3 += sm2; + sm4 += sm3; + } while (--divn); + + const unsigned long out4 = sm4 - prev4; + prev4 = sm4; + const unsigned long out3 = out4 - prev3; + prev3 = out4; + const unsigned long out2 = out3 - prev2; + prev2 = out3; + *out = static_cast(out2 - prev1) * mul / 0x10000; + prev1 = out2; + out += channels; + + divn = div_; + } while (--n); + + nextdivn = div_; + } + + { + unsigned divn = (in + inlen * channels - s) / channels; + nextdivn -= divn; + + while (divn--) { + sm1 += static_cast(*s); + s += channels; + sm2 += sm1; + sm3 += sm2; + sm4 += sm3; + } + } + + sum1 = sm1; + sum2 = sm2; + sum3 = sm3; + sum4 = sm4;*/ + + return produced; +} + +template +class Cic4 : public SubResampler { + Cic4Core cics[channels]; + +public: + enum { MAX_DIV = 13 }; + Cic4(unsigned div); + std::size_t resample(short *out, const short *in, std::size_t inlen); + unsigned mul() const { return 1; } + unsigned div() const { return cics[0].div(); } +}; + +template +Cic4::Cic4(const unsigned div) { + for (unsigned i = 0; i < channels; ++i) + cics[i].reset(div); +} + +template +std::size_t Cic4::resample(short *const out, const short *const in, const std::size_t inlen) { + std::size_t samplesOut; + + for (unsigned i = 0; i < channels; ++i) { + samplesOut = cics[i].filter(out + i, in + i, inlen); + } + + return samplesOut; +} + +#endif diff --git a/supergameboy/common/resample/convoluter.h b/supergameboy/common/resample/convoluter.h new file mode 100644 index 00000000..41fab0d0 --- /dev/null +++ b/supergameboy/common/resample/convoluter.h @@ -0,0 +1,156 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre AamÃ¥s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef CONVOLUTER_H +#define CONVOLUTER_H + +#include +#include + +template +class PolyPhaseConvoluter { + const short *kernel; + short *prevbuf; + + unsigned phaseLen; + unsigned div_; + unsigned x_; + +public: + PolyPhaseConvoluter() : kernel(NULL), prevbuf(NULL), phaseLen(0), div_(0), x_(0) {} + PolyPhaseConvoluter(const short *kernel, unsigned phaseLen, unsigned div) { reset(kernel, phaseLen, div); } + ~PolyPhaseConvoluter() { delete[] prevbuf; } + void reset(const short *kernel, unsigned phaseLen, unsigned div); + std::size_t filter(short *out, const short *in, std::size_t inlen); + void adjustDiv(const unsigned div) { this->div_ = div; } + unsigned div() const { return div_; } +}; + +template +void PolyPhaseConvoluter::reset(const short *const kernel, const unsigned phaseLen, const unsigned div) { + this->kernel = kernel; + this->phaseLen = phaseLen; + this->div_ = div; + x_ = 0; + delete[] prevbuf; + prevbuf = new short[phaseLen]; + std::fill(prevbuf, prevbuf + phaseLen, 0); +} + +template +std::size_t PolyPhaseConvoluter::filter(short *out, const short *const in, std::size_t inlen) { + if (!kernel || !inlen) + return 0; + + /*for (std::size_t x = 0; x < inlen + M; ++x) { + const int end = x < inlen ? M + 1 : inlen + M - x; + int j = x < M ? M - x : 0; + j += (phases - (x - M + j) % phases) % phases; // adjust j so we don't start on a virtual 0 sample + + for (; j < end; j += phases) { + buffer[x] += kernel[j] * start[(x - M + j) / phases]; + } + }*/ + + /*for (std::size_t x = 0; x < inlen + M; ++x) { + const int end = x < inlen ? M + 1 : inlen + M - x; + int j = x < M ? M - x : 0; + j += (phases - (x - M + j) % phases) % phases; // adjust j so we don't start on a virtual 0 sample + const short *k = kernel + (j % phases) * phaseLen + j / phases; + const short *s = start + (x - M + j) / phases; + int n = ((end - j) + phases - 1) / phases; + + do { + buffer[x] += *k++ * *s++; + } while (--n); + }*/ + + const std::size_t M = phaseLen * phases - 1; + inlen *= phases; + std::size_t x = x_; + + for (; x < (M < inlen ? M : inlen); x += div_) { + long acc = 0; + const unsigned phase = (phases - (x + 1) % phases) % phases; // adjust phase so we don't start on a virtual 0 sample + const short *s = prevbuf + (x + 1 + phase) / phases; + const short *k = kernel + phase * phaseLen; + unsigned n = prevbuf + phaseLen - s; + + while (n--) { + acc += *k++ * *s++; + } + + s = in; + n = x / phases + 1; + + do { + acc += *k++ * *s; + s += channels; + } while (--n); + + *out = acc / 0x10000; + out += channels; + } + + for (; x < inlen; x += div_) { + long acc = 0; + const unsigned phase = (phases - (x - M) % phases) % phases; // adjust phase so we don't start on a virtual 0 sample + const short *s = in + ((x - M + phase) / phases) * channels; + const short *k = kernel + phase * phaseLen; +// unsigned n = (M + 1/* - phase + phases - 1*/) / phases; + unsigned n = phaseLen; + + do { + acc += *k++ * *s; + s += channels; + } while (--n); + + *out = acc / 0x10000; + out += channels; + } + + const std::size_t produced = (x - x_) / div_; + x_ = x - inlen; + + inlen /= phases; + + { + short *p = prevbuf; + const short *s = in + (inlen - phaseLen) * channels; + unsigned n = phaseLen; + + if (inlen < phaseLen) { + const unsigned i = phaseLen - inlen; + + std::memmove(p, p + inlen, i * sizeof(short)); + + p += i; + n -= i; + s = in; + } + + do { + *p++ = *s; + s += channels; + } while (--n); + } + + return produced; +} + +#endif diff --git a/supergameboy/common/resample/hammingsinc.h b/supergameboy/common/resample/hammingsinc.h new file mode 100644 index 00000000..bb50daee --- /dev/null +++ b/supergameboy/common/resample/hammingsinc.h @@ -0,0 +1,100 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre AamÃ¥s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef HAMMINGSINC_H +#define HAMMINGSINC_H + +#include "convoluter.h" +#include "subresampler.h" +#include "makesinckernel.h" +#include "cic3.h" +#include +#include + +template +class HammingSinc : public SubResampler { + PolyPhaseConvoluter convoluters[channels]; + short *kernel; + + static double hammingWin(const long i, const long M) { + static const double PI = 3.14159265358979323846; + return 0.53836 - 0.46164 * std::cos(2 * PI * i / M); + } + + void init(unsigned div, unsigned phaseLen, double fc); + +public: + enum { MUL = phases }; + + typedef Cic3 Cic; + static float cicLimit() { return 4.2f; } + + class RollOff { + static unsigned toTaps(const float rollOffWidth) { + static const float widthTimesTaps = 3.0f; + return std::ceil(widthTimesTaps / rollOffWidth); + } + + static float toFc(const float rollOffStart, const int taps) { + static const float startToFcDeltaTimesTaps = 1.27f; + return startToFcDeltaTimesTaps / taps + rollOffStart; + } + + public: + const unsigned taps; + const float fc; + + RollOff(float rollOffStart, float rollOffWidth) : taps(toTaps(rollOffWidth)), fc(toFc(rollOffStart, taps)) {} + }; + + HammingSinc(unsigned div, unsigned phaseLen, double fc) { init(div, phaseLen, fc); } + HammingSinc(unsigned div, RollOff ro) { init(div, ro.taps, ro.fc); } + ~HammingSinc() { delete[] kernel; } + std::size_t resample(short *out, const short *in, std::size_t inlen); + void adjustDiv(unsigned div); + unsigned mul() const { return MUL; } + unsigned div() const { return convoluters[0].div(); } +}; + +template +void HammingSinc::init(const unsigned div, const unsigned phaseLen, const double fc) { + kernel = new short[phaseLen * phases]; + + makeSincKernel(kernel, phases, phaseLen, fc, hammingWin); + + for (unsigned i = 0; i < channels; ++i) + convoluters[i].reset(kernel, phaseLen, div); +} + +template +std::size_t HammingSinc::resample(short *const out, const short *const in, const std::size_t inlen) { + std::size_t samplesOut; + + for (unsigned i = 0; i < channels; ++i) + samplesOut = convoluters[i].filter(out + i, in + i, inlen); + + return samplesOut; +} + +template +void HammingSinc::adjustDiv(const unsigned div) { + for (unsigned i = 0; i < channels; ++i) + convoluters[i].adjustDiv(div); +} + +#endif diff --git a/supergameboy/common/resample/linint.h b/supergameboy/common/resample/linint.h new file mode 100644 index 00000000..0c6d8cb2 --- /dev/null +++ b/supergameboy/common/resample/linint.h @@ -0,0 +1,129 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre AamÃ¥s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef LININT_H +#define LININT_H + +#include +#include "resampler.h" +#include "u48div.h" + +template +class LinintCore { + unsigned long ratio; + std::size_t pos_; + unsigned fracPos_; + int prevSample_; + +public: + LinintCore(long inRate = 1, long outRate = 1) { init(inRate, outRate); } + void adjustRate(long inRate, long outRate) { ratio = (static_cast(inRate) / outRate) * 0x10000 + 0.5; } + void exactRatio(unsigned long &mul, unsigned long &div) const { mul = 0x10000; div = ratio; } + void init(long inRate, long outRate); + std::size_t maxOut(std::size_t inlen) const { return inlen ? u48div(inlen - 1, 0xFFFF, ratio) + 1 : 0; } + std::size_t resample(short *out, const short *in, std::size_t inlen); +}; + +template +void LinintCore::init(const long inRate, const long outRate) { + adjustRate(inRate, outRate); + pos_ = (ratio >> 16) + 1; + fracPos_ = ratio & 0xFFFF; + prevSample_ = 0; +} + +template +std::size_t LinintCore::resample(short *const out, const short *const in, const std::size_t inlen) { + std::size_t opos = 0; + std::size_t pos = pos_; + unsigned fracPos = fracPos_; + int prevSample = prevSample_; + + if (pos < inlen) { + if (pos != 0) + prevSample = in[(pos-1) * channels]; + + for (;;) { + out[opos] = prevSample + (in[pos * channels] - prevSample) * static_cast(fracPos) / 0x10000; + opos += channels; + + { + const unsigned long next = ratio + fracPos; + + pos += next >> 16; + fracPos = next & 0xFFFF; + } + + if (pos < inlen) { + prevSample = in[(pos-1) * channels]; + } else + break; + } + + if (pos == inlen) + prevSample = in[(pos-1) * channels]; + } + +// const std::size_t produced = ((pos - pos_) * 0x10000 + fracPos - fracPos_) / ratio; + + pos_ = pos - inlen; + fracPos_ = fracPos; + prevSample_ = prevSample; + + return opos / channels; +} + +template +class Linint : public Resampler { + LinintCore cores[channels]; + +public: + Linint(long inRate, long outRate); + void adjustRate(long inRate, long outRate); + void exactRatio(unsigned long &mul, unsigned long &div) const { cores[0].exactRatio(mul, div); } + std::size_t maxOut(std::size_t inlen) const { return cores[0].maxOut(inlen); } + std::size_t resample(short *out, const short *in, std::size_t inlen); +}; + +template +Linint::Linint(const long inRate, const long outRate) { + setRate(inRate, outRate); + + for (unsigned i = 0; i < channels; ++i) + cores[i].init(inRate, outRate); +} + +template +void Linint::adjustRate(const long inRate, const long outRate) { + setRate(inRate, outRate); + + for (unsigned i = 0; i < channels; ++i) + cores[i].adjustRate(inRate, outRate); +} + +template +std::size_t Linint::resample(short *const out, const short *const in, const std::size_t inlen) { + std::size_t outlen = 0; + + for (unsigned i = 0; i < channels; ++i) + outlen = cores[i].resample(out + i, in + i, inlen); + + return outlen; +} + +#endif diff --git a/supergameboy/common/resample/makesinckernel.h b/supergameboy/common/resample/makesinckernel.h new file mode 100644 index 00000000..c6515f2d --- /dev/null +++ b/supergameboy/common/resample/makesinckernel.h @@ -0,0 +1,152 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre AamÃ¥s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef MAKE_SINC_KERNEL_H +#define MAKE_SINC_KERNEL_H + +#include +#include + +template +void makeSincKernel(short *const kernel, const unsigned phases, const unsigned phaseLen, double fc, Window win) { + static const double PI = 3.14159265358979323846; + fc /= phases; + + /*{ + double *const dkernel = new double[phaseLen * phases]; + const long M = static_cast(phaseLen) * phases - 1; + + for (long i = 0; i < M + 1; ++i) { + const double sinc = i * 2 == M ? + PI * fc : + std::sin(PI * fc * (i * 2 - M)) / (i * 2 - M); + + dkernel[(i % phases) * phaseLen + i / phases] = win(i, M) * sinc; + } + + double maxabsgain = 0; + + for (unsigned ph = 0; ph < phases; ++ph) { + double gain = 0; + double absgain = 0; + + for (unsigned i = 0; i < phaseLen; ++i) { + gain += dkernel[ph * phaseLen + i]; + absgain += std::abs(dkernel[ph * phaseLen + i]); + } + + gain = 1.0 / gain; + + // Per phase normalization to avoid DC fluctuations. + for (unsigned i = 0; i < phaseLen; ++i) + dkernel[ph * phaseLen + i] *= gain; + + absgain *= gain; + + if (absgain > maxabsgain) + maxabsgain = absgain; + } + + const double gain = 0x10000 / maxabsgain; + + for (long i = 0; i < M + 1; ++i) + kernel[i] = std::floor(dkernel[i] * gain + 0.5); + + delete[] dkernel; + }*/ + + // The following is equivalent to the more readable version above + + const long M = static_cast(phaseLen) * phases - 1; + + double *const dkernel = new double[M / 2 + 1]; + + { + double *dk = dkernel; + + for (unsigned ph = 0; ph < phases; ++ph) { + for (long i = ph; i < M / 2 + 1; i += phases) { + const double sinc = i * 2 == M ? + PI * fc : + std::sin(PI * fc * (i * 2 - M)) / (i * 2 - M); + + *dk++ = win(i, M) * sinc; + } + } + } + + double maxabsgain = 0.0; + + { + double *dkp1 = dkernel; + double *dkp2 = dkernel + M / 2; + + for (unsigned ph = 0; ph < (phases + 1) / 2; ++ph) { + double gain = 0.0; + double absgain = 0.0; + + { + const double *kp1 = dkp1; + const double *kp2 = dkp2; + long i = ph; + + for (; i < M / 2 + 1; i += phases) { + gain += *kp1; + absgain += std::abs(*kp1++); + } + + for (; i < M + 1; i += phases) { + gain += *kp2; + absgain += std::abs(*kp2--); + } + } + + gain = 1.0 / gain; + + long i = ph; + + for (; i < M / 2 + 1; i += phases) + *dkp1++ *= gain; + + if (dkp1 < dkp2) { + for (; i < M + 1; i += phases) + *dkp2-- *= gain; + } + + absgain *= gain; + + if (absgain > maxabsgain) + maxabsgain = absgain; + } + } + + const double gain = 0x10000 / maxabsgain; + const double *dk = dkernel; + + for (unsigned ph = 0; ph < phases; ++ph) { + short *k = kernel + ph * phaseLen; + short *km = kernel + M - ph * phaseLen; + + for (long i = ph; i < M / 2 + 1; i += phases) + *km-- = *k++ = std::floor(*dk++ * gain + 0.5); + } + + delete[] dkernel; +} + +#endif diff --git a/supergameboy/common/resample/rectsinc.h b/supergameboy/common/resample/rectsinc.h new file mode 100644 index 00000000..9f99ed6b --- /dev/null +++ b/supergameboy/common/resample/rectsinc.h @@ -0,0 +1,99 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre AamÃ¥s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef RECTSINC_H +#define RECTSINC_H + +#include "convoluter.h" +#include "subresampler.h" +#include "makesinckernel.h" +#include "cic2.h" +#include +#include + +template +class RectSinc : public SubResampler { + PolyPhaseConvoluter convoluters[channels]; + short *kernel; + + static double rectWin(const long /*i*/, const long /*M*/) { + return 1; + } + + void init(unsigned div, unsigned phaseLen, double fc); + +public: + enum { MUL = phases }; + + typedef Cic2 Cic; + static float cicLimit() { return 2.0f; } + + class RollOff { + static unsigned toTaps(const float rollOffWidth) { + static const float widthTimesTaps = 0.9f; + return std::ceil(widthTimesTaps / rollOffWidth); + } + + static float toFc(const float rollOffStart, const int taps) { + static const float startToFcDeltaTimesTaps = 0.43f; + return startToFcDeltaTimesTaps / taps + rollOffStart; + } + + public: + const unsigned taps; + const float fc; + + RollOff(float rollOffStart, float rollOffWidth) : taps(toTaps(rollOffWidth)), fc(toFc(rollOffStart, taps)) {} + }; + + RectSinc(unsigned div, unsigned phaseLen, double fc) { init(div, phaseLen, fc); } + RectSinc(unsigned div, RollOff ro) { init(div, ro.taps, ro.fc); } + ~RectSinc() { delete[] kernel; } + std::size_t resample(short *out, const short *in, std::size_t inlen); + void adjustDiv(unsigned div); + unsigned mul() const { return MUL; } + unsigned div() const { return convoluters[0].div(); } +}; + +template +void RectSinc::init(const unsigned div, const unsigned phaseLen, const double fc) { + kernel = new short[phaseLen * phases]; + + makeSincKernel(kernel, phases, phaseLen, fc, rectWin); + + for (unsigned i = 0; i < channels; ++i) + convoluters[i].reset(kernel, phaseLen, div); +} + +template +std::size_t RectSinc::resample(short *const out, const short *const in, const std::size_t inlen) { + std::size_t samplesOut; + + for (unsigned i = 0; i < channels; ++i) + samplesOut = convoluters[i].filter(out + i, in + i, inlen); + + return samplesOut; +} + +template +void RectSinc::adjustDiv(const unsigned div) { + for (unsigned i = 0; i < channels; ++i) + convoluters[i].adjustDiv(div); +} + +#endif diff --git a/supergameboy/common/resample/resampler.h b/supergameboy/common/resample/resampler.h new file mode 100644 index 00000000..f3d448d9 --- /dev/null +++ b/supergameboy/common/resample/resampler.h @@ -0,0 +1,43 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre AamÃ¥s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef RESAMPLER_H +#define RESAMPLER_H + +#include + +class Resampler { + long inRate_; + long outRate_; + +protected: + void setRate(const long inRate, const long outRate) { inRate_ = inRate; outRate_ = outRate; } + +public: + Resampler() : inRate_(0), outRate_(0) {} + long inRate() const { return inRate_; } + long outRate() const { return outRate_; } + + virtual void adjustRate(long inRate, long outRate) = 0; + virtual void exactRatio(unsigned long &mul, unsigned long &div) const = 0; + virtual std::size_t maxOut(std::size_t inlen) const = 0; + virtual std::size_t resample(short *out, const short *in, std::size_t inlen) = 0; + virtual ~Resampler() {} +}; + +#endif diff --git a/supergameboy/common/resample/resamplerinfo.cpp b/supergameboy/common/resample/resamplerinfo.cpp new file mode 100644 index 00000000..3abcdaf8 --- /dev/null +++ b/supergameboy/common/resample/resamplerinfo.cpp @@ -0,0 +1,61 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre AamÃ¥s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "resamplerinfo.h" +#include "chainresampler.h" +#include "hammingsinc.h" +#include "blackmansinc.h" +#include "rectsinc.h" +#include "linint.h" + +struct LinintInfo { + static Resampler* create(long inRate, long outRate, std::size_t) { return new Linint<2>(inRate, outRate); } +}; + +struct RectsincInfo { + static Resampler* create(long inRate, long outRate, std::size_t periodSz) { + ChainResampler *r = new ChainResampler; + r->init(inRate, outRate, periodSz); + return r; + } +}; + +struct HammingsincInfo { + static Resampler* create(long inRate, long outRate, std::size_t periodSz) { + ChainResampler *r = new ChainResampler; + r->init(inRate, outRate, periodSz); + return r; + } +}; + +struct BlackmansincInfo { + static Resampler* create(long inRate, long outRate, std::size_t periodSz) { + ChainResampler *r = new ChainResampler; + r->init(inRate, outRate, periodSz); + return r; + } +}; + +const ResamplerInfo ResamplerInfo::resamplers[] = { + { "2-tap linear interpolation", LinintInfo::create }, + { "Rectangular windowed sinc (~20 dB SNR)", RectsincInfo::create }, + { "Hamming windowed sinc (~50 dB SNR)", HammingsincInfo::create }, + { "Blackman windowed sinc (~70 dB SNR)", BlackmansincInfo::create } +}; + +const unsigned ResamplerInfo::num_ = sizeof(ResamplerInfo::resamplers) / sizeof(ResamplerInfo); diff --git a/supergameboy/common/resample/resamplerinfo.h b/supergameboy/common/resample/resamplerinfo.h new file mode 100644 index 00000000..23f4a545 --- /dev/null +++ b/supergameboy/common/resample/resamplerinfo.h @@ -0,0 +1,36 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre AamÃ¥s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef RESAMPLER_INFO_H +#define RESAMPLER_INFO_H + +#include "resampler.h" + +struct ResamplerInfo { + const char *desc; + Resampler* (*create)(long inRate, long outRate, std::size_t periodSz); + + static unsigned num() { return num_; } + static const ResamplerInfo& get(unsigned n) { return resamplers[n]; } + +private: + static const ResamplerInfo resamplers[]; + static const unsigned num_; +}; + +#endif diff --git a/supergameboy/common/resample/subresampler.h b/supergameboy/common/resample/subresampler.h new file mode 100644 index 00000000..134ec80b --- /dev/null +++ b/supergameboy/common/resample/subresampler.h @@ -0,0 +1,33 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre AamÃ¥s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef SUBRESAMPLER_H +#define SUBRESAMPLER_H + +#include + +class SubResampler { +public: + virtual std::size_t resample(short *out, const short *in, std::size_t inlen) = 0; + virtual unsigned mul() const = 0; + virtual unsigned div() const = 0; + virtual void adjustDiv(unsigned /*div*/) {} + virtual ~SubResampler() {} +}; + +#endif diff --git a/supergameboy/common/resample/u48div.cpp b/supergameboy/common/resample/u48div.cpp new file mode 100644 index 00000000..077ddfd9 --- /dev/null +++ b/supergameboy/common/resample/u48div.cpp @@ -0,0 +1,54 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre AamÃ¥s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "u48div.h" + +unsigned long u48div(unsigned long num1, unsigned num2, const unsigned long den) { + unsigned long res = 0; + unsigned s = 16; + + do { + if (num1 < 0x10000) { + num1 <<= s; + num1 |= num2 & ((1 << s) - 1); + s = 0; + } else { + if (num1 < 0x1000000) { + const unsigned maxs = s < 8 ? s : 8; + num1 <<= maxs; + num1 |= (num2 >> (s -= maxs)) & ((1 << maxs) - 1); + } + + if (num1 < 0x10000000) { + const unsigned maxs = s < 4 ? s : 4; + num1 <<= maxs; + num1 |= (num2 >> (s -= maxs)) & ((1 << maxs) - 1); + } + + while (num1 < den && s) { + num1 <<= 1; // if this overflows we're screwed + num1 |= num2 >> --s & 1; + } + } + + res += (num1 / den) << s; + num1 = (num1 % den); + } while (s); + + return res; +} diff --git a/supergameboy/common/resample/u48div.h b/supergameboy/common/resample/u48div.h new file mode 100644 index 00000000..26b16af4 --- /dev/null +++ b/supergameboy/common/resample/u48div.h @@ -0,0 +1,24 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre AamÃ¥s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef U48DIV_H +#define U48DIV_H + +unsigned long u48div(unsigned long num1, unsigned num2, unsigned long den); + +#endif diff --git a/supergameboy/common/resample/upsampler.h b/supergameboy/common/resample/upsampler.h new file mode 100644 index 00000000..8bf88d8a --- /dev/null +++ b/supergameboy/common/resample/upsampler.h @@ -0,0 +1,51 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre AamÃ¥s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef UPSAMPLER_H +#define UPSAMPLER_H + +#include "subresampler.h" +#include + +template +class Upsampler : public SubResampler { + unsigned mul_; + +public: + Upsampler(const unsigned mul) : mul_(mul) {} + std::size_t resample(short *out, const short *in, std::size_t inlen); + unsigned mul() const { return mul_; } + unsigned div() const { return 1; } +}; + +template +std::size_t Upsampler::resample(short *out, const short *in, std::size_t inlen) { + if (inlen) { + std::memset(out, 0, inlen * mul_ * sizeof(short) * channels); + + do { + std::memcpy(out, in, sizeof(short) * channels); + in += channels; + out += mul_ * channels; + } while (--inlen); + } + + return inlen * mul_; +} + +#endif diff --git a/supergameboy/common/ringbuffer.h b/supergameboy/common/ringbuffer.h new file mode 100644 index 00000000..34f22bfe --- /dev/null +++ b/supergameboy/common/ringbuffer.h @@ -0,0 +1,112 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre AamÃ¥s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef RINGBUFFER_H +#define RINGBUFFER_H + +#include "array.h" +#include +#include +#include + +template +class RingBuffer { + Array buf; + std::size_t sz; + std::size_t rpos; + std::size_t wpos; + +public: + RingBuffer(const std::size_t sz_in = 0) : sz(0), rpos(0), wpos(0) { reset(sz_in); } + + std::size_t avail() const { + return (wpos < rpos ? 0 : sz) + rpos - wpos - 1; + } + + void clear() { + wpos = rpos = 0; + } + + void fill(T value); + + void read(T *out, std::size_t num); + + void reset(std::size_t sz_in); + + std::size_t size() const { + return sz - 1; + } + + std::size_t used() const { + return (wpos < rpos ? sz : 0) + wpos - rpos; + } + + void write(const T *in, std::size_t num); +}; + +template +void RingBuffer::fill(const T value) { + std::fill(buf + 0, buf + sz, value); + rpos = 0; + wpos = sz - 1; +} + +template +void RingBuffer::read(T *out, std::size_t num) { + if (rpos + num > sz) { + const std::size_t n = sz - rpos; + + std::memcpy(out, buf + rpos, n * sizeof(T)); + + rpos = 0; + num -= n; + out += n; + } + + std::memcpy(out, buf + rpos, num * sizeof(T)); + + if ((rpos += num) == sz) + rpos = 0; +} + +template +void RingBuffer::reset(const std::size_t sz_in) { + sz = sz_in + 1; + rpos = wpos = 0; + buf.reset(sz_in ? sz : 0); +} + +template +void RingBuffer::write(const T *in, std::size_t num) { + if (wpos + num > sz) { + const std::size_t n = sz - wpos; + + std::memcpy(buf + wpos, in, n * sizeof(T)); + + wpos = 0; + num -= n; + in += n; + } + + std::memcpy(buf + wpos, in, num * sizeof(T)); + + if ((wpos += num) == sz) + wpos = 0; +} + +#endif diff --git a/supergameboy/common/usec.h b/supergameboy/common/usec.h new file mode 100644 index 00000000..2bc889cf --- /dev/null +++ b/supergameboy/common/usec.h @@ -0,0 +1,31 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre AamÃ¥s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef USEC_H +#define USEC_H + +typedef unsigned long usec_t; + +static inline usec_t negate(usec_t t) { + return usec_t(0) - t; +} + +usec_t getusecs(); +void usecsleep(usec_t usecs); + +#endif diff --git a/supergameboy/interface/interface.cpp b/supergameboy/interface/interface.cpp new file mode 100644 index 00000000..b726b147 --- /dev/null +++ b/supergameboy/interface/interface.cpp @@ -0,0 +1,373 @@ +SuperGameBoy supergameboy; + +//==================== +//SuperGameBoy::Packet +//==================== + +const char SuperGameBoy::command_name[32][64] = { + "PAL01", "PAL23", "PAL03", "PAL12", + "ATTR_BLK", "ATTR_LIN", "ATTR_DIV", "ATTR_CHR", + "SOUND", "SOU_TRN", "PAL_SET", "PAL_TRN", + "ATRC_EN", "TEST_EN", "ICON_EN", "DATA_SND", + "DATA_TRN", "MLT_REQ", "JUMP", "CHR_TRN", + "PCT_TRN", "ATTR_TRN", "ATTR_SET", "MASK_EN", + "OBJ_TRN", "19_???", "1A_???", "1B_???", + "1C_???", "1D_???", "1E_ROM", "1F_???", +}; + +void SuperGameBoy::joyp_write(bool p15, bool p14) { + //=============== + //joypad handling + //=============== + + if(p15 == 1 && p14 == 1) { + if(joyp15lock == 0 && joyp14lock == 0) { + joyp15lock = 1; + joyp14lock = 1; + joyp_id = (joyp_id + 1) & 3; + } + } + + if(p15 == 0 && p14 == 1) joyp15lock = 0; + if(p15 == 1 && p14 == 0) joyp14lock = 0; + + //=============== + //packet handling + //=============== + + if(p15 == 0 && p14 == 0) { + //pulse + pulselock = false; + packetoffset = 0; + bitoffset = 0; + strobelock = true; + packetlock = false; + return; + } + + if(pulselock) return; + + if(p15 == 1 && p14 == 1) { + strobelock = false; + return; + } + + if(strobelock) { + if(p15 == 1 || p14 == 1) { + //malformed packet + packetlock = false; + pulselock = true; + bitoffset = 0; + packetoffset = 0; + } else { + return; + } + } + + //p15:1, p14:0 = 0 + //p15:0, p14:1 = 1 + bool bit = (p15 == 0); + strobelock = true; + + if(packetlock) { + if(p15 == 1 && p14 == 0) { + if((joyp_packet[0] >> 3) == 0x11) { + mmio.mlt_req = joyp_packet[1] & 3; + if(mmio.mlt_req == 2) mmio.mlt_req = 3; + joyp_id = 0; + } + + if(packetsize < 64) packet[packetsize++] = joyp_packet; + packetlock = false; + pulselock = true; + } + return; + } + + bitdata = (bit << 7) | (bitdata >> 1); + if(++bitoffset < 8) return; + + bitoffset = 0; + joyp_packet[packetoffset] = bitdata; + if(++packetoffset < 16) return; + packetlock = true; +} + +//================== +//SuperGameBoy::Core +//================== + +static uint8_t null_rom[32768]; + +bool SuperGameBoy::init(bool version_) { + if(!romdata) { romdata = null_rom; romsize = 32768; } + version = version_; + + gambatte = new Gambatte::GB; + gambatte->setVideoBlitter(this); + gambatte->setInputStateGetter(this); + + return true; +} + +void SuperGameBoy::term() { + if(gambatte) { + delete gambatte; + gambatte = 0; + } +} + +unsigned SuperGameBoy::run(uint32_t *samplebuffer, unsigned samples) { + if((mmio.r6003 & 0x80) == 0) { + //Gameboy is inactive + samplebuffer[0] = 0; + return 1; + } + + return gambatte->runFor(samplebuffer, samples); +} + +void SuperGameBoy::save() { + gambatte->saveSavedata(); +} + +void SuperGameBoy::serialize(nall::serializer &s) { + s.integer(vram_row); + s.array(vram); + + s.integer(mmio.r6000); + s.integer(mmio.r6003); + s.integer(mmio.r6004); + s.integer(mmio.r6005); + s.integer(mmio.r6006); + s.integer(mmio.r6007); + s.array(mmio.r7000); + s.integer(mmio.r7800); + s.integer(mmio.mlt_req); + + for(unsigned i = 0; i < 64; i++) s.array(packet[i].data); + s.integer(packetsize); + + s.integer(joyp_id); + s.integer(joyp15lock); + s.integer(joyp14lock); + s.integer(pulselock); + s.integer(strobelock); + s.integer(packetlock); + s.array(joyp_packet.data); + s.integer(packetoffset); + s.integer(bitdata); + s.integer(bitoffset); + + uint8_t *savestate = new uint8_t[256 * 1024]; + if(s.mode() == serializer::Load) { + s.array(savestate, 256 * 1024); + + file fp; + if(fp.open("supergameboy-state.tmp", file::mode_write)) { + fp.write(savestate, 256 * 1024); + fp.close(); + + gambatte->loadState("supergameboy-state.tmp"); + unlink("supergameboy-state.tmp"); + } + } else if(s.mode() == serializer::Save) { + gambatte->saveState("supergameboy-state.tmp"); + + file fp; + if(fp.open("supergameboy-state.tmp", file::mode_read)) { + fp.read(savestate, fp.size() < 256 * 1024 ? fp.size() : 256 * 1024); + fp.close(); + } + + unlink("supergameboy-state.tmp"); + s.array(savestate, 256 * 1024); + } else if(s.mode() == serializer::Size) { + s.array(savestate, 256 * 1024); + } + delete[] savestate; +} + +void SuperGameBoy::power() { + gambatte->load(true); + mmio_reset(); +} + +void SuperGameBoy::reset() { + gambatte->reset(); + mmio_reset(); +} + +void SuperGameBoy::row(unsigned row) { + mmio.r7800 = 0; + vram_row = row; + render(vram_row); +} + +uint8_t SuperGameBoy::read(uint16_t addr) { + //LY counter + if(addr == 0x6000) { + return gambatte->lyCounter(); + } + + //command ready port + if(addr == 0x6002) { + bool data = packetsize > 0; + if(data) { + for(unsigned i = 0; i < 16; i++) mmio.r7000[i] = packet[0][i]; + packetsize--; + for(unsigned i = 0; i < packetsize; i++) packet[i] = packet[i + 1]; + } + return data; + } + + //command port + if((addr & 0xfff0) == 0x7000) { + return mmio.r7000[addr & 15]; + } + + if(addr == 0x7800) { + uint8_t data = vram[mmio.r7800]; + mmio.r7800 = (mmio.r7800 + 1) % 320; + return data; + } + + return 0x00; +} + +void SuperGameBoy::write(uint16_t addr, uint8_t data) { + //control port + //d7 = /RESET line (0 = stop, 1 = run) + if(addr == 0x6003) { + if((mmio.r6003 & 0x80) == 0x00 && (data & 0x80) == 0x80) { + reset(); + command_1e(); + } + + mmio.r6003 = data; + return; + } + + if(addr == 0x6004) { mmio.r6004 = data; return; } //joypad 1 state + if(addr == 0x6005) { mmio.r6005 = data; return; } //joypad 2 state + if(addr == 0x6006) { mmio.r6006 = data; return; } //joypad 3 state + if(addr == 0x6007) { mmio.r6007 = data; return; } //joypad 4 state +} + +void SuperGameBoy::mmio_reset() { + mmio.r6000 = 0x00; + mmio.r6003 = 0x00; + mmio.r6004 = 0xff; + mmio.r6005 = 0xff; + mmio.r6006 = 0xff; + mmio.r6007 = 0xff; + for(unsigned n = 0; n < 16; n++) mmio.r7000[n] = 0; + mmio.r7800 = 0; + mmio.mlt_req = 0; + + packetsize = 0; + + vram_row = 0; + memset(vram, 0, 320); + + joyp_id = 3; + joyp15lock = 0; + joyp14lock = 0; + pulselock = true; +} + +//simulate 256-byte internal SGB BIOS on /RESET +void SuperGameBoy::command_1e() { + for(unsigned i = 0; i < 6; i++) { + Packet p; + p[0] = 0xf1 + (i << 1); + p[1] = 0; + for(unsigned n = 2; n < 16; n++) { + uint8_t data = romdata[0x0104 + (i * 14) + (n - 2)]; + p[1] += data; + p[n] = data; + } + if(packetsize < 64) packet[packetsize++] = p; + } +} + +void SuperGameBoy::render(unsigned row) { + gambatte->updateVideo(); + + uint32_t *source = buffer + row * 160 * 8; + memset(vram, 0x00, 320); + + for(unsigned y = row * 8; y < row * 8 + 8; y++) { + for(unsigned x = 0; x < 160; x++) { + unsigned pixel = *source++ / 0x555555; + pixel ^= 3; + + unsigned addr = (x / 8 * 16) + ((y & 7) * 2); + vram[addr + 0] |= ((pixel & 1) >> 0) << (7 - (x & 7)); + vram[addr + 1] |= ((pixel & 2) >> 1) << (7 - (x & 7)); + } + } +} + +//====================== +//Gambatte::VideoBlitter +//====================== + +//should always be 160x144, as no filters are used +void SuperGameBoy::setBufferDimensions(unsigned width, unsigned height) { + if(buffer) delete[] buffer; + buffer = new uint32_t[width * height]; + bufferWidth = width; + bufferHeight = height; +} + +const Gambatte::PixelBuffer SuperGameBoy::inBuffer() { + Gambatte::PixelBuffer pixelBuffer; + pixelBuffer.pixels = (void*)buffer; + pixelBuffer.format = Gambatte::PixelBuffer::RGB32; + pixelBuffer.pitch = bufferWidth; + return pixelBuffer; +} + +void SuperGameBoy::blit() { +} + +//========================== +//Gambatte::InputStateGetter +//========================== + +const Gambatte::InputState& SuperGameBoy::operator()() { + inputState.joypadId = 0x0f - (joyp_id & mmio.mlt_req); + + unsigned data = 0x00; + switch(joyp_id & mmio.mlt_req) { + case 0: data = mmio.r6004; break; + case 1: data = mmio.r6005; break; + case 2: data = mmio.r6006; break; + case 3: data = mmio.r6007; break; + } + + inputState.startButton = !(data & 0x80); + inputState.selectButton = !(data & 0x40); + inputState.bButton = !(data & 0x20); + inputState.aButton = !(data & 0x10); + inputState.dpadDown = !(data & 0x08); + inputState.dpadUp = !(data & 0x04); + inputState.dpadLeft = !(data & 0x02); + inputState.dpadRight = !(data & 0x01); + + return inputState; +} + +//========================== +//SuperGameBoy::Construction +//========================== + +SuperGameBoy::SuperGameBoy() : gambatte(0), buffer(0) { + romdata = ramdata = rtcdata = 0; + romsize = ramsize = rtcsize = 0; +} + +SuperGameBoy::~SuperGameBoy() { + if(buffer) delete[] buffer; +} diff --git a/supergameboy/interface/interface.hpp b/supergameboy/interface/interface.hpp new file mode 100644 index 00000000..d369a281 --- /dev/null +++ b/supergameboy/interface/interface.hpp @@ -0,0 +1,80 @@ +class SuperGameBoy : public Gambatte::VideoBlitter, public Gambatte::InputStateGetter { +public: + Gambatte::GB *gambatte; + +//SuperGameBoy::MMIO + unsigned vram_row; + uint8_t vram[320]; + + struct MMIO { + uint8_t r6000; + uint8_t r6003; + uint8_t r6004; + uint8_t r6005; + uint8_t r6006; + uint8_t r6007; + uint8_t r7000[16]; + unsigned r7800; + uint8_t mlt_req; + } mmio; + +//SuperGameBoy::Packet + static const char command_name[32][64]; + + struct Packet { + uint8_t data[16]; + uint8_t& operator[](unsigned addr) { return data[addr & 15]; } + }; + Packet packet[64]; + unsigned packetsize; + + unsigned joyp_id; + bool joyp15lock; + bool joyp14lock; + bool pulselock; + bool strobelock; + bool packetlock; + Packet joyp_packet; + uint8_t packetoffset; + uint8_t bitdata, bitoffset; + + void joyp_write(bool p15, bool p14); + +//SuperGameBoy::Core + uint8_t *romdata, *ramdata, *rtcdata; + unsigned romsize, ramsize, rtcsize; + bool version; + + bool init(bool version); + void term(); + unsigned run(uint32_t *samplebuffer, unsigned samples); + void save(); + void serialize(nall::serializer &s); + void power(); + void reset(); + void row(unsigned row); + uint8_t read(uint16_t addr); + void write(uint16_t addr, uint8_t data); + + void mmio_reset(); + void command_1e(); + void render(unsigned row); + + SuperGameBoy(); + ~SuperGameBoy(); + +//Gambatte::VideoBlitter + unsigned bufferWidth, bufferHeight; + uint32_t *buffer; + + void setBufferDimensions(unsigned width, unsigned height); + const Gambatte::PixelBuffer inBuffer(); + void blit(); + +//Gambatte::InputStateGetter + Gambatte::InputState inputState; + + const Gambatte::InputState& operator()(); +}; + +extern SuperGameBoy supergameboy; diff --git a/supergameboy/libgambatte/SConstruct b/supergameboy/libgambatte/SConstruct new file mode 100644 index 00000000..47087ba0 --- /dev/null +++ b/supergameboy/libgambatte/SConstruct @@ -0,0 +1,64 @@ +global_cflags = ARGUMENTS.get('CFLAGS', '-Wall -Wextra -O2 -fomit-frame-pointer') +global_cxxflags = ARGUMENTS.get('CXXFLAGS', global_cflags + ' -fno-exceptions -fno-rtti') +global_defines = ' -DHAVE_STDINT_H -DCHAR_WIDTH_8' + +env = Environment(CPPPATH = ['src', 'include', '../common'], + CFLAGS = global_cflags + global_defines, + CXXFLAGS = global_cxxflags + global_defines) + +sourceFiles = Split(''' + src/bitmap_font.cpp + src/colorconversion.cpp + src/cpu.cpp + src/gambatte.cpp + src/initstate.cpp + src/interrupter.cpp + src/memory.cpp + src/rtc.cpp + src/sound.cpp + src/state_osd_elements.cpp + src/statesaver.cpp + src/video.cpp + src/sound/channel1.cpp + src/sound/channel2.cpp + src/sound/channel3.cpp + src/sound/channel4.cpp + src/sound/duty_unit.cpp + src/sound/envelope_unit.cpp + src/sound/length_counter.cpp + src/video/basic_add_event.cpp + src/video/break_event.cpp + src/video/irq_event.cpp + src/video/ly_counter.cpp + src/video/lyc_irq.cpp + src/video/m3_extra_cycles.cpp + src/video/mode3_event.cpp + src/video/mode0_irq.cpp + src/video/mode1_irq.cpp + src/video/mode2_irq.cpp + src/video/sc_reader.cpp + src/video/scx_reader.cpp + src/video/sprite_mapper.cpp + src/video/we_master_checker.cpp + src/video/we.cpp + src/video/wx_reader.cpp + src/video/wy.cpp + src/video/filters/catrom2x.cpp + src/video/filters/catrom3x.cpp + src/video/filters/kreed2xsai.cpp + src/video/filters/maxsthq2x.cpp + src/video/filters/maxsthq3x.cpp + ''') + +conf = env.Configure() + +if conf.CheckHeader('zlib.h') and conf.CheckLib('z'): + sourceFiles.append('src/file/unzip/unzip.c') + sourceFiles.append('src/file/unzip/ioapi.c') + sourceFiles.append('src/file/file_zip.cpp') +else: + sourceFiles.append('src/file/file.cpp') + +conf.Finish() + +env.Library('gambatte', sourceFiles) diff --git a/supergameboy/libgambatte/include/filterinfo.h b/supergameboy/libgambatte/include/filterinfo.h new file mode 100644 index 00000000..ab5a4726 --- /dev/null +++ b/supergameboy/libgambatte/include/filterinfo.h @@ -0,0 +1,32 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef GAMBATTE_FILTERINFO_H +#define GAMBATTE_FILTERINFO_H + +#include + +namespace Gambatte { +struct FilterInfo { + std::string handle; + unsigned int outWidth; + unsigned int outHeight; +}; +} + +#endif diff --git a/supergameboy/libgambatte/include/gambatte.h b/supergameboy/libgambatte/include/gambatte.h new file mode 100644 index 00000000..fc787d76 --- /dev/null +++ b/supergameboy/libgambatte/include/gambatte.h @@ -0,0 +1,82 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef GAMBATTE_H +#define GAMBATTE_H + +class CPU; + +#include "videoblitter.h" +#include "inputstate.h" +#include "inputstategetter.h" +#include "filterinfo.h" +#include "int.h" +#include + +namespace Gambatte { +class GB { + CPU *const z80; + int stateNo; + + void loadState(const char *filepath, bool osdMessage); + +public: + GB(); + ~GB(); + bool load(bool forceDmg = false); + + /** Emulates until at least 'samples' stereo sound samples are produced in the supplied buffer. + * There are 35112 stereo sound samples in a video frame. + * May run for uptil 2064 stereo samples too long. + * A stereo sample consists of two native endian 2s complement 16-bit PCM samples, + * with the left sample preceding the right one. Usually casting soundBuf to/from + * short* is OK and recommended. The reason for not using a short* in the interface + * is to avoid implementation defined behaviour without compromising performance. + * + * @param soundBuf buffer with space >= samples + 2064 + * @param samples number of stereo samples to produce + * @return actual number of samples produced + */ + unsigned runFor(Gambatte::uint_least32_t *soundBuf, unsigned samples); + void updateVideo(); + unsigned lyCounter(); + + void reset(); + void setVideoBlitter(VideoBlitter *vb); + void videoBufferChange(); + unsigned videoWidth() const; + unsigned videoHeight() const; + void setDmgPaletteColor(unsigned palNum, unsigned colorNum, unsigned rgb32); + + void setVideoFilter(unsigned n); + std::vector filterInfo() const; + void setInputStateGetter(InputStateGetter *getInput); + + void set_savedir(const char *sdir); + bool isCgb() const; + void saveSavedata(); + void saveState(); + void loadState(); + void saveState(const char *filepath); + void loadState(const char *filepath); + void selectState(int n); + int currentState() const { return stateNo; } +}; +} + +#endif diff --git a/supergameboy/libgambatte/include/inputstate.h b/supergameboy/libgambatte/include/inputstate.h new file mode 100644 index 00000000..bdfec44f --- /dev/null +++ b/supergameboy/libgambatte/include/inputstate.h @@ -0,0 +1,30 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef GAMBATTE_INPUTSTATE_H +#define GAMBATTE_INPUTSTATE_H + +namespace Gambatte { +struct InputState { + unsigned joypadId; + bool startButton, selectButton, bButton, aButton; + bool dpadDown, dpadUp, dpadLeft, dpadRight; +}; +} + +#endif diff --git a/supergameboy/libgambatte/include/inputstategetter.h b/supergameboy/libgambatte/include/inputstategetter.h new file mode 100644 index 00000000..375dad5e --- /dev/null +++ b/supergameboy/libgambatte/include/inputstategetter.h @@ -0,0 +1,30 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef GAMBATTE_INPUTSTATEGETTER_H +#define GAMBATTE_INPUTSTATEGETTER_H + +namespace Gambatte { +class InputStateGetter { +public: + virtual ~InputStateGetter() {}; + virtual const InputState& operator()() = 0; +}; +} + +#endif diff --git a/supergameboy/libgambatte/include/int.h b/supergameboy/libgambatte/include/int.h new file mode 100644 index 00000000..116ab8b7 --- /dev/null +++ b/supergameboy/libgambatte/include/int.h @@ -0,0 +1,29 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef GAMBATTE_INT_H +#define GAMBATTE_INT_H + +#include + +namespace Gambatte { +typedef uint32_t uint_least32_t; +typedef uint16_t uint_least16_t; +} + +#endif diff --git a/supergameboy/libgambatte/include/videoblitter.h b/supergameboy/libgambatte/include/videoblitter.h new file mode 100644 index 00000000..d2a9c335 --- /dev/null +++ b/supergameboy/libgambatte/include/videoblitter.h @@ -0,0 +1,44 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef GAMBATTE_VIDEOBLITTER_H +#define GAMBATTE_VIDEOBLITTER_H + +namespace Gambatte { + +struct PixelBuffer { + enum Format { RGB32, RGB16, UYVY }; + + void *pixels; + Format format; + unsigned pitch; + + PixelBuffer() : pixels(0), format(RGB32), pitch(0) {} +}; + +class VideoBlitter { +public: + virtual void setBufferDimensions(unsigned width, unsigned height) = 0; + virtual const PixelBuffer inBuffer() = 0; + virtual void blit() = 0; + virtual ~VideoBlitter() {} +}; + +} + +#endif diff --git a/supergameboy/libgambatte/src/bitmap_font.cpp b/supergameboy/libgambatte/src/bitmap_font.cpp new file mode 100644 index 00000000..b644c06f --- /dev/null +++ b/supergameboy/libgambatte/src/bitmap_font.cpp @@ -0,0 +1,328 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +/* + The following font bitmaps (static const unsigned char *_bits[]), only used + as data and included in this source file for convenience, are derived from + the Bitstream Vera Sans font, which is distributed under the following + copyright: + + Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera + is a trademark of Bitstream, Inc. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of the fonts accompanying this license ("Fonts") and associated + documentation files (the "Font Software"), to reproduce and distribute the + Font Software, including without limitation the rights to use, copy, merge, + publish, distribute, and/or sell copies of the Font Software, and to permit + persons to whom the Font Software is furnished to do so, subject to the + following conditions: + + The above copyright and trademark notices and this permission notice shall + be included in all copies of one or more of the Font Software typefaces. + + The Font Software may be modified, altered, or added to, and in particular + the designs of glyphs or characters in the Fonts may be modified and + additional glyphs or characters may be added to the Fonts, only if the fonts + are renamed to names not containing either the words "Bitstream" or the word + "Vera". + + This License becomes null and void to the extent applicable to Fonts or Font + Software that has been modified and is distributed under the "Bitstream Vera" + names. + + The Font Software may be sold as part of a larger software package but no + copy of one or more of the Font Software typefaces may be sold by itself. + + THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM + OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR + CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM + OTHER DEALINGS IN THE FONT SOFTWARE. + + Except as contained in this notice, the names of Gnome, the Gnome + Foundation, and Bitstream Inc., shall not be used in advertising or + otherwise to promote the sale, use or other dealings in this Font Software + without prior written authorization from the Gnome Foundation or + Bitstream Inc., respectively. For further information, contact: fonts at + gnome dot org. +*/ + +#include "bitmap_font.h" + +static const unsigned char n0_bits[] = { 0x68, + 0x00, 0x1c, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1c }; + +static const unsigned char n1_bits[] = { 0x68, + 0x00, 0x0e, 0x08, 0x08, 0x08, 0x08, 0x08, 0x3e }; + +static const unsigned char n2_bits[] = { 0x68, + 0x00, 0x1c, 0x22, 0x20, 0x10, 0x08, 0x04, 0x3e }; + +static const unsigned char n3_bits[] = { 0x68, + 0x00, 0x1c, 0x22, 0x20, 0x1c, 0x20, 0x22, 0x1c }; + +static const unsigned char n4_bits[] = { 0x68, + 0x00, 0x18, 0x18, 0x14, 0x12, 0x3e, 0x10, 0x10 }; + +static const unsigned char n5_bits[] = { 0x68, + 0x00, 0x1e, 0x02, 0x1e, 0x20, 0x20, 0x20, 0x1e }; + +static const unsigned char n6_bits[] = { 0x68, + 0x00, 0x3c, 0x06, 0x02, 0x1e, 0x22, 0x22, 0x1c }; + +static const unsigned char n7_bits[] = { 0x68, + 0x00, 0x3e, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04 }; + +static const unsigned char n8_bits[] = { 0x68, + 0x00, 0x1c, 0x22, 0x22, 0x1c, 0x22, 0x22, 0x1c }; + +static const unsigned char n9_bits[] = { 0x68, + 0x00, 0x1c, 0x22, 0x22, 0x3c, 0x20, 0x30, 0x1e }; + +static const unsigned char A_bits[] = { 0x78, + 0x00, 0x08, 0x14, 0x14, 0x22, 0x3e, 0x22, 0x41 }; + +static const unsigned char a_bits[] = { 0x68, + 0x00, 0x00, 0x00, 0x1c, 0x20, 0x3c, 0x22, 0x3e }; + +static const unsigned char B_bits[] = { 0x78, + 0x00, 0x1e, 0x22, 0x22, 0x1e, 0x22, 0x22, 0x1e }; + +static const unsigned char b_bits[] = { 0x68, + 0x02, 0x02, 0x02, 0x1e, 0x22, 0x22, 0x22, 0x1e }; + +static const unsigned char C_bits[] = { 0x88, + 0x00, 0x38, 0x44, 0x02, 0x02, 0x02, 0x44, 0x38 }; + +static const unsigned char c_bits[] = { 0x58, + 0x00, 0x00, 0x00, 0x1c, 0x02, 0x02, 0x02, 0x1c }; + +static const unsigned char D_bits[] = { 0x88, + 0x00, 0x3e, 0x62, 0x42, 0x42, 0x42, 0x62, 0x3e }; + +static const unsigned char d_bits[] = { 0x68, + 0x20, 0x20, 0x20, 0x3c, 0x22, 0x22, 0x22, 0x3c }; + +static const unsigned char E_bits[] = { 0x78, + 0x00, 0x3e, 0x02, 0x02, 0x3e, 0x02, 0x02, 0x3e }; + +static const unsigned char e_bits[] = { 0x68, + 0x00, 0x00, 0x00, 0x1c, 0x22, 0x3e, 0x02, 0x3c }; + +static const unsigned char F_bits[] = { 0x68, + 0x00, 0x1e, 0x02, 0x02, 0x1e, 0x02, 0x02, 0x02 }; + +static const unsigned char f_bits[] = { 0x48, + 0x0e, 0x02, 0x02, 0x07, 0x02, 0x02, 0x02, 0x02 }; + +static const unsigned char G_bits[] = { 0x88, + 0x00, 0x3c, 0x46, 0x02, 0x72, 0x42, 0x46, 0x3c }; + +static const unsigned char g_bits[] = { 0x6a, + 0x00, 0x00, 0x00, 0x3c, 0x22, 0x22, 0x22, 0x3c, 0x20, 0x1c }; + +static const unsigned char H_bits[] = { 0x88, + 0x00, 0x42, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x42 }; + +static const unsigned char h_bits[] = { 0x68, + 0x02, 0x02, 0x02, 0x1e, 0x22, 0x22, 0x22, 0x22 }; + +static const unsigned char I_bits[] = { 0x38, + 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02 }; + +static const unsigned char i_bits[] = { 0x28, + 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02 }; + +static const unsigned char J_bits[] = { 0x4a, + 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03 }; + +static const unsigned char j_bits[] = { 0x2a, + 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03 }; + +static const unsigned char K_bits[] = { 0x78, + 0x00, 0x22, 0x12, 0x0a, 0x06, 0x0a, 0x12, 0x22 }; + +static const unsigned char k_bits[] = { 0x58, + 0x02, 0x02, 0x02, 0x12, 0x0a, 0x06, 0x0a, 0x12 }; + +static const unsigned char L_bits[] = { 0x68, + 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x3e }; + +static const unsigned char l_bits[] = { 0x28, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02 }; + +static const unsigned char M_bits[] = { 0x98, + 0x00, 0x00, 0x82, 0x00, 0xc6, 0x00, 0xc6, 0x00, 0xaa, 0x00, 0xaa, 0x00, + 0x92, 0x00, 0x82, 0x00 }; + +static const unsigned char m_bits[] = { 0xa8, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0x01, 0x22, 0x02, 0x22, 0x02, + 0x22, 0x02, 0x22, 0x02 }; + +static const unsigned char N_bits[] = { 0x88, + 0x00, 0x42, 0x46, 0x4a, 0x4a, 0x52, 0x62, 0x42 }; + +static const unsigned char n_bits[] = { 0x68, + 0x00, 0x00, 0x00, 0x1e, 0x22, 0x22, 0x22, 0x22 }; + +static const unsigned char O_bits[] = { 0x88, + 0x00, 0x3c, 0x66, 0x42, 0x42, 0x42, 0x66, 0x3c }; + +static const unsigned char o_bits[] = { 0x68, + 0x00, 0x00, 0x00, 0x1c, 0x22, 0x22, 0x22, 0x1c }; + +static const unsigned char P_bits[] = { 0x78, + 0x00, 0x1e, 0x22, 0x22, 0x1e, 0x02, 0x02, 0x02 }; + +static const unsigned char p_bits[] = { 0x6a, + 0x00, 0x00, 0x00, 0x1e, 0x22, 0x22, 0x22, 0x1e, 0x02, 0x02 }; + +static const unsigned char Q_bits[] = { 0x89, + 0x00, 0x3c, 0x66, 0x42, 0x42, 0x42, 0x26, 0x1c, 0x20 }; + +static const unsigned char q_bits[] = { 0x6a, + 0x00, 0x00, 0x00, 0x3c, 0x22, 0x22, 0x22, 0x3c, 0x20, 0x20 }; + +static const unsigned char R_bits[] = { 0x78, + 0x00, 0x1e, 0x22, 0x22, 0x1e, 0x12, 0x22, 0x42 }; + +static const unsigned char r_bits[] = { 0x48, + 0x00, 0x00, 0x00, 0x0e, 0x02, 0x02, 0x02, 0x02 }; + +static const unsigned char S_bits[] = { 0x78, + 0x00, 0x1c, 0x22, 0x02, 0x1c, 0x20, 0x22, 0x1c }; + +static const unsigned char s_bits[] = { 0x58, + 0x00, 0x00, 0x00, 0x1e, 0x02, 0x1c, 0x10, 0x1e }; + +static const unsigned char T_bits[] = { 0x58, + 0x00, 0x1f, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04 }; + +static const unsigned char t_bits[] = { 0x48, + 0x00, 0x02, 0x02, 0x0f, 0x02, 0x02, 0x02, 0x0e }; + +static const unsigned char U_bits[] = { 0x88, + 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c }; + +static const unsigned char u_bits[] = { 0x68, + 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x3c }; + +static const unsigned char V_bits[] = { 0x78, + 0x00, 0x41, 0x41, 0x22, 0x22, 0x14, 0x14, 0x08 }; + +static const unsigned char v_bits[] = { 0x68, + 0x00, 0x00, 0x00, 0x22, 0x22, 0x14, 0x14, 0x08 }; + +static const unsigned char W_bits[] = { 0x98, + 0x00, 0x00, 0x11, 0x01, 0x11, 0x01, 0xaa, 0x00, 0xaa, 0x00, 0xaa, 0x00, + 0x44, 0x00, 0x44, 0x00 }; + +static const unsigned char w_bits[] = { 0x88, + 0x00, 0x00, 0x00, 0x92, 0xaa, 0xaa, 0x44, 0x44 }; + +static const unsigned char X_bits[] = { 0x68, + 0x00, 0x21, 0x12, 0x0c, 0x0c, 0x0c, 0x12, 0x21 }; + +static const unsigned char x_bits[] = { 0x68, + 0x00, 0x00, 0x00, 0x22, 0x14, 0x08, 0x14, 0x22 }; + +static const unsigned char Y_bits[] = { 0x78, + 0x00, 0x41, 0x22, 0x14, 0x08, 0x08, 0x08, 0x08 }; + +static const unsigned char y_bits[] = { 0x6a, + 0x00, 0x00, 0x00, 0x22, 0x22, 0x14, 0x14, 0x08, 0x08, 0x06 }; + +static const unsigned char Z_bits[] = { 0x68, + 0x00, 0x3f, 0x10, 0x08, 0x0c, 0x04, 0x02, 0x3f }; + +static const unsigned char z_bits[] = { 0x58, + 0x00, 0x00, 0x00, 0x1e, 0x10, 0x08, 0x04, 0x1e }; + +static const unsigned char SPC_bits[] = { 0x38, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +namespace BitmapFont { +const unsigned char *const font[] = { + 0, + n0_bits, n1_bits, n2_bits, n3_bits, n4_bits, n5_bits, n6_bits, n7_bits, n8_bits, n9_bits, + A_bits, B_bits, C_bits, D_bits, E_bits, F_bits, G_bits, H_bits, I_bits, J_bits, K_bits, L_bits, M_bits, + N_bits, O_bits, P_bits, Q_bits, R_bits, S_bits, T_bits, U_bits, V_bits, W_bits, X_bits, Y_bits, Z_bits, + a_bits, b_bits, c_bits, d_bits, e_bits, f_bits, g_bits, h_bits, i_bits, j_bits, k_bits, l_bits, m_bits, + n_bits, o_bits, p_bits, q_bits, r_bits, s_bits, t_bits, u_bits, v_bits, w_bits, x_bits, y_bits, z_bits, + SPC_bits +}; + +unsigned getWidth(const char *chars) { + unsigned w = 0; + + while (const int character = *chars++) { + w += *font[character] >> 4; + } + + return w; +} + +class Rgb32Fill { + const unsigned long color; + +public: + Rgb32Fill(unsigned long color) : color(color) {} + + void operator()(Gambatte::uint_least32_t *dest, unsigned /*pitch*/) { + *dest = color; + } +}; + +void print(Gambatte::uint_least32_t *dest, const unsigned pitch, const unsigned long color, const char *chars) { + print(dest, pitch, Rgb32Fill(color), chars); +} + +static void reverse(char *first, char *last) { + while (first < last) { + const int tmp = *first; + + *first = *last; + *last = tmp; + + ++first; + --last; + } +} + +void utoa(unsigned u, char *a) { + char *aa = a; + + while (u > 9) { + const unsigned div = u / 10; + const unsigned rem = u % 10; + + u = div; + *aa++ = rem + N0; + } + + *aa = u + N0; + + reverse(a, aa); +} +} diff --git a/supergameboy/libgambatte/src/bitmap_font.h b/supergameboy/libgambatte/src/bitmap_font.h new file mode 100644 index 00000000..8217cf61 --- /dev/null +++ b/supergameboy/libgambatte/src/bitmap_font.h @@ -0,0 +1,87 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef BITMAP_FONT_H +#define BITMAP_FONT_H + +#include "int.h" + +namespace BitmapFont { +enum Char { + NUL, + N0, N1, N2, N3, N4, N5, N6, N7, N8, N9, + A, B, C, D, E, F, G, H, I, J, K, L, M, + N, O, P, Q, R, S, T, U, V, W, X, Y, Z, + a, b, c, d, e, f, g, h, i, j, k, l, m, + n, o, p, q, r, s, t, u, v, w, x, y, z, + SPC +}; + +enum { HEIGHT = 10 }; +enum { MAX_WIDTH = 9 }; +enum { NUMBER_WIDTH = 6 }; + +unsigned getWidth(const char *chars); + +// struct Fill { void operator()(RandomAccessIterator dest, unsigned pitch) { fill pixels at dest } } +template +void print(RandomAccessIterator dest, unsigned pitch, Fill fill, const char *chars); + +void print(Gambatte::uint_least32_t *dest, unsigned pitch, unsigned long color, const char *chars); +void utoa(unsigned u, char *a); + +// --- INTERFACE END --- + + + +extern const unsigned char *const font[]; + +template +void print(RandomAccessIterator dest, const unsigned pitch, Fill fill, const char *chars) { + while (const int character = *chars++) { + RandomAccessIterator dst = dest; + const unsigned char *s = font[character]; + + const unsigned width = *s >> 4; + unsigned h = *s++ & 0xF; + + while (h--) { + RandomAccessIterator d = dst; + + unsigned line = *s++; + + if (width > 8) + line |= *s++ << 8; + + while (line) { + if (line & 1) + fill(d, pitch); + + line >>= 1; + ++d; + } + + dst += pitch; + } + + dest += width; + } +} +} + +#endif diff --git a/supergameboy/libgambatte/src/colorconversion.cpp b/supergameboy/libgambatte/src/colorconversion.cpp new file mode 100644 index 00000000..d76b0aee --- /dev/null +++ b/supergameboy/libgambatte/src/colorconversion.cpp @@ -0,0 +1,96 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "colorconversion.h" +#include + +Rgb32ToUyvy::Rgb32ToUyvy() { +#ifdef WORDS_BIGENDIAN + const CacheUnit c = { 0, 128ul << 24 | 16ul << 16 | 128 << 8 | 16 }; +#else + const CacheUnit c = { 0, 16ul << 24 | 128ul << 16 | 16 << 8 | 128 }; +#endif + std::fill(cache, cache + cache_size, c); +} + +void Rgb32ToUyvy::operator()(const Gambatte::uint_least32_t *s, Gambatte::uint_least32_t *d, const unsigned w, unsigned h, const unsigned d_pitch) { + while (h--) { + for (const Gambatte::uint_least32_t *const ends = s + w; s != ends;) { + if ((cache[*s & cache_mask].rgb32 - *s) | (cache[*(s+1) & cache_mask].rgb32 - *(s+1))) { + cache[*s & cache_mask].rgb32 = *s; + cache[*(s+1) & cache_mask].rgb32 = *(s+1); + + const unsigned long r = (*s >> 16 & 0x000000FF) | (*(s+1) & 0x00FF0000); + const unsigned long g = (*s >> 8 & 0x000000FF) | (*(s+1) << 8 & 0x00FF0000); + const unsigned long b = (*s & 0x000000FF) | (*(s+1) << 16 & 0x00FF0000); + + const unsigned long y = r * 66 + g * 129 + b * 25 + (16 * 256 + 128) * 0x00010001ul; + const unsigned long u = b * 112 - r * 38 - g * 74 + (128 * 256 + 128) * 0x00010001ul; + const unsigned long v = r * 112 - g * 94 - b * 18 + (128 * 256 + 128) * 0x00010001ul; + +#ifdef WORDS_BIGENDIAN + *d++ = cache[*s & cache_mask].uyvy = (u << 16 & 0xFF000000) | (y << 8 & 0x00FF0000) | (v & 0x0000FF00) | (y >> 8 & 0x000000FF); + *d++ = cache[*(s+1) & cache_mask].uyvy = (u & 0xFF000000) | (y >> 8 & 0x00FF0000) | (v >> 16 & 0x0000FF00) | y >> 24; +#else + *d++ = cache[*s & cache_mask].uyvy = (y << 16 & 0xFF000000) | (v << 8 & 0x00FF0000) | (y & 0x0000FF00) | (u >> 8 & 0x000000FF); + *d++ = cache[*(s+1) & cache_mask].uyvy = (y & 0xFF000000) | (v >> 8 & 0x00FF0000) | (y >> 16 & 0x0000FF00) | u >> 24; +#endif + } else { + *d++ = cache[*s & cache_mask].uyvy; + *d++ = cache[*(s+1) & cache_mask].uyvy; + } + + s += 2; + } + + d += d_pitch - w; + } +} + +unsigned long rgb32ToUyvy(unsigned long rgb32) { + const unsigned r = rgb32 >> 16 & 0xFF; + const unsigned g = rgb32 >> 8 & 0xFF; + const unsigned b = rgb32 & 0xFF; + + const unsigned long y = (r * 66 + g * 129 + b * 25 + 16 * 256 + 128) >> 8; + const unsigned long u = (b * 112 - r * 38 - g * 74 + 128 * 256 + 128) >> 8; + const unsigned long v = (r * 112 - g * 94 - b * 18 + 128 * 256 + 128) >> 8; + +#ifdef WORDS_BIGENDIAN + return u << 24 | y << 16 | v << 8 | y; +#else + return y << 24 | v << 16 | y << 8 | u; +#endif +} + +void rgb32ToRgb16(const Gambatte::uint_least32_t *s, Gambatte::uint_least16_t *d, const unsigned w, unsigned h, const unsigned dstPitch) { + do { + unsigned n = w; + + do { + *d++ = (*s >> 8 & 0xF800) | (*s >> 5 & 0x07E0) | (*s >> 3 & 0x001F); + ++s; + } while (--n); + + d += dstPitch - w; + } while (--h); +} + +unsigned rgb32ToRgb16(const unsigned long rgb32) { + return (rgb32 >> 8 & 0xF800) | (rgb32 >> 5 & 0x07E0) | (rgb32 >> 3 & 0x001F); +} diff --git a/supergameboy/libgambatte/src/colorconversion.h b/supergameboy/libgambatte/src/colorconversion.h new file mode 100644 index 00000000..9323015e --- /dev/null +++ b/supergameboy/libgambatte/src/colorconversion.h @@ -0,0 +1,46 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef COLORCONVERSION_H +#define COLORCONVERSION_H + +#include "int.h" +#include + +class Rgb32ToUyvy { + struct CacheUnit { + Gambatte::uint_least32_t rgb32; + Gambatte::uint_least32_t uyvy; + }; + + enum { cache_size = 0x100 }; + enum { cache_mask = cache_size - 1 }; + + CacheUnit cache[cache_size]; + +public: + Rgb32ToUyvy(); + void operator()(const Gambatte::uint_least32_t *s, Gambatte::uint_least32_t *d, unsigned w, unsigned h, unsigned dstPitch); +}; + +unsigned long rgb32ToUyvy(unsigned long rgb32); + +void rgb32ToRgb16(const Gambatte::uint_least32_t *s, Gambatte::uint_least16_t *d, unsigned w, unsigned h, unsigned dstPitch); +unsigned rgb32ToRgb16(unsigned long rgb32); + +#endif diff --git a/supergameboy/libgambatte/src/cpu.cpp b/supergameboy/libgambatte/src/cpu.cpp new file mode 100644 index 00000000..c44b1239 --- /dev/null +++ b/supergameboy/libgambatte/src/cpu.cpp @@ -0,0 +1,2842 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "cpu.h" +#include "memory.h" +#include "savestate.h" + +CPU::CPU() : +memory(Interrupter(SP, PC_, halted)), +cycleCounter_(0), +PC_(0x100), +SP(0xFFFE), +HF1(0xF), +HF2(0xF), +ZF(0), +CF(0x100), +A_(0x01), +B(0x00), +C(0x13), +D(0x00), +E(0xD8), +H(0x01), +L(0x4D), +skip(false), +halted(false) +{} + +void CPU::runFor(const unsigned long cycles) { + process(cycles/* << memory.isDoubleSpeed()*/); + + if (cycleCounter_ & 0x80000000) + cycleCounter_ = memory.resetCounters(cycleCounter_); +} + +bool CPU::load(const bool forceDmg) { + bool tmp = memory.loadROM(forceDmg); + + return tmp; +} + +/*void CPU::halt() { + while (halted) { + const uint_fast32_t cycles = memory.next_eventtime - memory.CycleCounter; + memory.CycleCounter += cycles + ((4 - (cycles & 3)) & 3); + memory.event(); + } +}*/ + +//Push address of next instruction onto stack and then jump to interrupt address (0x40-0x60): +/*unsigned CPU::interrupt(const unsigned address, unsigned cycleCounter) { + if (halted && memory.isCgb()) + cycleCounter += 4; + + halted = false; + cycleCounter += 8; + memory.write(--SP, PC_ >> 8, cycleCounter); + cycleCounter += 4; + memory.write(--SP, PC_ & 0xFF, cycleCounter); + PC_ = address; + cycleCounter += 8; + + return cycleCounter; +}*/ + +// (HF2 & 0x200) == true means HF is set. +// (HF2 & 0x400) marks the subtract flag. +// (HF2 & 0x800) is set for inc/dec. +// (HF2 & 0x100) is set if there's a carry to add. +static void calcHF(const unsigned HF1, unsigned& HF2) { + unsigned arg1 = HF1 & 0xF; + unsigned arg2 = (HF2 & 0xF) + (HF2 >> 8 & 1); + + if (HF2 & 0x800) { + arg1 = arg2; + arg2 = 1; + } + + if (HF2 & 0x400) + arg1 -= arg2; + else + arg1 = (arg1 + arg2) << 5; + + HF2 |= arg1 & 0x200; +} + +#define F() (((HF2 & 0x600) | (CF & 0x100)) >> 4 | ((ZF & 0xFF) ? 0 : 0x80)) + +#define FROM_F(f_in) do { \ + unsigned from_f_var = f_in; \ +\ + ZF = ~from_f_var & 0x80; \ + HF2 = from_f_var << 4 & 0x600; \ + CF = from_f_var << 4 & 0x100; \ +} while (0) + +void CPU::setStatePtrs(SaveState &state) { + memory.setStatePtrs(state); +} + +void CPU::saveState(SaveState &state) { + cycleCounter_ = memory.saveState(state, cycleCounter_); + + calcHF(HF1, HF2); + + state.cpu.cycleCounter = cycleCounter_; + state.cpu.PC = PC_; + state.cpu.SP = SP; + state.cpu.A = A_; + state.cpu.B = B; + state.cpu.C = C; + state.cpu.D = D; + state.cpu.E = E; + state.cpu.F = F(); + state.cpu.H = H; + state.cpu.L = L; + state.cpu.skip = skip; + state.cpu.halted = halted; +} + +void CPU::loadState(const SaveState &state) { + memory.loadState(state, cycleCounter_); + + cycleCounter_ = state.cpu.cycleCounter; + PC_ = state.cpu.PC; + SP = state.cpu.SP; + A_ = state.cpu.A; + B = state.cpu.B; + C = state.cpu.C; + D = state.cpu.D; + E = state.cpu.E; + FROM_F(state.cpu.F); + H = state.cpu.H; + L = state.cpu.L; + skip = state.cpu.skip; + halted = state.cpu.halted; +} + +#define BC() ( B << 8 | C ) +#define DE() ( D << 8 | E ) +#define HL() ( H << 8 | L ) + +#define READ(dest, addr) do { (dest) = memory.read(addr, cycleCounter); cycleCounter += 4; } while (0) +// #define PC_READ(dest, addr) do { (dest) = memory.pc_read(addr, cycleCounter); cycleCounter += 4; } while (0) +#define PC_READ(dest) do { (dest) = memory.read(PC, cycleCounter); PC = (PC + 1) & 0xFFFF; cycleCounter += 4; } while (0) +#define FF_READ(dest, addr) do { (dest) = memory.ff_read(addr, cycleCounter); cycleCounter += 4; } while (0) + +#define WRITE(addr, data) do { memory.write(addr, data, cycleCounter); cycleCounter += 4; } while (0) +#define FF_WRITE(addr, data) do { memory.ff_write(addr, data, cycleCounter); cycleCounter += 4; } while (0) + +#define PC_MOD(data) do { PC = data; cycleCounter += 4; } while (0) + +#define PUSH(r1, r2) do { \ + SP = (SP - 1) & 0xFFFF; \ + WRITE(SP, (r1)); \ + SP = (SP - 1) & 0xFFFF; \ + WRITE(SP, (r2)); \ +} while (0) + +//CB OPCODES (Shifts, rotates and bits): +//swap r (8 cycles): +//Swap upper and lower nibbles of 8-bit register, reset flags, check zero flag: +#define swap_r(r) do { \ + CF = HF2 = 0; \ + ZF = (r); \ + (r) = (ZF << 4 | ZF >> 4) & 0xFF; \ +} while (0) + +//rlc r (8 cycles): +//Rotate 8-bit register left, store old bit7 in CF. Reset SF and HCF, Check ZF: +#define rlc_r(r) do { \ + CF = (r) << 1; \ + ZF = CF | CF >> 8; \ + (r) = ZF & 0xFF; \ + HF2 = 0; \ +} while (0) + +//rl r (8 cycles): +//Rotate 8-bit register left through CF, store old bit7 in CF, old CF value becomes bit0. Reset SF and HCF, Check ZF: +#define rl_r(r) do { \ + const unsigned rl_r_var_oldcf = CF >> 8 & 1; \ + CF = (r) << 1; \ + ZF = CF | rl_r_var_oldcf; \ + (r) = ZF & 0xFF; \ + HF2 = 0; \ +} while (0) + +//rrc r (8 cycles): +//Rotate 8-bit register right, store old bit0 in CF. Reset SF and HCF, Check ZF: +#define rrc_r(r) do { \ + ZF = (r); \ + CF = ZF << 8; \ + (r) = (ZF | CF) >> 1 & 0xFF; \ + HF2 = 0; \ +} while (0) + +//rr r (8 cycles): +//Rotate 8-bit register right through CF, store old bit0 in CF, old CF value becomes bit7. Reset SF and HCF, Check ZF: +#define rr_r(r) do { \ + const unsigned rr_r_var_oldcf = CF & 0x100; \ + CF = (r) << 8; \ + (r) = ZF = ((r) | rr_r_var_oldcf) >> 1; \ + HF2 = 0; \ +} while (0) + +//sla r (8 cycles): +//Shift 8-bit register left, store old bit7 in CF. Reset SF and HCF, Check ZF: +#define sla_r(r) do { \ + ZF = CF = (r) << 1; \ + (r) = ZF & 0xFF; \ + HF2 = 0; \ +} while (0) + +//sra r (8 cycles): +//Shift 8-bit register right, store old bit0 in CF. bit7=old bit7. Reset SF and HCF, Check ZF: +#define sra_r(r) do { \ + CF = (r) << 8; \ + ZF = (r) >> 1; \ + (r) = ZF | ((r) & 0x80); \ + HF2 = 0; \ +} while (0) + +//srl r (8 cycles): +//Shift 8-bit register right, store old bit0 in CF. Reset SF and HCF, Check ZF: +#define srl_r(r) do { \ + ZF = (r); \ + CF = (r) << 8; \ + ZF >>= 1; \ + (r) = ZF; \ + HF2 = 0; \ +} while (0) + +//bit n,r (8 cycles): +//bit n,(hl) (12 cycles): +//Test bitn in 8-bit value, check ZF, unset SF, set HCF: +#define bitn_u8(bitmask, u8) do { \ + ZF = (u8) & (bitmask); \ + HF2 = 0x200; \ +} while (0) + +#define bit0_u8(u8) bitn_u8(1, (u8)) +#define bit1_u8(u8) bitn_u8(2, (u8)) +#define bit2_u8(u8) bitn_u8(4, (u8)) +#define bit3_u8(u8) bitn_u8(8, (u8)) +#define bit4_u8(u8) bitn_u8(0x10, (u8)) +#define bit5_u8(u8) bitn_u8(0x20, (u8)) +#define bit6_u8(u8) bitn_u8(0x40, (u8)) +#define bit7_u8(u8) bitn_u8(0x80, (u8)) + +//set n,r (8 cycles): +//Set bitn of 8-bit register: +#define set0_r(r) ( (r) |= 0x1 ) +#define set1_r(r) ( (r) |= 0x2 ) +#define set2_r(r) ( (r) |= 0x4 ) +#define set3_r(r) ( (r) |= 0x8 ) +#define set4_r(r) ( (r) |= 0x10 ) +#define set5_r(r) ( (r) |= 0x20 ) +#define set6_r(r) ( (r) |= 0x40 ) +#define set7_r(r) ( (r) |= 0x80 ) + +//set n,(hl) (16 cycles): +//Set bitn of value at address stored in HL: +#define setn_mem_hl(n) do { \ + const unsigned setn_mem_hl_var_addr = HL(); \ + unsigned setn_mem_hl_var_tmp; \ +\ + READ(setn_mem_hl_var_tmp, setn_mem_hl_var_addr); \ + setn_mem_hl_var_tmp |= 1 << (n); \ +\ + WRITE(setn_mem_hl_var_addr, setn_mem_hl_var_tmp); \ +} while (0) + +//res n,r (8 cycles): +//Unset bitn of 8-bit register: +#define res0_r(r) ( (r) &= 0xFE ) +#define res1_r(r) ( (r) &= 0xFD ) +#define res2_r(r) ( (r) &= 0xFB ) +#define res3_r(r) ( (r) &= 0xF7 ) +#define res4_r(r) ( (r) &= 0xEF ) +#define res5_r(r) ( (r) &= 0xDF ) +#define res6_r(r) ( (r) &= 0xBF ) +#define res7_r(r) ( (r) &= 0x7F ) + +//res n,(hl) (16 cycles): +//Unset bitn of value at address stored in HL: +#define resn_mem_hl(n) do { \ + const unsigned resn_mem_hl_var_addr = HL(); \ + unsigned resn_mem_hl_var_tmp; \ +\ + READ(resn_mem_hl_var_tmp, resn_mem_hl_var_addr); \ + resn_mem_hl_var_tmp &= ~(1 << (n)); \ +\ + WRITE(resn_mem_hl_var_addr, resn_mem_hl_var_tmp); \ +} while (0) + + +//16-BIT LOADS: +//ld rr,nn (12 cycles) +//set rr to 16-bit value of next 2 bytes in memory +#define ld_rr_nn(r1, r2) do { \ + PC_READ(r2); \ + PC_READ(r1); \ +} while (0) + +//push rr (16 cycles): +//Push value of register pair onto stack: +#define push_rr(r1, r2) do { \ + PUSH(r1, r2); \ + cycleCounter += 4; \ +} while (0) + +//pop rr (12 cycles): +//Pop two bytes off stack into register pair: +#define pop_rr(r1, r2) do { \ + READ(r2, SP); \ + SP = (SP + 1) & 0xFFFF; \ + READ(r1, SP); \ + SP = (SP + 1) & 0xFFFF; \ +} while (0) + +//8-BIT ALU: +//add a,r (4 cycles): +//add a,(addr) (8 cycles): +//Add 8-bit value to A, check flags: +#define add_a_u8(u8) do { \ + HF1 = A; \ + HF2 = u8; \ + ZF = CF = A + HF2; \ + A = ZF & 0xFF; \ +} while (0) + +//adc a,r (4 cycles): +//adc a,(addr) (8 cycles): +//Add 8-bit value+CF to A, check flags: +#define adc_a_u8(u8) do { \ + HF1 = A; \ + HF2 = (CF & 0x100) | (u8); \ + ZF = CF = (CF >> 8 & 1) + (u8) + A; \ + A = ZF & 0xFF; \ +} while (0) + +//sub a,r (4 cycles): +//sub a,(addr) (8 cycles): +//Subtract 8-bit value from A, check flags: +#define sub_a_u8(u8) do { \ + HF1 = A; \ + HF2 = u8; \ + ZF = CF = A - HF2; \ + A = ZF & 0xFF; \ + HF2 |= 0x400; \ +} while (0) + +//sbc a,r (4 cycles): +//sbc a,(addr) (8 cycles): +//Subtract CF and 8-bit value from A, check flags: +#define sbc_a_u8(u8) do { \ + HF1 = A; \ + HF2 = 0x400 | (CF & 0x100) | (u8); \ + ZF = CF = A - ((CF >> 8) & 1) - (u8); \ + A = ZF & 0xFF; \ +} while (0) + +//and a,r (4 cycles): +//and a,(addr) (8 cycles): +//bitwise and 8-bit value into A, check flags: +#define and_a_u8(u8) do { \ + HF2 = 0x200; \ + CF = 0; \ + A &= (u8); \ + ZF = A; \ +} while (0) + +//or a,r (4 cycles): +//or a,(hl) (8 cycles): +//bitwise or 8-bit value into A, check flags: +#define or_a_u8(u8) do { \ + CF = HF2 = 0; \ + A |= (u8); \ + ZF = A; \ +} while (0) + +//xor a,r (4 cycles): +//xor a,(hl) (8 cycles): +//bitwise xor 8-bit value into A, check flags: +#define xor_a_u8(u8) do { \ + CF = HF2 = 0; \ + A ^= (u8); \ + ZF = A; \ +} while (0) + +//cp a,r (4 cycles): +//cp a,(addr) (8 cycles): +//Compare (subtract without storing result) 8-bit value to A, check flags: +#define cp_a_u8(u8) do { \ + HF1 = A; \ + HF2 = u8; \ + ZF = CF = A - HF2; \ + HF2 |= 0x400; \ +} while (0) + +//inc r (4 cycles): +//Increment value of 8-bit register, check flags except CF: +#define inc_r(r) do { \ + HF2 = (r) | 0x800; \ + ZF = (r) + 1; \ + (r) = ZF & 0xFF; \ +} while (0) + +//dec r (4 cycles): +//Decrement value of 8-bit register, check flags except CF: +#define dec_r(r) do { \ + HF2 = (r) | 0xC00; \ + ZF = (r) - 1; \ + (r) = ZF & 0xFF; \ +} while (0) + +//16-BIT ARITHMETIC +//add hl,rr (8 cycles): +//add 16-bit register to HL, check flags except ZF: +/*#define add_hl_rr(rh, rl) do { \ + L = HF1 = L + (rl); \ + HF1 >>= 8; \ + HF1 += H; \ + HF2 = (rh); \ + H = CF = HF1 + (rh); \ + cycleCounter += 4; \ +} while (0)*/ + +#define add_hl_rr(rh, rl) do { \ + CF = L + (rl); \ + L = CF & 0xFF; \ + HF1 = H; \ + HF2 = (CF & 0x100) | (rh); \ + CF = H + (CF >> 8) + (rh); \ + H = CF & 0xFF; \ + cycleCounter += 4; \ +} while (0) + +//inc rr (8 cycles): +//Increment 16-bit register: +#define inc_rr(rh, rl) do { \ + const unsigned inc_rr_var_tmp = (rl) + 1; \ + (rl) = inc_rr_var_tmp & 0xFF; \ + (rh) = ((rh) + (inc_rr_var_tmp >> 8)) & 0xFF; \ + cycleCounter += 4; \ +} while (0) + +//dec rr (8 cycles): +//Decrement 16-bit register: +#define dec_rr(rh, rl) do { \ + const unsigned dec_rr_var_tmp = (rl) - 1; \ + (rl) = dec_rr_var_tmp & 0xFF; \ + (rh) = ((rh) - (dec_rr_var_tmp >> 8 & 1)) & 0xFF; \ + cycleCounter += 4; \ +} while (0) + +#define sp_plus_n(sumout) do { \ + unsigned sp_plus_n_var_n; \ + PC_READ(sp_plus_n_var_n); \ + sp_plus_n_var_n = (sp_plus_n_var_n ^ 0x80) - 0x80; \ + \ + const unsigned sp_plus_n_var_sum = SP + sp_plus_n_var_n; \ + CF = SP ^ sp_plus_n_var_n ^ sp_plus_n_var_sum; \ + HF2 = CF << 5 & 0x200; \ + ZF = 1; \ + cycleCounter += 4; \ + (sumout) = sp_plus_n_var_sum & 0xFFFF; \ +} while (0) + +//JUMPS: +//jp nn (16 cycles): +//Jump to address stored in the next two bytes in memory: +#define jp_nn() do { \ + unsigned jp_nn_var_l, jp_nn_var_h; \ +\ + PC_READ(jp_nn_var_l); \ + PC_READ(jp_nn_var_h); \ +\ + PC_MOD(jp_nn_var_h << 8 | jp_nn_var_l); \ +} while (0) + +//jr disp (12 cycles): +//Jump to value of next (signed) byte in memory+current address: +#define jr_disp() do { \ + unsigned jr_disp_var_tmp; \ +\ + PC_READ(jr_disp_var_tmp); \ + jr_disp_var_tmp = (jr_disp_var_tmp ^ 0x80) - 0x80; \ +\ + PC_MOD((PC + jr_disp_var_tmp) & 0xFFFF); \ +} while (0) + +//CALLS, RESTARTS AND RETURNS: +//call nn (24 cycles): +//Push address of next instruction onto stack and then jump to address stored in next two bytes in memory: +#define call_nn() do { \ + PUSH(((PC + 2) >> 8) & 0xFF, (PC + 2) & 0xFF); \ + jp_nn(); \ +} while (0) + +//rst n (16 Cycles): +//Push present address onto stack, jump to address n (one of 00h,08h,10h,18h,20h,28h,30h,38h): +#define rst_n(n) do { \ + PUSH(PC >> 8, PC & 0xFF); \ + PC_MOD(n); \ +} while (0) + +//ret (16 cycles): +//Pop two bytes from the stack and jump to that address: +#define ret() do { \ + unsigned ret_var_l, ret_var_h; \ +\ + pop_rr(ret_var_h, ret_var_l); \ +\ + PC_MOD(ret_var_h << 8 | ret_var_l); \ +} while (0) + +void CPU::process(const unsigned long cycles) { + memory.setEndtime(cycleCounter_, cycles); + + unsigned char A = A_; + unsigned long cycleCounter = cycleCounter_; + + while (memory.isActive()) { + unsigned short PC = PC_; + + if (halted) { + if (cycleCounter < memory.getNextEventTime()) { + const unsigned long cycles = memory.getNextEventTime() - cycleCounter; + cycleCounter += cycles + ((4 - (cycles & 3)) & 3); + } + } else while (cycleCounter < memory.getNextEventTime()) { + unsigned char opcode; + + PC_READ(opcode); + + if (skip) { + PC = (PC - 1) & 0xFFFF; + skip = false; + } + + switch (opcode) { + //nop (4 cycles): + //Do nothing for 4 cycles: + case 0x00: + break; + case 0x01: + ld_rr_nn(B, C); + break; + case 0x02: + WRITE(BC(), A); + break; + case 0x03: + inc_rr(B, C); + break; + case 0x04: + inc_r(B); + break; + case 0x05: + dec_r(B); + break; + case 0x06: + PC_READ(B); + break; + + //rlca (4 cycles): + //Rotate 8-bit register A left, store old bit7 in CF. Reset SF, HCF, ZF: + case 0x07: + CF = A << 1; + A = (CF | CF >> 8) & 0xFF; + HF2 = 0; + ZF = 1; + break; + + //ld (nn),SP (20 cycles): + //Put value of SP into address given by next 2 bytes in memory: + case 0x08: + { + unsigned l, h; + + PC_READ(l); + PC_READ(h); + + const unsigned addr = h << 8 | l; + + WRITE(addr, SP & 0xFF); + WRITE((addr + 1) & 0xFFFF, SP >> 8); + } + break; + + case 0x09: + add_hl_rr(B, C); + break; + case 0x0A: + READ(A, BC()); + break; + case 0x0B: + dec_rr(B, C); + break; + case 0x0C: + inc_r(C); + break; + case 0x0D: + dec_r(C); + break; + case 0x0E: + PC_READ(C); + break; + + //rrca (4 cycles): + //Rotate 8-bit register A right, store old bit0 in CF. Reset SF, HCF, ZF: + case 0x0F: + CF = A << 8 | A; + A = CF >> 1 & 0xFF; + HF2 = 0; + ZF = 1; + break; + + //stop (4 cycles): + //Halt CPU and LCD display until button pressed: + case 0x10: + memory.speedChange(cycleCounter); + PC = (PC + 1) & 0xFFFF; + break; + case 0x11: + ld_rr_nn(D, E); + break; + case 0x12: + WRITE(DE(), A); + break; + case 0x13: + inc_rr(D, E); + break; + case 0x14: + inc_r(D); + break; + case 0x15: + dec_r(D); + break; + case 0x16: + PC_READ(D); + break; + + //rla (4 cycles): + //Rotate 8-bit register A left through CF, store old bit7 in CF, old CF value becomes bit0. Reset SF, HCF, ZF: + case 0x17: + { + const unsigned oldcf = CF >> 8 & 1; + CF = A << 1; + A = (CF | oldcf) & 0xFF; + } + + HF2 = 0; + ZF = 1; + break; + + case 0x18: + jr_disp(); + break; + case 0x19: + add_hl_rr(D, E); + break; + case 0x1A: + READ(A, DE()); + break; + case 0x1B: + dec_rr(D, E); + break; + case 0x1C: + inc_r(E); + break; + case 0x1D: + dec_r(E); + break; + case 0x1E: + PC_READ(E); + break; + + //rra (4 cycles): + //Rotate 8-bit register A right through CF, store old bit0 in CF, old CF value becomes bit7. Reset SF, HCF, ZF: + case 0x1F: + { + const unsigned oldcf = CF & 0x100; + CF = A << 8; + A = (A | oldcf) >> 1; + } + + HF2 = 0; + ZF = 1; + break; + + //jr nz,disp (12;8 cycles): + //Jump to value of next (signed) byte in memory+current address if ZF is unset: + case 0x20: + if (ZF & 0xFF) { + jr_disp(); + } else { + PC_MOD((PC + 1) & 0xFFFF); + } + break; + + case 0x21: + ld_rr_nn(H, L); + break; + + //ldi (hl),a (8 cycles): + //Put A into memory address in hl. Increment HL: + case 0x22: + { + unsigned addr = HL(); + + WRITE(addr, A); + + addr = (addr + 1) & 0xFFFF; + L = addr; + H = addr >> 8; + } + break; + + case 0x23: + inc_rr(H, L); + break; + case 0x24: + inc_r(H); + break; + case 0x25: + dec_r(H); + break; + case 0x26: + PC_READ(H); + break; + + + //daa (4 cycles): + //Adjust register A to correctly represent a BCD. Check ZF, HF and CF: + case 0x27: + /*{ + unsigned correction = ((A > 0x99) || (CF & 0x100)) ? 0x60 : 0x00; + + calcHF(HF1, HF2); + + if ((A & 0x0F) > 0x09 || (HF2 & 0x200)) + correction |= 0x06; + + HF1 = A; + HF2 = (HF2 & 0x400) | correction; + CF = (correction & 0x40) << 2; + A = (HF2 & 0x400) ? A - correction : (A + correction); + ZF = A; + }*/ + + calcHF(HF1, HF2); + + { + unsigned correction = (CF & 0x100) ? 0x60 : 0x00; + + if (HF2 & 0x200) + correction |= 0x06; + + if (!(HF2 &= 0x400)) { + if ((A & 0x0F) > 0x09) + correction |= 0x06; + + if (A > 0x99) + correction |= 0x60; + + A += correction; + } else + A -= correction; + + CF = correction << 2 & 0x100; + ZF = A; + A &= 0xFF; + } + break; + + //jr z,disp (12;8 cycles): + //Jump to value of next (signed) byte in memory+current address if ZF is set: + case 0x28: + if (ZF & 0xFF) { + PC_MOD((PC + 1) & 0xFFFF); + } else { + jr_disp(); + } + break; + + //add hl,hl (8 cycles): + //add 16-bit register HL to HL, check flags except ZF: + case 0x29: + add_hl_rr(H, L); + break; + + //ldi a,(hl) (8 cycles): + //Put value at address in hl into A. Increment HL: + case 0x2A: + { + unsigned addr = HL(); + + READ(A, addr); + + addr = (addr + 1) & 0xFFFF; + L = addr; + H = addr >> 8; + } + break; + + case 0x2B: + dec_rr(H, L); + break; + case 0x2C: + inc_r(L); + break; + case 0x2D: + dec_r(L); + break; + case 0x2E: + PC_READ(L); + break; + + //cpl (4 cycles): + //Complement register A. (Flip all bits), set SF and HCF: + case 0x2F: /*setSubtractFlag(); setHalfCarryFlag();*/ + HF2 = 0x600; + A ^= 0xFF; + break; + + //jr nc,disp (12;8 cycles): + //Jump to value of next (signed) byte in memory+current address if CF is unset: + case 0x30: + if (CF & 0x100) { + PC_MOD((PC + 1) & 0xFFFF); + } else { + jr_disp(); + } + break; + + //ld sp,nn (12 cycles) + //set sp to 16-bit value of next 2 bytes in memory + case 0x31: + { + unsigned l, h; + + PC_READ(l); + PC_READ(h); + + SP = h << 8 | l; + } + break; + + //ldd (hl),a (8 cycles): + //Put A into memory address in hl. Decrement HL: + case 0x32: + { + unsigned addr = HL(); + + WRITE(addr, A); + + addr = (addr - 1) & 0xFFFF; + L = addr; + H = addr >> 8; + } + break; + + case 0x33: + SP = (SP + 1) & 0xFFFF; + cycleCounter += 4; + break; + + //inc (hl) (12 cycles): + //Increment value at address in hl, check flags except CF: + case 0x34: + { + const unsigned addr = HL(); + + READ(HF2, addr); + ZF = HF2 + 1; + WRITE(addr, ZF & 0xFF); + HF2 |= 0x800; + } + break; + + //dec (hl) (12 cycles): + //Decrement value at address in hl, check flags except CF: + case 0x35: + { + const unsigned addr = HL(); + + READ(HF2, addr); + ZF = HF2 - 1; + WRITE(addr, ZF & 0xFF); + HF2 |= 0xC00; + } + break; + + //ld (hl),n (12 cycles): + //set memory at address in hl to value of next byte in memory: + case 0x36: + { + unsigned tmp; + + PC_READ(tmp); + WRITE(HL(), tmp); + } + break; + + //scf (4 cycles): + //Set CF. Unset SF and HCF: + case 0x37: /*setCarryFlag(); unsetSubtractFlag(); unsetHalfCarryFlag();*/ + CF = 0x100; + HF2 = 0; + break; + + //jr c,disp (12;8 cycles): + //Jump to value of next (signed) byte in memory+current address if CF is set: + case 0x38: //PC+=(((int8_t)memory.read(PC++))*CarryFlag()); Cycles(8); break; + if (CF & 0x100) { + jr_disp(); + } else { + PC_MOD((PC + 1) & 0xFFFF); + } + break; + + //add hl,sp (8 cycles): + //add SP to HL, check flags except ZF: + case 0x39: /*add_hl_rr(SP>>8, SP); break;*/ + CF = L + SP; + L = CF & 0xFF; + HF1 = H; + HF2 = ((CF ^ SP) & 0x100) | SP >> 8; + CF >>= 8; + CF += H; + H = CF & 0xFF; + cycleCounter += 4; + break; + + //ldd a,(hl) (8 cycles): + //Put value at address in hl into A. Decrement HL: + case 0x3A: + { + unsigned addr = HL(); + + A = memory.read(addr, cycleCounter); + cycleCounter += 4; + + addr = (addr - 1) & 0xFFFF; + L = addr; + H = addr >> 8; + } + break; + + case 0x3B: + SP = (SP - 1) & 0xFFFF; + cycleCounter += 4; + break; + case 0x3C: + inc_r(A); + break; + case 0x3D: + dec_r(A); + break; + case 0x3E: + PC_READ(A); + break; + + //ccf (4 cycles): + //Complement CF (unset if set vv.) Unset SF and HCF. + case 0x3F: /*complementCarryFlag(); unsetSubtractFlag(); unsetHalfCarryFlag();*/ + CF ^= 0x100; + HF2 = 0; + break; + + //ld r,r (4 cycles):next_irqEventTime + //ld r,(r) (8 cycles): + case 0x40: + B = B; + break; + case 0x41: + B = C; + break; + case 0x42: + B = D; + break; + case 0x43: + B = E; + break; + case 0x44: + B = H; + break; + case 0x45: + B = L; + break; + case 0x46: + READ(B, HL()); + break; + case 0x47: + B = A; + break; + case 0x48: + C = B; + break; + case 0x49: + C = C; + break; + case 0x4A: + C = D; + break; + case 0x4B: + C = E; + break; + case 0x4C: + C = H; + break; + case 0x4D: + C = L; + break; + case 0x4E: + READ(C, HL()); + break; + case 0x4F: + C = A; + break; + case 0x50: + D = B; + break; + case 0x51: + D = C; + break; + case 0x52: + D = D; + break; + case 0x53: + D = E; + break; + case 0x54: + D = H; + break; + case 0x55: + D = L; + break; + case 0x56: + READ(D, HL()); + break; + case 0x57: + D = A; + break; + case 0x58: + E = B; + break; + case 0x59: + E = C; + break; + case 0x5A: + E = D; + break; + case 0x5B: + E = E; + break; + case 0x5C: + E = H; + break; + case 0x5D: + E = L; + break; + case 0x5E: + READ(E, HL()); + break; + case 0x5F: + E = A; + break; + case 0x60: + H = B; + break; + case 0x61: + H = C; + break; + case 0x62: + H = D; + break; + case 0x63: + H = E; + break; + case 0x64: + H = H; + break; + case 0x65: + H = L; + break; + case 0x66: + READ(H, HL()); + break; + case 0x67: + H = A; + break; + case 0x68: + L = B; + break; + case 0x69: + L = C; + break; + case 0x6A: + L = D; + break; + case 0x6B: + L = E; + break; + case 0x6C: + L = H; + break; + case 0x6D: + L = L; + break; + case 0x6E: + READ(L, HL()); + break; + case 0x6F: + L = A; + break; + case 0x70: + WRITE(HL(), B); + break; + case 0x71: + WRITE(HL(), C); + break; + case 0x72: + WRITE(HL(), D); + break; + case 0x73: + WRITE(HL(), E); + break; + case 0x74: + WRITE(HL(), H); + break; + case 0x75: + WRITE(HL(), L); + break; + + //halt (4 cycles): + case 0x76: +// printf("halt\n"); + if (memory.getIME()/* || memory.next_eitime*/) { + halted = 1; + + if (cycleCounter < memory.getNextEventTime()) { + const unsigned long cycles = memory.getNextEventTime() - cycleCounter; + cycleCounter += cycles + ((4 - (cycles & 3)) & 3); + } + } else { + if ((memory.ff_read(0xFF0F, cycleCounter) & memory.ff_read(0xFFFF, cycleCounter)) & 0x1F) { + if (memory.isCgb()) + cycleCounter += 8; //two nops. + else + skip = true; + } else { + memory.schedule_unhalt(); + halted = 1; + + if (cycleCounter < memory.getNextEventTime()) { + const unsigned long cycles = memory.getNextEventTime() - cycleCounter; + cycleCounter += cycles + ((4 - (cycles & 3)) & 3); + } + } + } + break; + case 0x77: + WRITE(HL(), A); + break; + case 0x78: + A = B; + break; + case 0x79: + A = C; + break; + case 0x7A: + A = D; + break; + case 0x7B: + A = E; + break; + case 0x7C: + A = H; + break; + case 0x7D: + A = L; + break; + case 0x7E: + READ(A, HL()); + break; + case 0x7F: + A = A; + break; + case 0x80: + add_a_u8(B); + break; + case 0x81: + add_a_u8(C); + break; + case 0x82: + add_a_u8(D); + break; + case 0x83: + add_a_u8(E); + break; + case 0x84: + add_a_u8(H); + break; + case 0x85: + add_a_u8(L); + break; + case 0x86: + { + unsigned data; + + READ(data, HL()); + + add_a_u8(data); + } + break; + case 0x87: + add_a_u8(A); + break; + case 0x88: + adc_a_u8(B); + break; + case 0x89: + adc_a_u8(C); + break; + case 0x8A: + adc_a_u8(D); + break; + case 0x8B: + adc_a_u8(E); + break; + case 0x8C: + adc_a_u8(H); + break; + case 0x8D: + adc_a_u8(L); + break; + case 0x8E: + { + unsigned data; + + READ(data, HL()); + + adc_a_u8(data); + } + break; + case 0x8F: + adc_a_u8(A); + break; + case 0x90: + sub_a_u8(B); + break; + case 0x91: + sub_a_u8(C); + break; + case 0x92: + sub_a_u8(D); + break; + case 0x93: + sub_a_u8(E); + break; + case 0x94: + sub_a_u8(H); + break; + case 0x95: + sub_a_u8(L); + break; + case 0x96: + { + unsigned data; + + READ(data, HL()); + + sub_a_u8(data); + } + break; + //A-A is always 0: + case 0x97: + HF2 = 0x400; + CF = ZF = A = 0; + break; + case 0x98: + sbc_a_u8(B); + break; + case 0x99: + sbc_a_u8(C); + break; + case 0x9A: + sbc_a_u8(D); + break; + case 0x9B: + sbc_a_u8(E); + break; + case 0x9C: + sbc_a_u8(H); + break; + case 0x9D: + sbc_a_u8(L); + break; + case 0x9E: + { + unsigned data; + + READ(data, HL()); + + sbc_a_u8(data); + } + break; + case 0x9F: + sbc_a_u8(A); + break; + case 0xA0: + and_a_u8(B); + break; + case 0xA1: + and_a_u8(C); + break; + case 0xA2: + and_a_u8(D); + break; + case 0xA3: + and_a_u8(E); + break; + case 0xA4: + and_a_u8(H); + break; + case 0xA5: + and_a_u8(L); + break; + case 0xA6: + { + unsigned data; + + READ(data, HL()); + + and_a_u8(data); + } + break; + //A&A will always be A: + case 0xA7: + ZF = A; + CF = 0; + HF2 = 0x200; + break; + case 0xA8: + xor_a_u8(B); + break; + case 0xA9: + xor_a_u8(C); + break; + case 0xAA: + xor_a_u8(D); + break; + case 0xAB: + xor_a_u8(E); + break; + case 0xAC: + xor_a_u8(H); + break; + case 0xAD: + xor_a_u8(L); + break; + case 0xAE: + { + unsigned data; + + READ(data, HL()); + + xor_a_u8(data); + } + break; + //A^A will always be 0: + case 0xAF: + CF = HF2 = ZF = A = 0; + break; + case 0xB0: + or_a_u8(B); + break; + case 0xB1: + or_a_u8(C); + break; + case 0xB2: + or_a_u8(D); + break; + case 0xB3: + or_a_u8(E); + break; + case 0xB4: + or_a_u8(H); + break; + case 0xB5: + or_a_u8(L); + break; + case 0xB6: + { + unsigned data; + + READ(data, HL()); + + or_a_u8(data); + } + break; + //A|A will always be A: + case 0xB7: + ZF = A; + HF2 = CF = 0; + break; + case 0xB8: + cp_a_u8(B); + break; + case 0xB9: + cp_a_u8(C); + break; + case 0xBA: + cp_a_u8(D); + break; + case 0xBB: + cp_a_u8(E); + break; + case 0xBC: + cp_a_u8(H); + break; + case 0xBD: + cp_a_u8(L); + break; + case 0xBE: + { + unsigned data; + + READ(data, HL()); + + cp_a_u8(data); + } + break; + //A always equals A: + case 0xBF: + CF = ZF = 0; + HF2 = 0x400; + break; + + //ret nz (20;8 cycles): + //Pop two bytes from the stack and jump to that address, if ZF is unset: + case 0xC0: + cycleCounter += 4; + + if (ZF & 0xFF) { + ret(); + } + break; + + case 0xC1: + pop_rr(B, C); + break; + + //jp nz,nn (16;12 cycles): + //Jump to address stored in next two bytes in memory if ZF is unset: + case 0xC2: + if (ZF & 0xFF) { + jp_nn(); + } else { + PC_MOD((PC + 2) & 0xFFFF); + cycleCounter += 4; + } + break; + + case 0xC3: + jp_nn(); + break; + + //call nz,nn (24;12 cycles): + //Push address of next instruction onto stack and then jump to address stored in next two bytes in memory, if ZF is unset: + case 0xC4: + if (ZF & 0xFF) { + call_nn(); + } else { + PC_MOD((PC + 2) & 0xFFFF); + cycleCounter += 4; + } + break; + + case 0xC5: + push_rr(B, C); + break; + case 0xC6: + { + unsigned data; + + PC_READ(data); + + add_a_u8(data); + } + break; + case 0xC7: + rst_n(0x00); + break; + + //ret z (20;8 cycles): + //Pop two bytes from the stack and jump to that address, if ZF is set: + case 0xC8: + cycleCounter += 4; + + if (!(ZF & 0xFF)) { + ret(); + } + + break; + + //ret (16 cycles): + //Pop two bytes from the stack and jump to that address: + case 0xC9: + ret(); + break; + + //jp z,nn (16;12 cycles): + //Jump to address stored in next two bytes in memory if ZF is set: + case 0xCA: + if (ZF & 0xFF) { + PC_MOD((PC + 2) & 0xFFFF); + cycleCounter += 4; + } else { + jp_nn(); + } + break; + + + //CB OPCODES (Shifts, rotates and bits): + case 0xCB: + PC_READ(opcode); + + switch (opcode) { + case 0x00: + rlc_r(B); + break; + case 0x01: + rlc_r(C); + break; + case 0x02: + rlc_r(D); + break; + case 0x03: + rlc_r(E); + break; + case 0x04: + rlc_r(H); + break; + case 0x05: + rlc_r(L); + break; + //rlc (hl) (16 cycles): + //Rotate 8-bit value stored at address in HL left, store old bit7 in CF. Reset SF and HCF. Check ZF: + case 0x06: + { + const unsigned addr = HL(); + + READ(CF, addr); + CF <<= 1; + + ZF = CF | (CF >> 8); + + WRITE(addr, ZF & 0xFF); + + HF2 = 0; + } + break; + case 0x07: + rlc_r(A); + break; + case 0x08: + rrc_r(B); + break; + case 0x09: + rrc_r(C); + break; + case 0x0A: + rrc_r(D); + break; + case 0x0B: + rrc_r(E); + break; + case 0x0C: + rrc_r(H); + break; + case 0x0D: + rrc_r(L); + break; + //rrc (hl) (16 cycles): + //Rotate 8-bit value stored at address in HL right, store old bit0 in CF. Reset SF and HCF. Check ZF: + case 0x0E: + { + const unsigned addr = HL(); + + READ(ZF, addr); + + CF = ZF << 8; + + WRITE(addr, (ZF | CF) >> 1 & 0xFF); + + HF2 = 0; + } + break; + case 0x0F: + rrc_r(A); + break; + case 0x10: + rl_r(B); + break; + case 0x11: + rl_r(C); + break; + case 0x12: + rl_r(D); + break; + case 0x13: + rl_r(E); + break; + case 0x14: + rl_r(H); + break; + case 0x15: + rl_r(L); + break; + //rl (hl) (16 cycles): + //Rotate 8-bit value stored at address in HL left thorugh CF, store old bit7 in CF, old CF value becoms bit0. Reset SF and HCF. Check ZF: + case 0x16: + { + const unsigned addr = HL(); + const unsigned oldcf = CF >> 8 & 1; + + READ(CF, addr); + CF <<= 1; + + ZF = CF | oldcf; + + WRITE(addr, ZF & 0xFF); + + HF2 = 0; + } + break; + case 0x17: + rl_r(A); + break; + case 0x18: + rr_r(B); + break; + case 0x19: + rr_r(C); + break; + case 0x1A: + rr_r(D); + break; + case 0x1B: + rr_r(E); + break; + case 0x1C: + rr_r(H); + break; + case 0x1D: + rr_r(L); + break; + //rr (hl) (16 cycles): + //Rotate 8-bit value stored at address in HL right thorugh CF, store old bit0 in CF, old CF value becoms bit7. Reset SF and HCF. Check ZF: + case 0x1E: + { + const unsigned addr = HL(); + + READ(ZF, addr); + + const unsigned oldcf = CF & 0x100; + CF = ZF << 8; + ZF = (ZF | oldcf) >> 1; + + WRITE(addr, ZF); + + HF2 = 0; + } + break; + case 0x1F: + rr_r(A); + break; + case 0x20: + sla_r(B); + break; + case 0x21: + sla_r(C); + break; + case 0x22: + sla_r(D); + break; + case 0x23: + sla_r(E); + break; + case 0x24: + sla_r(H); + break; + case 0x25: + sla_r(L); + break; + //sla (hl) (16 cycles): + //Shift 8-bit value stored at address in HL left, store old bit7 in CF. Reset SF and HCF. Check ZF: + case 0x26: + { + const unsigned addr = HL(); + + READ(CF, addr); + CF <<= 1; + + ZF = CF; + + WRITE(addr, ZF & 0xFF); + + HF2 = 0; + } + break; + case 0x27: + sla_r(A); + break; + case 0x28: + sra_r(B); + break; + case 0x29: + sra_r(C); + break; + case 0x2A: + sra_r(D); + break; + case 0x2B: + sra_r(E); + break; + case 0x2C: + sra_r(H); + break; + case 0x2D: + sra_r(L); + break; + //sra (hl) (16 cycles): + //Shift 8-bit value stored at address in HL right, store old bit0 in CF, bit7=old bit7. Reset SF and HCF. Check ZF: + case 0x2E: + { + const unsigned addr = HL(); + + READ(CF, addr); + + ZF = CF >> 1; + + WRITE(addr, ZF | (CF & 0x80)); + + CF <<= 8; + HF2 = 0; + } + break; + case 0x2F: + sra_r(A); + break; + case 0x30: + swap_r(B); + break; + case 0x31: + swap_r(C); + break; + case 0x32: + swap_r(D); + break; + case 0x33: + swap_r(E); + break; + case 0x34: + swap_r(H); + break; + case 0x35: + swap_r(L); + break; + //swap (hl) (16 cycles): + //Swap upper and lower nibbles of 8-bit value stored at address in HL, reset flags, check zero flag: + case 0x36: + { + const unsigned addr = HL(); + + READ(ZF, addr); + + WRITE(addr, (ZF << 4 | ZF >> 4) & 0xFF); + + CF = HF2 = 0; + } + break; + case 0x37: + swap_r(A); + break; + case 0x38: + srl_r(B); + break; + case 0x39: + srl_r(C); + break; + case 0x3A: + srl_r(D); + break; + case 0x3B: + srl_r(E); + break; + case 0x3C: + srl_r(H); + break; + case 0x3D: + srl_r(L); + break; + //srl (hl) (16 cycles): + //Shift 8-bit value stored at address in HL right, store old bit0 in CF. Reset SF and HCF. Check ZF: + case 0x3E: + { + const unsigned addr = HL(); + + READ(CF, addr); + + ZF = CF >> 1; + + WRITE(addr, ZF); + + CF <<= 8; + HF2 = 0; + } + break; + case 0x3F: + srl_r(A); + break; + case 0x40: + bit0_u8(B); + break; + case 0x41: + bit0_u8(C); + break; + case 0x42: + bit0_u8(D); + break; + case 0x43: + bit0_u8(E); + break; + case 0x44: + bit0_u8(H); + break; + case 0x45: + bit0_u8(L); + break; + case 0x46: + { + unsigned data; + + READ(data, HL()); + + bit0_u8(data); + } + break; + case 0x47: + bit0_u8(A); + break; + case 0x48: + bit1_u8(B); + break; + case 0x49: + bit1_u8(C); + break; + case 0x4A: + bit1_u8(D); + break; + case 0x4B: + bit1_u8(E); + break; + case 0x4C: + bit1_u8(H); + break; + case 0x4D: + bit1_u8(L); + break; + case 0x4E: + { + unsigned data; + + READ(data, HL()); + + bit1_u8(data); + } + break; + case 0x4F: + bit1_u8(A); + break; + case 0x50: + bit2_u8(B); + break; + case 0x51: + bit2_u8(C); + break; + case 0x52: + bit2_u8(D); + break; + case 0x53: + bit2_u8(E); + break; + case 0x54: + bit2_u8(H); + break; + case 0x55: + bit2_u8(L); + break; + case 0x56: + { + unsigned data; + + READ(data, HL()); + + bit2_u8(data); + } + break; + case 0x57: + bit2_u8(A); + break; + case 0x58: + bit3_u8(B); + break; + case 0x59: + bit3_u8(C); + break; + case 0x5A: + bit3_u8(D); + break; + case 0x5B: + bit3_u8(E); + break; + case 0x5C: + bit3_u8(H); + break; + case 0x5D: + bit3_u8(L); + break; + case 0x5E: + { + unsigned data; + + READ(data, HL()); + + bit3_u8(data); + } + break; + case 0x5F: + bit3_u8(A); + break; + case 0x60: + bit4_u8(B); + break; + case 0x61: + bit4_u8(C); + break; + case 0x62: + bit4_u8(D); + break; + case 0x63: + bit4_u8(E); + break; + case 0x64: + bit4_u8(H); + break; + case 0x65: + bit4_u8(L); + break; + case 0x66: + { + unsigned data; + + READ(data, HL()); + + bit4_u8(data); + } + break; + case 0x67: + bit4_u8(A); + break; + case 0x68: + bit5_u8(B); + break; + case 0x69: + bit5_u8(C); + break; + case 0x6A: + bit5_u8(D); + break; + case 0x6B: + bit5_u8(E); + break; + case 0x6C: + bit5_u8(H); + break; + case 0x6D: + bit5_u8(L); + break; + case 0x6E: + { + unsigned data; + + READ(data, HL()); + + bit5_u8(data); + } + break; + case 0x6F: + bit5_u8(A); + break; + case 0x70: + bit6_u8(B); + break; + case 0x71: + bit6_u8(C); + break; + case 0x72: + bit6_u8(D); + break; + case 0x73: + bit6_u8(E); + break; + case 0x74: + bit6_u8(H); + break; + case 0x75: + bit6_u8(L); + break; + case 0x76: + { + unsigned data; + + READ(data, HL()); + + bit6_u8(data); + } + break; + case 0x77: + bit6_u8(A); + break; + case 0x78: + bit7_u8(B); + break; + case 0x79: + bit7_u8(C); + break; + case 0x7A: + bit7_u8(D); + break; + case 0x7B: + bit7_u8(E); + break; + case 0x7C: + bit7_u8(H); + break; + case 0x7D: + bit7_u8(L); + break; + case 0x7E: + { + unsigned data; + + READ(data, HL()); + + bit7_u8(data); + } + break; + case 0x7F: + bit7_u8(A); + break; + case 0x80: + res0_r(B); + break; + case 0x81: + res0_r(C); + break; + case 0x82: + res0_r(D); + break; + case 0x83: + res0_r(E); + break; + case 0x84: + res0_r(H); + break; + case 0x85: + res0_r(L); + break; + case 0x86: + resn_mem_hl(0); + break; + case 0x87: + res0_r(A); + break; + case 0x88: + res1_r(B); + break; + case 0x89: + res1_r(C); + break; + case 0x8A: + res1_r(D); + break; + case 0x8B: + res1_r(E); + break; + case 0x8C: + res1_r(H); + break; + case 0x8D: + res1_r(L); + break; + case 0x8E: + resn_mem_hl(1); + break; + case 0x8F: + res1_r(A); + break; + case 0x90: + res2_r(B); + break; + case 0x91: + res2_r(C); + break; + case 0x92: + res2_r(D); + break; + case 0x93: + res2_r(E); + break; + case 0x94: + res2_r(H); + break; + case 0x95: + res2_r(L); + break; + case 0x96: + resn_mem_hl(2); + break; + case 0x97: + res2_r(A); + break; + case 0x98: + res3_r(B); + break; + case 0x99: + res3_r(C); + break; + case 0x9A: + res3_r(D); + break; + case 0x9B: + res3_r(E); + break; + case 0x9C: + res3_r(H); + break; + case 0x9D: + res3_r(L); + break; + case 0x9E: + resn_mem_hl(3); + break; + case 0x9F: + res3_r(A); + break; + case 0xA0: + res4_r(B); + break; + case 0xA1: + res4_r(C); + break; + case 0xA2: + res4_r(D); + break; + case 0xA3: + res4_r(E); + break; + case 0xA4: + res4_r(H); + break; + case 0xA5: + res4_r(L); + break; + case 0xA6: + resn_mem_hl(4); + break; + case 0xA7: + res4_r(A); + break; + case 0xA8: + res5_r(B); + break; + case 0xA9: + res5_r(C); + break; + case 0xAA: + res5_r(D); + break; + case 0xAB: + res5_r(E); + break; + case 0xAC: + res5_r(H); + break; + case 0xAD: + res5_r(L); + break; + case 0xAE: + resn_mem_hl(5); + break; + case 0xAF: + res5_r(A); + break; + case 0xB0: + res6_r(B); + break; + case 0xB1: + res6_r(C); + break; + case 0xB2: + res6_r(D); + break; + case 0xB3: + res6_r(E); + break; + case 0xB4: + res6_r(H); + break; + case 0xB5: + res6_r(L); + break; + case 0xB6: + resn_mem_hl(6); + break; + case 0xB7: + res6_r(A); + break; + case 0xB8: + res7_r(B); + break; + case 0xB9: + res7_r(C); + break; + case 0xBA: + res7_r(D); + break; + case 0xBB: + res7_r(E); + break; + case 0xBC: + res7_r(H); + break; + case 0xBD: + res7_r(L); + break; + case 0xBE: + resn_mem_hl(7); + break; + case 0xBF: + res7_r(A); + break; + case 0xC0: + set0_r(B); + break; + case 0xC1: + set0_r(C); + break; + case 0xC2: + set0_r(D); + break; + case 0xC3: + set0_r(E); + break; + case 0xC4: + set0_r(H); + break; + case 0xC5: + set0_r(L); + break; + case 0xC6: + setn_mem_hl(0); + break; + case 0xC7: + set0_r(A); + break; + case 0xC8: + set1_r(B); + break; + case 0xC9: + set1_r(C); + break; + case 0xCA: + set1_r(D); + break; + case 0xCB: + set1_r(E); + break; + case 0xCC: + set1_r(H); + break; + case 0xCD: + set1_r(L); + break; + case 0xCE: + setn_mem_hl(1); + break; + case 0xCF: + set1_r(A); + break; + case 0xD0: + set2_r(B); + break; + case 0xD1: + set2_r(C); + break; + case 0xD2: + set2_r(D); + break; + case 0xD3: + set2_r(E); + break; + case 0xD4: + set2_r(H); + break; + case 0xD5: + set2_r(L); + break; + case 0xD6: + setn_mem_hl(2); + break; + case 0xD7: + set2_r(A); + break; + case 0xD8: + set3_r(B); + break; + case 0xD9: + set3_r(C); + break; + case 0xDA: + set3_r(D); + break; + case 0xDB: + set3_r(E); + break; + case 0xDC: + set3_r(H); + break; + case 0xDD: + set3_r(L); + break; + case 0xDE: + setn_mem_hl(3); + break; + case 0xDF: + set3_r(A); + break; + case 0xE0: + set4_r(B); + break; + case 0xE1: + set4_r(C); + break; + case 0xE2: + set4_r(D); + break; + case 0xE3: + set4_r(E); + break; + case 0xE4: + set4_r(H); + break; + case 0xE5: + set4_r(L); + break; + case 0xE6: + setn_mem_hl(4); + break; + case 0xE7: + set4_r(A); + break; + case 0xE8: + set5_r(B); + break; + case 0xE9: + set5_r(C); + break; + case 0xEA: + set5_r(D); + break; + case 0xEB: + set5_r(E); + break; + case 0xEC: + set5_r(H); + break; + case 0xED: + set5_r(L); + break; + case 0xEE: + setn_mem_hl(5); + break; + case 0xEF: + set5_r(A); + break; + case 0xF0: + set6_r(B); + break; + case 0xF1: + set6_r(C); + break; + case 0xF2: + set6_r(D); + break; + case 0xF3: + set6_r(E); + break; + case 0xF4: + set6_r(H); + break; + case 0xF5: + set6_r(L); + break; + case 0xF6: + setn_mem_hl(6); + break; + case 0xF7: + set6_r(A); + break; + case 0xF8: + set7_r(B); + break; + case 0xF9: + set7_r(C); + break; + case 0xFA: + set7_r(D); + break; + case 0xFB: + set7_r(E); + break; + case 0xFC: + set7_r(H); + break; + case 0xFD: + set7_r(L); + break; + case 0xFE: + setn_mem_hl(7); + break; + case 0xFF: + set7_r(A); + break; +// default: break; + } + break; + + + //call z,nn (24;12 cycles): + //Push address of next instruction onto stack and then jump to address stored in next two bytes in memory, if ZF is set: + case 0xCC: + if (ZF & 0xFF) { + PC_MOD((PC + 2) & 0xFFFF); + cycleCounter += 4; + } else { + call_nn(); + } + break; + + case 0xCD: + call_nn(); + break; + case 0xCE: + { + unsigned data; + + PC_READ(data); + + adc_a_u8(data); + } + break; + case 0xCF: + rst_n(0x08); + break; + + //ret nc (20;8 cycles): + //Pop two bytes from the stack and jump to that address, if CF is unset: + case 0xD0: + cycleCounter += 4; + + if (!(CF & 0x100)) { + ret(); + } + + break; + + case 0xD1: + pop_rr(D, E); + break; + + //jp nc,nn (16;12 cycles): + //Jump to address stored in next two bytes in memory if CF is unset: + case 0xD2: + if (CF & 0x100) { + PC_MOD((PC + 2) & 0xFFFF); + cycleCounter += 4; + } else { + jp_nn(); + } + break; + + case 0xD3: /*doesn't exist*/ + break; + + //call nc,nn (24;12 cycles): + //Push address of next instruction onto stack and then jump to address stored in next two bytes in memory, if CF is unset: + case 0xD4: + if (CF & 0x100) { + PC_MOD((PC + 2) & 0xFFFF); + cycleCounter += 4; + } else { + call_nn(); + } + break; + + case 0xD5: + push_rr(D, E); + break; + case 0xD6: + { + unsigned data; + + PC_READ(data); + + sub_a_u8(data); + } + break; + case 0xD7: + rst_n(0x10); + break; + + //ret c (20;8 cycles): + //Pop two bytes from the stack and jump to that address, if CF is set: + case 0xD8: + cycleCounter += 4; + + if (CF & 0x100) { + ret(); + } + + break; + + //reti (16 cycles): + //Pop two bytes from the stack and jump to that address, then enable interrupts: + case 0xD9: + { + unsigned l, h; + + pop_rr(h, l); + + memory.ei(cycleCounter); + + PC_MOD(h << 8 | l); + } + break; + + //jp c,nn (16;12 cycles): + //Jump to address stored in next two bytes in memory if CF is set: + case 0xDA: //PC=( ((PC+2)*(1-CarryFlag())) + (((memory.read(PC+1)<<8)+memory.read(PC))*CarryFlag()) ); Cycles(12); break; + if (CF & 0x100) { + jp_nn(); + } else { + PC_MOD((PC + 2) & 0xFFFF); + cycleCounter += 4; + } + break; + + case 0xDB: /*doesn't exist*/ + break; + + //call z,nn (24;12 cycles): + //Push address of next instruction onto stack and then jump to address stored in next two bytes in memory, if CF is set: + case 0xDC: + if (CF & 0x100) { + call_nn(); + } else { + PC_MOD((PC + 2) & 0xFFFF); + cycleCounter += 4; + } + break; + + case 0xDE: + { + unsigned data; + + PC_READ(data); + + sbc_a_u8(data); + } + break; + case 0xDF: + rst_n(0x18); + break; + + //ld ($FF00+n),a (12 cycles): + //Put value in A into address (0xFF00 + next byte in memory): + case 0xE0: + { + unsigned tmp; + + PC_READ(tmp); + + FF_WRITE(0xFF00 | tmp, A); + } + break; + + case 0xE1: + pop_rr(H, L); + break; + + //ld ($FF00+C),a (8 ycles): + //Put A into address (0xFF00 + register C): + case 0xE2: + FF_WRITE(0xFF00 | C, A); + break; + case 0xE3: /*doesn't exist*/ + break; + case 0xE4: /*doesn't exist*/ + break; + case 0xE5: + push_rr(H, L); + break; + case 0xE6: + { + unsigned data; + + PC_READ(data); + + and_a_u8(data); + } + break; + case 0xE7: + rst_n(0x20); + break; + + //add sp,n (16 cycles): + //Add next (signed) byte in memory to SP, reset ZF and SF, check HCF and CF: + case 0xE8: + /*{ + int8_t tmp = int8_t(memory.pc_read(PC++, cycleCounter)); + HF2 = (((SP & 0xFFF) + tmp) >> 3) & 0x200; + CF = SP + tmp; + SP = CF; + CF >>= 8; + ZF = 1; + cycleCounter += 12; + }*/ + sp_plus_n(SP); + cycleCounter += 4; + break; + + //jp hl (4 cycles): + //Jump to address in hl: + case 0xE9: + PC = HL(); + break; + + //ld (nn),a (16 cycles): + //set memory at address given by the next 2 bytes to value in A: + //Incrementing PC before call, because of possible interrupt. + case 0xEA: + { + unsigned l, h; + + PC_READ(l); + PC_READ(h); + + WRITE(h << 8 | l, A); + } + break; + + case 0xEB: /*doesn't exist*/ + break; + case 0xEC: /*doesn't exist*/ + break; + case 0xED: /*doesn't exist*/ + break; + case 0xEE: + { + unsigned data; + + PC_READ(data); + + xor_a_u8(data); + } + break; + case 0xEF: + rst_n(0x28); + break; + + //ld a,($FF00+n) (12 cycles): + //Put value at address (0xFF00 + next byte in memory) into A: + case 0xF0: + { + unsigned tmp; + + PC_READ(tmp); + + FF_READ(A, 0xFF00 | tmp); + } + break; + + case 0xF1: /*pop_rr(A, F); Cycles(12); break;*/ + { + unsigned F; + + pop_rr(A, F); + + FROM_F(F); + } + break; + + //ld a,($FF00+C) (8 cycles): + //Put value at address (0xFF00 + register C) into A: + case 0xF2: + FF_READ(A, 0xFF00 | C); + break; + + //di (4 cycles): + case 0xF3: + memory.di(); + break; + + case 0xF4: /*doesn't exist*/ + break; + case 0xF5: /*push_rr(A, F); Cycles(16); break;*/ + calcHF(HF1, HF2); + + { + unsigned F = F(); + + push_rr(A, F); + } + break; + + case 0xF6: + { + unsigned data; + + PC_READ(data); + + or_a_u8(data); + } + break; + case 0xF7: + rst_n(0x30); + break; + + //ldhl sp,n (12 cycles): + //Put (sp+next (signed) byte in memory) into hl (unsets ZF and SF, may enable HF and CF): + case 0xF8: + /*{ + int8_t tmp = int8_t(memory.pc_read(PC++, cycleCounter)); + HF2 = (((SP & 0xFFF) + tmp) >> 3) & 0x200; + CF = SP + tmp; + L = CF; + CF >>= 8; + H = CF; + ZF = 1; + cycleCounter += 8; + }*/ + { + unsigned sum; + sp_plus_n(sum); + L = sum & 0xFF; + H = sum >> 8; + } + break; + + //ld sp,hl (8 cycles): + //Put value in HL into SP + case 0xF9: + SP = HL(); + cycleCounter += 4; + break; + + //ld a,(nn) (16 cycles): + //set A to value in memory at address given by the 2 next bytes. + case 0xFA: + { + unsigned l, h; + + PC_READ(l); + PC_READ(h); + + READ(A, h << 8 | l); + } + break; + + //ei (4 cycles): + //Enable Interrupts after next instruction: + case 0xFB: + memory.ei(cycleCounter); + break; + + case 0xFC: /*doesn't exist*/ + break; + case 0xFD: /*doesn't exist*/ + break; + case 0xFE: + { + unsigned data; + + PC_READ(data); + + cp_a_u8(data); + } + break; + case 0xFF: + rst_n(0x38); + break; +// default: break; + } + } + + PC_ = PC; + cycleCounter = memory.event(cycleCounter); + } + + A_ = A; + cycleCounter_ = cycleCounter; +} diff --git a/supergameboy/libgambatte/src/cpu.h b/supergameboy/libgambatte/src/cpu.h new file mode 100644 index 00000000..300ba5fb --- /dev/null +++ b/supergameboy/libgambatte/src/cpu.h @@ -0,0 +1,115 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef CPU_H +#define CPU_H + +class SaveState; + +#include "int.h" +#include "memory.h" + +class CPU { + Memory memory; + + unsigned long cycleCounter_; + + unsigned short PC_; + unsigned short SP; + + unsigned HF1, HF2, ZF, CF; + + unsigned char A_, B, C, D, E, /*F,*/ H, L; + + bool skip; + bool halted; + + void process(unsigned long cycles); + +public: + + CPU(); +// void halt(); + +// unsigned interrupt(unsigned address, unsigned cycleCounter); + + void updateVideo() { memory.updateVideo(cycleCounter_); } + unsigned lyCounter() { return memory.lyCounter(cycleCounter_); } + void setAccumulator(unsigned char value) { A_ = value; } + + void runFor(unsigned long cycles); + void setStatePtrs(SaveState &state); + void saveState(SaveState &state); + void loadState(const SaveState &state); + + void loadSavedata() { memory.loadSavedata(); } + void saveSavedata() { memory.saveSavedata(); } + + void setVideoBlitter(Gambatte::VideoBlitter *vb) { + memory.setVideoBlitter(vb); + } + + void videoBufferChange() { + memory.videoBufferChange(); + } + + unsigned int videoWidth() const { + return memory.videoWidth(); + } + + unsigned int videoHeight() const { + return memory.videoHeight(); + } + + void setVideoFilter(const unsigned int n) { + memory.setVideoFilter(n); + } + + std::vector filterInfo() const { + return memory.filterInfo(); + } + + void setInputStateGetter(Gambatte::InputStateGetter *getInput) { + memory.setInputStateGetter(getInput); + } + + void set_savedir(const char *sdir) { + memory.set_savedir(sdir); + } + + const std::string saveBasePath() const { + return memory.saveBasePath(); + } + + void setOsdElement(std::auto_ptr osdElement) { + memory.setOsdElement(osdElement); + } + + bool load(bool forceDmg); + + void setSoundBuffer(Gambatte::uint_least32_t *const buf) { memory.setSoundBuffer(buf); } + unsigned fillSoundBuffer() { return memory.fillSoundBuffer(cycleCounter_); } + + bool isCgb() const { return memory.isCgb(); } + + void setDmgPaletteColor(unsigned palNum, unsigned colorNum, unsigned rgb32) { + memory.setDmgPaletteColor(palNum, colorNum, rgb32); + } +}; + +#endif diff --git a/supergameboy/libgambatte/src/event_queue.h b/supergameboy/libgambatte/src/event_queue.h new file mode 100644 index 00000000..94fbebcf --- /dev/null +++ b/supergameboy/libgambatte/src/event_queue.h @@ -0,0 +1,160 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +***************************************************************************/ +#ifndef EVENT_QUEUE_H +#define EVENT_QUEUE_H + +#include + +template +class event_queue { + Comparer comparer; + T *const a; + const std::size_t capacity_; + std::size_t size_; + + + std::size_t indexOf(T e); + void internalDec(std::size_t i, T e); + template void internalInc(std::size_t i, T e); + +public: + event_queue(std::size_t capacity, const Comparer &comparer); + ~event_queue(); + + std::size_t capacity() const { + return capacity_; + } + + void clear() { + size_ = 0; + } + + void dec(const T oldE, const T newE) { + internalDec(indexOf(oldE), newE); + } + + bool empty() const { + return size_ == 0; + } + + void inc(const T oldE, const T newE) { + internalInc(indexOf(oldE), newE); + } + + void modify_root(const T newRoot) { + internalInc(0, newRoot); + } + + void pop() { + internalInc(0, a[--size_]); + } + + void push(const T e) { + internalDec(size_++, e); + } + + void remove(T e); + + std::size_t size() const { + return size_; + } + + T top() const { + return a[0]; + } +}; + +template +event_queue::event_queue(const std::size_t capacity, const Comparer &comparer_in) : + comparer(comparer_in), + a(new T[capacity]), + capacity_(capacity), + size_(0) +{} + +template +event_queue::~event_queue() { + delete[] a; +} + +template +std::size_t event_queue::indexOf(const T e) { + std::size_t i = 0; + + while (a[i] != e) + ++i; + + return i; +} + +template +void event_queue::internalDec(std::size_t i, const T e) { + a[i] = e; + + while (i != 0) { + const std::size_t parentI = (i - 1) >> 1; + + if (!comparer.less(e, a[parentI])) + break; + + a[i] = a[parentI]; + a[parentI] = e; + i = parentI; + } +} + +template +template +void event_queue::internalInc(std::size_t i, const T e) { + a[i] = e; + + for (;;) { + std::size_t childI = i * 2 + 1; + + if (childI >= size_) + break; + + if ((!child2BoundsCheck || childI + 1 < size_) && comparer.less(a[childI + 1], a[childI])) + ++childI; + + if (!comparer.less(a[childI], e)) + break; + + a[i] = a[childI]; + a[childI] = e; + i = childI; + } +} + +template +void event_queue::remove(const T e) { + std::size_t i = indexOf(e); + + while (i != 0) { + const std::size_t parentI = (i - 1) >> 1; + + a[i] = a[parentI]; + a[parentI] = e; + i = parentI; + } + + pop(); +} + +#endif diff --git a/supergameboy/libgambatte/src/file/file.cpp b/supergameboy/libgambatte/src/file/file.cpp new file mode 100644 index 00000000..7a8f9966 --- /dev/null +++ b/supergameboy/libgambatte/src/file/file.cpp @@ -0,0 +1,73 @@ +/*************************************************************************** +Copyright (C) 2007 by Nach +http://nsrt.edgeemu.com + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License version 2 as +published by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License version 2 for more details. + +You should have received a copy of the GNU General Public License +version 2 along with this program; if not, write to the +Free Software Foundation, Inc., +59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +***************************************************************************/ + +#include "file.h" + +using namespace std; + +static const unsigned int MAX_FILE_NAME = 512; + +File::File(const char *filename) : stream(filename, ios::in | ios::binary), is_zip(false), fsize(0), count(0) +{ + if (stream) + { + stream.seekg(0, ios::end); + fsize = stream.tellg(); + stream.seekg(0, ios::beg); + } +} + +File::~File() +{ + close(); +} + +void File::rewind() +{ + if (is_open()) + { + stream.seekg(0, ios::beg); + } +} + +bool File::is_open() +{ + return(stream.is_open()); +} + +void File::close() +{ + if (is_open()) + { + stream.close(); + } +} + +void File::read(char *buffer, size_t amount) +{ + if (is_open()) + { + stream.read(buffer, amount); + count = stream.gcount(); + } + else + { + count = 0; + } +} diff --git a/supergameboy/libgambatte/src/file/file.h b/supergameboy/libgambatte/src/file/file.h new file mode 100644 index 00000000..3435ef16 --- /dev/null +++ b/supergameboy/libgambatte/src/file/file.h @@ -0,0 +1,42 @@ +/*************************************************************************** +Copyright (C) 2007 by Nach +http://nsrt.edgeemu.com + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License version 2 as +published by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License version 2 for more details. + +You should have received a copy of the GNU General Public License +version 2 along with this program; if not, write to the +Free Software Foundation, Inc., +59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +***************************************************************************/ + +#include + +class File { + private: + std::ifstream stream; + bool is_zip; //Change this to an enum later + std::size_t fsize, count; + void *zipfile; + bool zip_sub_open; + + void zip(const char *filename); + + public: + File(const char *filename); + ~File(); + void rewind(); + bool is_open(); + void close(); + std::size_t size() const { return fsize; }; + void read(char *buffer, std::size_t amount); + std::size_t gcount() const { return count; } + bool fail() const { return stream.fail(); } +}; diff --git a/supergameboy/libgambatte/src/file/file_zip.cpp b/supergameboy/libgambatte/src/file/file_zip.cpp new file mode 100644 index 00000000..c7fae6db --- /dev/null +++ b/supergameboy/libgambatte/src/file/file_zip.cpp @@ -0,0 +1,167 @@ +/*************************************************************************** +Copyright (C) 2007 by Nach +http://nsrt.edgeemu.com + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License version 2 as +published by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License version 2 for more details. + +You should have received a copy of the GNU General Public License +version 2 along with this program; if not, write to the +Free Software Foundation, Inc., +59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +***************************************************************************/ + +#include "file.h" + +#include + +namespace zlib { +#include "unzip/unzip.h" +} + +using namespace std; +using namespace zlib; + +static const unsigned int MAX_FILE_NAME = 512; + +File::File(const char *filename) : stream(filename, ios::in | ios::binary), is_zip(false), fsize(0), count(0) +{ + if (stream) + { + char temp[4]; + stream.read(temp, sizeof(temp)); + + //check for standard zip 'magic number' + if ((temp[0] == 'P') && (temp[1] == 'K') && (temp[2] == 3) && (temp[3] == 4)) + { + stream.close(); + is_zip = true; + zip(filename); + } + else + { + stream.seekg(0, ios::end); + fsize = stream.tellg(); + stream.seekg(0, ios::beg); + } + } +} + +void File::zip(const char *filename) +{ + zipfile = unzOpen(filename); + if (zipfile) + { + zip_sub_open = false; + + unz_file_info cFileInfo; + char ourFile[MAX_FILE_NAME] = { '\n' }; + + for (int cFile = unzGoToFirstFile((unzFile)zipfile); cFile == UNZ_OK; cFile = unzGoToNextFile((unzFile)zipfile)) + { + //Temporary char array for file name + char cFileName[MAX_FILE_NAME]; + + //Gets info on current file, and places it in cFileInfo + unzGetCurrentFileInfo((unzFile)zipfile, &cFileInfo, cFileName, MAX_FILE_NAME, 0, 0, 0, 0); + + //Check for largest file which should be the ROM + if ((size_t)cFileInfo.uncompressed_size > fsize) + { + strcpy(ourFile, cFileName); + fsize = (size_t)cFileInfo.uncompressed_size; + } + } + + if (ourFile[0] != '\n') + { + //Sets current file to the file we liked before + unzLocateFile((unzFile)zipfile, ourFile, 1); + + if (unzOpenCurrentFile((unzFile)zipfile) == UNZ_OK) + { + zip_sub_open = true; + } + } + + if (!zip_sub_open) + { + unzClose((unzFile)zipfile); + zipfile = 0; + } + } +} + +File::~File() +{ + close(); +} + +void File::rewind() +{ + if (is_open()) + { + if (!is_zip) + { + stream.seekg(0, ios::beg); + } + else + { + unzCloseCurrentFile((unzFile)zipfile); + unzOpenCurrentFile((unzFile)zipfile); + } + } +} + +bool File::is_open() +{ + if (!is_zip) + { + return(stream.is_open()); + } + return(zipfile && zip_sub_open); +} + +void File::close() +{ + if (is_open()) + { + if (!is_zip) + { + stream.close(); + } + else + { + unzOpenCurrentFile((unzFile)zipfile); + unzClose((unzFile)zipfile); + zipfile = 0; + zip_sub_open = false; + } + } +} + +void File::read(char *buffer, size_t amount) +{ + if (is_open()) + { + if (!is_zip) + { + stream.read(buffer, amount); + count = stream.gcount(); + } + else + { + count = (size_t)unzReadCurrentFile((unzFile)zipfile, buffer, amount); + } + } + else + { + count = 0; + } +} diff --git a/supergameboy/libgambatte/src/file/unzip/crypt.h b/supergameboy/libgambatte/src/file/unzip/crypt.h new file mode 100644 index 00000000..622f4bc2 --- /dev/null +++ b/supergameboy/libgambatte/src/file/unzip/crypt.h @@ -0,0 +1,132 @@ +/* crypt.h -- base code for crypt/uncrypt ZIPfile + + + Version 1.01e, February 12th, 2005 + + Copyright (C) 1998-2005 Gilles Vollant + + This code is a modified version of crypting code in Infozip distribution + + The encryption/decryption parts of this source code (as opposed to the + non-echoing password parts) were originally written in Europe. The + whole source package can be freely distributed, including from the USA. + (Prior to January 2000, re-export from the US was a violation of US law.) + + This encryption code is a direct transcription of the algorithm from + Roger Schlafly, described by Phil Katz in the file appnote.txt. This + file (appnote.txt) is distributed with the PKZIP program (even in the + version without encryption capabilities). + + If you don't need crypting in your application, just define symbols + NOCRYPT and NOUNCRYPT. + + This code support the "Traditional PKWARE Encryption". + + The new AES encryption added on Zip format by Winzip (see the page + http://www.winzip.com/aes_info.htm ) and PKWare PKZip 5.x Strong + Encryption is not supported. +*/ + +#define CRC32(c, b) ((*(pcrc_32_tab+(((int)(c) ^ (b)) & 0xff))) ^ ((c) >> 8)) + +/*********************************************************************** + * Return the next byte in the pseudo-random sequence + */ +static int decrypt_byte(unsigned long* pkeys, const unsigned long* pcrc_32_tab) +{ + unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an + * unpredictable manner on 16-bit systems; not a problem + * with any known compiler so far, though */ + + temp = ((unsigned)(*(pkeys+2)) & 0xffff) | 2; + return (int)(((temp * (temp ^ 1)) >> 8) & 0xff); +} + +/*********************************************************************** + * Update the encryption keys with the next byte of plain text + */ +static int update_keys(unsigned long* pkeys,const unsigned long* pcrc_32_tab,int c) +{ + (*(pkeys+0)) = CRC32((*(pkeys+0)), c); + (*(pkeys+1)) += (*(pkeys+0)) & 0xff; + (*(pkeys+1)) = (*(pkeys+1)) * 134775813L + 1; + { + register int keyshift = (int)((*(pkeys+1)) >> 24); + (*(pkeys+2)) = CRC32((*(pkeys+2)), keyshift); + } + return c; +} + + +/*********************************************************************** + * Initialize the encryption keys and the random header according to + * the given password. + */ +static void init_keys(const char* passwd,unsigned long* pkeys,const unsigned long* pcrc_32_tab) +{ + *(pkeys+0) = 305419896L; + *(pkeys+1) = 591751049L; + *(pkeys+2) = 878082192L; + while (*passwd != '\0') { + update_keys(pkeys,pcrc_32_tab,(int)*passwd); + passwd++; + } +} + +#define zdecode(pkeys,pcrc_32_tab,c) \ + (update_keys(pkeys,pcrc_32_tab,c ^= decrypt_byte(pkeys,pcrc_32_tab))) + +#define zencode(pkeys,pcrc_32_tab,c,t) \ + (t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), t^(c)) + +#ifdef INCLUDECRYPTINGCODE_IFCRYPTALLOWED + +#define RAND_HEAD_LEN 12 + /* "last resort" source for second part of crypt seed pattern */ +# ifndef ZCR_SEED2 +# define ZCR_SEED2 3141592654UL /* use PI as default pattern */ +# endif + +static int crypthead(passwd, buf, bufSize, pkeys, pcrc_32_tab, crcForCrypting) + const char *passwd; /* password string */ + unsigned char *buf; /* where to write header */ + int bufSize; + unsigned long* pkeys; + const unsigned long* pcrc_32_tab; + unsigned long crcForCrypting; +{ + int n; /* index in random header */ + int t; /* temporary */ + int c; /* random byte */ + unsigned char header[RAND_HEAD_LEN-2]; /* random header */ + static unsigned calls = 0; /* ensure different random header each time */ + + if (bufSize> 7) & 0xff; + header[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, c, t); + } + /* Encrypt random header (last two bytes is high word of crc) */ + init_keys(passwd, pkeys, pcrc_32_tab); + for (n = 0; n < RAND_HEAD_LEN-2; n++) + { + buf[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, header[n], t); + } + buf[n++] = zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 16) & 0xff, t); + buf[n++] = zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 24) & 0xff, t); + return n; +} + +#endif diff --git a/supergameboy/libgambatte/src/file/unzip/ioapi.c b/supergameboy/libgambatte/src/file/unzip/ioapi.c new file mode 100644 index 00000000..05b5ef15 --- /dev/null +++ b/supergameboy/libgambatte/src/file/unzip/ioapi.c @@ -0,0 +1,177 @@ +/* ioapi.c -- IO base function header for compress/uncompress .zip + files using zlib + zip or unzip API + + Version 1.01e, February 12th, 2005 + + Copyright (C) 1998-2005 Gilles Vollant +*/ + +#include +#include +#include + +#include +#include "ioapi.h" + + + +/* I've found an old Unix (a SunOS 4.1.3_U1) without all SEEK_* defined.... */ + +#ifndef SEEK_CUR +#define SEEK_CUR 1 +#endif + +#ifndef SEEK_END +#define SEEK_END 2 +#endif + +#ifndef SEEK_SET +#define SEEK_SET 0 +#endif + +voidpf ZCALLBACK fopen_file_func OF(( + voidpf opaque, + const char* filename, + int mode)); + +uLong ZCALLBACK fread_file_func OF(( + voidpf opaque, + voidpf stream, + void* buf, + uLong size)); + +uLong ZCALLBACK fwrite_file_func OF(( + voidpf opaque, + voidpf stream, + const void* buf, + uLong size)); + +long ZCALLBACK ftell_file_func OF(( + voidpf opaque, + voidpf stream)); + +long ZCALLBACK fseek_file_func OF(( + voidpf opaque, + voidpf stream, + uLong offset, + int origin)); + +int ZCALLBACK fclose_file_func OF(( + voidpf opaque, + voidpf stream)); + +int ZCALLBACK ferror_file_func OF(( + voidpf opaque, + voidpf stream)); + + +voidpf ZCALLBACK fopen_file_func (opaque, filename, mode) + voidpf opaque; + const char* filename; + int mode; +{ + FILE* file = NULL; + const char* mode_fopen = NULL; + if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) + mode_fopen = "rb"; + else + if (mode & ZLIB_FILEFUNC_MODE_EXISTING) + mode_fopen = "r+b"; + else + if (mode & ZLIB_FILEFUNC_MODE_CREATE) + mode_fopen = "wb"; + + if ((filename!=NULL) && (mode_fopen != NULL)) + file = fopen(filename, mode_fopen); + return file; +} + + +uLong ZCALLBACK fread_file_func (opaque, stream, buf, size) + voidpf opaque; + voidpf stream; + void* buf; + uLong size; +{ + uLong ret; + ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream); + return ret; +} + + +uLong ZCALLBACK fwrite_file_func (opaque, stream, buf, size) + voidpf opaque; + voidpf stream; + const void* buf; + uLong size; +{ + uLong ret; + ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream); + return ret; +} + +long ZCALLBACK ftell_file_func (opaque, stream) + voidpf opaque; + voidpf stream; +{ + long ret; + ret = ftell((FILE *)stream); + return ret; +} + +long ZCALLBACK fseek_file_func (opaque, stream, offset, origin) + voidpf opaque; + voidpf stream; + uLong offset; + int origin; +{ + int fseek_origin=0; + long ret; + switch (origin) + { + case ZLIB_FILEFUNC_SEEK_CUR : + fseek_origin = SEEK_CUR; + break; + case ZLIB_FILEFUNC_SEEK_END : + fseek_origin = SEEK_END; + break; + case ZLIB_FILEFUNC_SEEK_SET : + fseek_origin = SEEK_SET; + break; + default: return -1; + } + ret = 0; + fseek((FILE *)stream, offset, fseek_origin); + return ret; +} + +int ZCALLBACK fclose_file_func (opaque, stream) + voidpf opaque; + voidpf stream; +{ + int ret; + ret = fclose((FILE *)stream); + return ret; +} + +int ZCALLBACK ferror_file_func (opaque, stream) + voidpf opaque; + voidpf stream; +{ + int ret; + ret = ferror((FILE *)stream); + return ret; +} + +void fill_fopen_filefunc (pzlib_filefunc_def) + zlib_filefunc_def* pzlib_filefunc_def; +{ + pzlib_filefunc_def->zopen_file = fopen_file_func; + pzlib_filefunc_def->zread_file = fread_file_func; + pzlib_filefunc_def->zwrite_file = fwrite_file_func; + pzlib_filefunc_def->ztell_file = ftell_file_func; + pzlib_filefunc_def->zseek_file = fseek_file_func; + pzlib_filefunc_def->zclose_file = fclose_file_func; + pzlib_filefunc_def->zerror_file = ferror_file_func; + pzlib_filefunc_def->opaque = NULL; +} diff --git a/supergameboy/libgambatte/src/file/unzip/ioapi.h b/supergameboy/libgambatte/src/file/unzip/ioapi.h new file mode 100644 index 00000000..7d457baa --- /dev/null +++ b/supergameboy/libgambatte/src/file/unzip/ioapi.h @@ -0,0 +1,75 @@ +/* ioapi.h -- IO base function header for compress/uncompress .zip + files using zlib + zip or unzip API + + Version 1.01e, February 12th, 2005 + + Copyright (C) 1998-2005 Gilles Vollant +*/ + +#ifndef _ZLIBIOAPI_H +#define _ZLIBIOAPI_H + + +#define ZLIB_FILEFUNC_SEEK_CUR (1) +#define ZLIB_FILEFUNC_SEEK_END (2) +#define ZLIB_FILEFUNC_SEEK_SET (0) + +#define ZLIB_FILEFUNC_MODE_READ (1) +#define ZLIB_FILEFUNC_MODE_WRITE (2) +#define ZLIB_FILEFUNC_MODE_READWRITEFILTER (3) + +#define ZLIB_FILEFUNC_MODE_EXISTING (4) +#define ZLIB_FILEFUNC_MODE_CREATE (8) + + +#ifndef ZCALLBACK + +#if (defined(WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && defined (USEWINDOWS_CALLBACK) +#define ZCALLBACK CALLBACK +#else +#define ZCALLBACK +#endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef voidpf (ZCALLBACK *open_file_func) OF((voidpf opaque, const char* filename, int mode)); +typedef uLong (ZCALLBACK *read_file_func) OF((voidpf opaque, voidpf stream, void* buf, uLong size)); +typedef uLong (ZCALLBACK *write_file_func) OF((voidpf opaque, voidpf stream, const void* buf, uLong size)); +typedef long (ZCALLBACK *tell_file_func) OF((voidpf opaque, voidpf stream)); +typedef long (ZCALLBACK *seek_file_func) OF((voidpf opaque, voidpf stream, uLong offset, int origin)); +typedef int (ZCALLBACK *close_file_func) OF((voidpf opaque, voidpf stream)); +typedef int (ZCALLBACK *testerror_file_func) OF((voidpf opaque, voidpf stream)); + +typedef struct zlib_filefunc_def_s +{ + open_file_func zopen_file; + read_file_func zread_file; + write_file_func zwrite_file; + tell_file_func ztell_file; + seek_file_func zseek_file; + close_file_func zclose_file; + testerror_file_func zerror_file; + voidpf opaque; +} zlib_filefunc_def; + + + +void fill_fopen_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def)); + +#define ZREAD(filefunc,filestream,buf,size) ((*((filefunc).zread_file))((filefunc).opaque,filestream,buf,size)) +#define ZWRITE(filefunc,filestream,buf,size) ((*((filefunc).zwrite_file))((filefunc).opaque,filestream,buf,size)) +#define ZTELL(filefunc,filestream) ((*((filefunc).ztell_file))((filefunc).opaque,filestream)) +#define ZSEEK(filefunc,filestream,pos,mode) ((*((filefunc).zseek_file))((filefunc).opaque,filestream,pos,mode)) +#define ZCLOSE(filefunc,filestream) ((*((filefunc).zclose_file))((filefunc).opaque,filestream)) +#define ZERROR(filefunc,filestream) ((*((filefunc).zerror_file))((filefunc).opaque,filestream)) + + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/supergameboy/libgambatte/src/file/unzip/unzip.c b/supergameboy/libgambatte/src/file/unzip/unzip.c new file mode 100644 index 00000000..325f3d08 --- /dev/null +++ b/supergameboy/libgambatte/src/file/unzip/unzip.c @@ -0,0 +1,1605 @@ +/* unzip.c -- IO for uncompress .zip files using zlib + Version 1.01e, February 12th, 2005 + + Copyright (C) 1998-2005 Gilles Vollant + + Read unzip.h for more info +*/ + +/* Decryption code comes from crypt.c by Info-ZIP but has been greatly reduced in terms of +compatibility with older software. The following is from the original crypt.c. Code +woven in by Terry Thorsen 1/2003. +*/ +/* + Copyright (c) 1990-2000 Info-ZIP. All rights reserved. + + See the accompanying file LICENSE, version 2000-Apr-09 or later + (the contents of which are also included in zip.h) for terms of use. + If, for some reason, all these files are missing, the Info-ZIP license + also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html +*/ +/* + crypt.c (full version) by Info-ZIP. Last revised: [see crypt.h] + + The encryption/decryption parts of this source code (as opposed to the + non-echoing password parts) were originally written in Europe. The + whole source package can be freely distributed, including from the USA. + (Prior to January 2000, re-export from the US was a violation of US law.) + */ + +/* + This encryption code is a direct transcription of the algorithm from + Roger Schlafly, described by Phil Katz in the file appnote.txt. This + file (appnote.txt) is distributed with the PKZIP program (even in the + version without encryption capabilities). + */ + + +#include +#include +#include +#include +#include "unzip.h" + +#ifdef STDC +# include +# include +# include +#endif +#ifdef NO_ERRNO_H + extern int errno; +#else +# include +#endif + + +#ifndef local +# define local static +#endif +/* compile with -Dlocal if your debugger can't find static symbols */ + + +#ifndef CASESENSITIVITYDEFAULT_NO +# if !defined(unix) && !defined(CASESENSITIVITYDEFAULT_YES) +# define CASESENSITIVITYDEFAULT_NO +# endif +#endif + + +#ifndef UNZ_BUFSIZE +#define UNZ_BUFSIZE (16384) +#endif + +#ifndef UNZ_MAXFILENAMEINZIP +#define UNZ_MAXFILENAMEINZIP (256) +#endif + +#ifndef ALLOC +# define ALLOC(size) (malloc(size)) +#endif +#ifndef TRYFREE +# define TRYFREE(p) {if (p) free(p);} +#endif + +#define SIZECENTRALDIRITEM (0x2e) +#define SIZEZIPLOCALHEADER (0x1e) + + + + +const char unz_copyright[] = + " unzip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll"; + +/* unz_file_info_interntal contain internal info about a file in zipfile*/ +typedef struct unz_file_info_internal_s +{ + uLong offset_curfile;/* relative offset of local header 4 bytes */ +} unz_file_info_internal; + + +/* file_in_zip_read_info_s contain internal information about a file in zipfile, + when reading and decompress it */ +typedef struct +{ + char *read_buffer; /* internal buffer for compressed data */ + z_stream stream; /* zLib stream structure for inflate */ + + uLong pos_in_zipfile; /* position in byte on the zipfile, for fseek*/ + uLong stream_initialised; /* flag set if stream structure is initialised*/ + + uLong offset_local_extrafield;/* offset of the local extra field */ + uInt size_local_extrafield;/* size of the local extra field */ + uLong pos_local_extrafield; /* position in the local extra field in read*/ + + uLong crc32; /* crc32 of all data uncompressed */ + uLong crc32_wait; /* crc32 we must obtain after decompress all */ + uLong rest_read_compressed; /* number of byte to be decompressed */ + uLong rest_read_uncompressed;/*number of byte to be obtained after decomp*/ + zlib_filefunc_def z_filefunc; + voidpf filestream; /* io structore of the zipfile */ + uLong compression_method; /* compression method (0==store) */ + uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ + int raw; +} file_in_zip_read_info_s; + + +/* unz_s contain internal information about the zipfile +*/ +typedef struct +{ + zlib_filefunc_def z_filefunc; + voidpf filestream; /* io structore of the zipfile */ + unz_global_info gi; /* public global information */ + uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ + uLong num_file; /* number of the current file in the zipfile*/ + uLong pos_in_central_dir; /* pos of the current file in the central dir*/ + uLong current_file_ok; /* flag about the usability of the current file*/ + uLong central_pos; /* position of the beginning of the central dir*/ + + uLong size_central_dir; /* size of the central directory */ + uLong offset_central_dir; /* offset of start of central directory with + respect to the starting disk number */ + + unz_file_info cur_file_info; /* public info about the current file in zip*/ + unz_file_info_internal cur_file_info_internal; /* private info about it*/ + file_in_zip_read_info_s* pfile_in_zip_read; /* structure about the current + file if we are decompressing it */ + int encrypted; +# ifndef NOUNCRYPT + unsigned long keys[3]; /* keys defining the pseudo-random sequence */ + const unsigned long* pcrc_32_tab; +# endif +} unz_s; + + +#ifndef NOUNCRYPT +#include "crypt.h" +#endif + +/* =========================================================================== + Read a byte from a gz_stream; update next_in and avail_in. Return EOF + for end of file. + IN assertion: the stream s has been sucessfully opened for reading. +*/ + + +local int unzlocal_getByte OF(( + const zlib_filefunc_def* pzlib_filefunc_def, + voidpf filestream, + int *pi)); + +local int unzlocal_getByte(pzlib_filefunc_def,filestream,pi) + const zlib_filefunc_def* pzlib_filefunc_def; + voidpf filestream; + int *pi; +{ + unsigned char c; + int err = (int)ZREAD(*pzlib_filefunc_def,filestream,&c,1); + if (err==1) + { + *pi = (int)c; + return UNZ_OK; + } + else + { + if (ZERROR(*pzlib_filefunc_def,filestream)) + return UNZ_ERRNO; + else + return UNZ_EOF; + } +} + + +/* =========================================================================== + Reads a long in LSB order from the given gz_stream. Sets +*/ +local int unzlocal_getShort OF(( + const zlib_filefunc_def* pzlib_filefunc_def, + voidpf filestream, + uLong *pX)); + +local int unzlocal_getShort (pzlib_filefunc_def,filestream,pX) + const zlib_filefunc_def* pzlib_filefunc_def; + voidpf filestream; + uLong *pX; +{ + uLong x ; + int i = 0; + int err; + + err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); + x = (uLong)i; + + if (err==UNZ_OK) + err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); + x += ((uLong)i)<<8; + + if (err==UNZ_OK) + *pX = x; + else + *pX = 0; + return err; +} + +local int unzlocal_getLong OF(( + const zlib_filefunc_def* pzlib_filefunc_def, + voidpf filestream, + uLong *pX)); + +local int unzlocal_getLong (pzlib_filefunc_def,filestream,pX) + const zlib_filefunc_def* pzlib_filefunc_def; + voidpf filestream; + uLong *pX; +{ + uLong x ; + int i = 0; + int err; + + err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); + x = (uLong)i; + + if (err==UNZ_OK) + err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); + x += ((uLong)i)<<8; + + if (err==UNZ_OK) + err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); + x += ((uLong)i)<<16; + + if (err==UNZ_OK) + err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); + x += ((uLong)i)<<24; + + if (err==UNZ_OK) + *pX = x; + else + *pX = 0; + return err; +} + + +/* My own strcmpi / strcasecmp */ +local int strcmpcasenosensitive_internal (fileName1,fileName2) + const char* fileName1; + const char* fileName2; +{ + for (;;) + { + char c1=*(fileName1++); + char c2=*(fileName2++); + if ((c1>='a') && (c1<='z')) + c1 -= 0x20; + if ((c2>='a') && (c2<='z')) + c2 -= 0x20; + if (c1=='\0') + return ((c2=='\0') ? 0 : -1); + if (c2=='\0') + return 1; + if (c1c2) + return 1; + } +} + + +#ifdef CASESENSITIVITYDEFAULT_NO +#define CASESENSITIVITYDEFAULTVALUE 2 +#else +#define CASESENSITIVITYDEFAULTVALUE 1 +#endif + +#ifndef STRCMPCASENOSENTIVEFUNCTION +#define STRCMPCASENOSENTIVEFUNCTION strcmpcasenosensitive_internal +#endif + +/* + Compare two filename (fileName1,fileName2). + If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp) + If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi + or strcasecmp) + If iCaseSenisivity = 0, case sensitivity is defaut of your operating system + (like 1 on Unix, 2 on Windows) + +*/ +extern int ZEXPORT unzStringFileNameCompare (fileName1,fileName2,iCaseSensitivity) + const char* fileName1; + const char* fileName2; + int iCaseSensitivity; +{ + if (iCaseSensitivity==0) + iCaseSensitivity=CASESENSITIVITYDEFAULTVALUE; + + if (iCaseSensitivity==1) + return strcmp(fileName1,fileName2); + + return STRCMPCASENOSENTIVEFUNCTION(fileName1,fileName2); +} + +#ifndef BUFREADCOMMENT +#define BUFREADCOMMENT (0x400) +#endif + +/* + Locate the Central directory of a zipfile (at the end, just before + the global comment) +*/ +local uLong unzlocal_SearchCentralDir OF(( + const zlib_filefunc_def* pzlib_filefunc_def, + voidpf filestream)); + +local uLong unzlocal_SearchCentralDir(pzlib_filefunc_def,filestream) + const zlib_filefunc_def* pzlib_filefunc_def; + voidpf filestream; +{ + unsigned char* buf; + uLong uSizeFile; + uLong uBackRead; + uLong uMaxBack=0xffff; /* maximum size of global comment */ + uLong uPosFound=0; + + if (ZSEEK(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0) + return 0; + + + uSizeFile = ZTELL(*pzlib_filefunc_def,filestream); + + if (uMaxBack>uSizeFile) + uMaxBack = uSizeFile; + + buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4); + if (buf==NULL) + return 0; + + uBackRead = 4; + while (uBackReaduMaxBack) + uBackRead = uMaxBack; + else + uBackRead+=BUFREADCOMMENT; + uReadPos = uSizeFile-uBackRead ; + + uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? + (BUFREADCOMMENT+4) : (uSizeFile-uReadPos); + if (ZSEEK(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0) + break; + + if (ZREAD(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize) + break; + + for (i=(int)uReadSize-3; (i--)>0;) + if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && + ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06)) + { + uPosFound = uReadPos+i; + break; + } + + if (uPosFound!=0) + break; + } + TRYFREE(buf); + return uPosFound; +} + +/* + Open a Zip file. path contain the full pathname (by example, + on a Windows NT computer "c:\\test\\zlib114.zip" or on an Unix computer + "zlib/zlib114.zip". + If the zipfile cannot be opened (file doesn't exist or in not valid), the + return value is NULL. + Else, the return value is a unzFile Handle, usable with other function + of this unzip package. +*/ +extern unzFile ZEXPORT unzOpen2 (path, pzlib_filefunc_def) + const char *path; + zlib_filefunc_def* pzlib_filefunc_def; +{ + unz_s us; + unz_s *s; + uLong central_pos,uL; + + uLong number_disk; /* number of the current dist, used for + spaning ZIP, unsupported, always 0*/ + uLong number_disk_with_CD; /* number the the disk with central dir, used + for spaning ZIP, unsupported, always 0*/ + uLong number_entry_CD; /* total number of entries in + the central dir + (same than number_entry on nospan) */ + + int err=UNZ_OK; + + if (unz_copyright[0]!=' ') + return NULL; + + if (pzlib_filefunc_def==NULL) + fill_fopen_filefunc(&us.z_filefunc); + else + us.z_filefunc = *pzlib_filefunc_def; + + us.filestream= (*(us.z_filefunc.zopen_file))(us.z_filefunc.opaque, + path, + ZLIB_FILEFUNC_MODE_READ | + ZLIB_FILEFUNC_MODE_EXISTING); + if (us.filestream==NULL) + return NULL; + + central_pos = unzlocal_SearchCentralDir(&us.z_filefunc,us.filestream); + if (central_pos==0) + err=UNZ_ERRNO; + + if (ZSEEK(us.z_filefunc, us.filestream, + central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0) + err=UNZ_ERRNO; + + /* the signature, already checked */ + if (unzlocal_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) + err=UNZ_ERRNO; + + /* number of this disk */ + if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK) + err=UNZ_ERRNO; + + /* number of the disk with the start of the central directory */ + if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK) + err=UNZ_ERRNO; + + /* total number of entries in the central dir on this disk */ + if (unzlocal_getShort(&us.z_filefunc, us.filestream,&us.gi.number_entry)!=UNZ_OK) + err=UNZ_ERRNO; + + /* total number of entries in the central dir */ + if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_entry_CD)!=UNZ_OK) + err=UNZ_ERRNO; + + if ((number_entry_CD!=us.gi.number_entry) || + (number_disk_with_CD!=0) || + (number_disk!=0)) + err=UNZ_BADZIPFILE; + + /* size of the central directory */ + if (unzlocal_getLong(&us.z_filefunc, us.filestream,&us.size_central_dir)!=UNZ_OK) + err=UNZ_ERRNO; + + /* offset of start of central directory with respect to the + starting disk number */ + if (unzlocal_getLong(&us.z_filefunc, us.filestream,&us.offset_central_dir)!=UNZ_OK) + err=UNZ_ERRNO; + + /* zipfile comment length */ + if (unzlocal_getShort(&us.z_filefunc, us.filestream,&us.gi.size_comment)!=UNZ_OK) + err=UNZ_ERRNO; + + if ((central_pospfile_in_zip_read!=NULL) + unzCloseCurrentFile(file); + + ZCLOSE(s->z_filefunc, s->filestream); + TRYFREE(s); + return UNZ_OK; +} + + +/* + Write info about the ZipFile in the *pglobal_info structure. + No preparation of the structure is needed + return UNZ_OK if there is no problem. */ +extern int ZEXPORT unzGetGlobalInfo (file,pglobal_info) + unzFile file; + unz_global_info *pglobal_info; +{ + unz_s* s; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + *pglobal_info=s->gi; + return UNZ_OK; +} + + +/* + Translate date/time from Dos format to tm_unz (readable more easilty) +*/ +local void unzlocal_DosDateToTmuDate (ulDosDate, ptm) + uLong ulDosDate; + tm_unz* ptm; +{ + uLong uDate; + uDate = (uLong)(ulDosDate>>16); + ptm->tm_mday = (uInt)(uDate&0x1f) ; + ptm->tm_mon = (uInt)((((uDate)&0x1E0)/0x20)-1) ; + ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ; + + ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800); + ptm->tm_min = (uInt) ((ulDosDate&0x7E0)/0x20) ; + ptm->tm_sec = (uInt) (2*(ulDosDate&0x1f)) ; +} + +/* + Get Info about the current file in the zipfile, with internal only info +*/ +local int unzlocal_GetCurrentFileInfoInternal OF((unzFile file, + unz_file_info *pfile_info, + unz_file_info_internal + *pfile_info_internal, + char *szFileName, + uLong fileNameBufferSize, + void *extraField, + uLong extraFieldBufferSize, + char *szComment, + uLong commentBufferSize)); + +local int unzlocal_GetCurrentFileInfoInternal (file, + pfile_info, + pfile_info_internal, + szFileName, fileNameBufferSize, + extraField, extraFieldBufferSize, + szComment, commentBufferSize) + unzFile file; + unz_file_info *pfile_info; + unz_file_info_internal *pfile_info_internal; + char *szFileName; + uLong fileNameBufferSize; + void *extraField; + uLong extraFieldBufferSize; + char *szComment; + uLong commentBufferSize; +{ + unz_s* s; + unz_file_info file_info; + unz_file_info_internal file_info_internal; + int err=UNZ_OK; + uLong uMagic; + long lSeek=0; + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + if (ZSEEK(s->z_filefunc, s->filestream, + s->pos_in_central_dir+s->byte_before_the_zipfile, + ZLIB_FILEFUNC_SEEK_SET)!=0) + err=UNZ_ERRNO; + + + /* we check the magic */ + if (err==UNZ_OK) + { + if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK) + err=UNZ_ERRNO; + else if (uMagic!=0x02014b50) + err=UNZ_BADZIPFILE; + } + + if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.version) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.version_needed) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.flag) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.compression_method) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.dosDate) != UNZ_OK) + err=UNZ_ERRNO; + + unzlocal_DosDateToTmuDate(file_info.dosDate,&file_info.tmu_date); + + if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.crc) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.compressed_size) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.uncompressed_size) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.size_filename) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_extra) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_comment) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.disk_num_start) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.internal_fa) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.external_fa) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info_internal.offset_curfile) != UNZ_OK) + err=UNZ_ERRNO; + + lSeek+=file_info.size_filename; + if ((err==UNZ_OK) && (szFileName!=NULL)) + { + uLong uSizeRead ; + if (file_info.size_filename0) && (fileNameBufferSize>0)) + if (ZREAD(s->z_filefunc, s->filestream,szFileName,uSizeRead)!=uSizeRead) + err=UNZ_ERRNO; + lSeek -= uSizeRead; + } + + + if ((err==UNZ_OK) && (extraField!=NULL)) + { + uLong uSizeRead ; + if (file_info.size_file_extraz_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) + lSeek=0; + else + err=UNZ_ERRNO; + } + if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0)) + if (ZREAD(s->z_filefunc, s->filestream,extraField,uSizeRead)!=uSizeRead) + err=UNZ_ERRNO; + lSeek += file_info.size_file_extra - uSizeRead; + } + else + lSeek+=file_info.size_file_extra; + + + if ((err==UNZ_OK) && (szComment!=NULL)) + { + uLong uSizeRead ; + if (file_info.size_file_commentz_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) + lSeek=0; + else + err=UNZ_ERRNO; + } + if ((file_info.size_file_comment>0) && (commentBufferSize>0)) + if (ZREAD(s->z_filefunc, s->filestream,szComment,uSizeRead)!=uSizeRead) + err=UNZ_ERRNO; + lSeek+=file_info.size_file_comment - uSizeRead; + } + else + lSeek+=file_info.size_file_comment; + + if ((err==UNZ_OK) && (pfile_info!=NULL)) + *pfile_info=file_info; + + if ((err==UNZ_OK) && (pfile_info_internal!=NULL)) + *pfile_info_internal=file_info_internal; + + return err; +} + + + +/* + Write info about the ZipFile in the *pglobal_info structure. + No preparation of the structure is needed + return UNZ_OK if there is no problem. +*/ +extern int ZEXPORT unzGetCurrentFileInfo (file, + pfile_info, + szFileName, fileNameBufferSize, + extraField, extraFieldBufferSize, + szComment, commentBufferSize) + unzFile file; + unz_file_info *pfile_info; + char *szFileName; + uLong fileNameBufferSize; + void *extraField; + uLong extraFieldBufferSize; + char *szComment; + uLong commentBufferSize; +{ + return unzlocal_GetCurrentFileInfoInternal(file,pfile_info,NULL, + szFileName,fileNameBufferSize, + extraField,extraFieldBufferSize, + szComment,commentBufferSize); +} + +/* + Set the current file of the zipfile to the first file. + return UNZ_OK if there is no problem +*/ +extern int ZEXPORT unzGoToFirstFile (file) + unzFile file; +{ + int err=UNZ_OK; + unz_s* s; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + s->pos_in_central_dir=s->offset_central_dir; + s->num_file=0; + err=unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, + &s->cur_file_info_internal, + NULL,0,NULL,0,NULL,0); + s->current_file_ok = (err == UNZ_OK); + return err; +} + +/* + Set the current file of the zipfile to the next file. + return UNZ_OK if there is no problem + return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. +*/ +extern int ZEXPORT unzGoToNextFile (file) + unzFile file; +{ + unz_s* s; + int err; + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + if (!s->current_file_ok) + return UNZ_END_OF_LIST_OF_FILE; + if (s->gi.number_entry != 0xffff) /* 2^16 files overflow hack */ + if (s->num_file+1==s->gi.number_entry) + return UNZ_END_OF_LIST_OF_FILE; + + s->pos_in_central_dir += SIZECENTRALDIRITEM + s->cur_file_info.size_filename + + s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment ; + s->num_file++; + err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, + &s->cur_file_info_internal, + NULL,0,NULL,0,NULL,0); + s->current_file_ok = (err == UNZ_OK); + return err; +} + + +/* + Try locate the file szFileName in the zipfile. + For the iCaseSensitivity signification, see unzipStringFileNameCompare + + return value : + UNZ_OK if the file is found. It becomes the current file. + UNZ_END_OF_LIST_OF_FILE if the file is not found +*/ +extern int ZEXPORT unzLocateFile (file, szFileName, iCaseSensitivity) + unzFile file; + const char *szFileName; + int iCaseSensitivity; +{ + unz_s* s; + int err; + + /* We remember the 'current' position in the file so that we can jump + * back there if we fail. + */ + unz_file_info cur_file_infoSaved; + unz_file_info_internal cur_file_info_internalSaved; + uLong num_fileSaved; + uLong pos_in_central_dirSaved; + + + if (file==NULL) + return UNZ_PARAMERROR; + + if (strlen(szFileName)>=UNZ_MAXFILENAMEINZIP) + return UNZ_PARAMERROR; + + s=(unz_s*)file; + if (!s->current_file_ok) + return UNZ_END_OF_LIST_OF_FILE; + + /* Save the current state */ + num_fileSaved = s->num_file; + pos_in_central_dirSaved = s->pos_in_central_dir; + cur_file_infoSaved = s->cur_file_info; + cur_file_info_internalSaved = s->cur_file_info_internal; + + err = unzGoToFirstFile(file); + + while (err == UNZ_OK) + { + char szCurrentFileName[UNZ_MAXFILENAMEINZIP+1]; + err = unzGetCurrentFileInfo(file,NULL, + szCurrentFileName,sizeof(szCurrentFileName)-1, + NULL,0,NULL,0); + if (err == UNZ_OK) + { + if (unzStringFileNameCompare(szCurrentFileName, + szFileName,iCaseSensitivity)==0) + return UNZ_OK; + err = unzGoToNextFile(file); + } + } + + /* We failed, so restore the state of the 'current file' to where we + * were. + */ + s->num_file = num_fileSaved ; + s->pos_in_central_dir = pos_in_central_dirSaved ; + s->cur_file_info = cur_file_infoSaved; + s->cur_file_info_internal = cur_file_info_internalSaved; + return err; +} + + +/* +/////////////////////////////////////////// +// Contributed by Ryan Haksi (mailto://cryogen@infoserve.net) +// I need random access +// +// Further optimization could be realized by adding an ability +// to cache the directory in memory. The goal being a single +// comprehensive file read to put the file I need in a memory. +*/ + +/* +typedef struct unz_file_pos_s +{ + uLong pos_in_zip_directory; // offset in file + uLong num_of_file; // # of file +} unz_file_pos; +*/ + +extern int ZEXPORT unzGetFilePos(file, file_pos) + unzFile file; + unz_file_pos* file_pos; +{ + unz_s* s; + + if (file==NULL || file_pos==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + if (!s->current_file_ok) + return UNZ_END_OF_LIST_OF_FILE; + + file_pos->pos_in_zip_directory = s->pos_in_central_dir; + file_pos->num_of_file = s->num_file; + + return UNZ_OK; +} + +extern int ZEXPORT unzGoToFilePos(file, file_pos) + unzFile file; + unz_file_pos* file_pos; +{ + unz_s* s; + int err; + + if (file==NULL || file_pos==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + + /* jump to the right spot */ + s->pos_in_central_dir = file_pos->pos_in_zip_directory; + s->num_file = file_pos->num_of_file; + + /* set the current file */ + err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, + &s->cur_file_info_internal, + NULL,0,NULL,0,NULL,0); + /* return results */ + s->current_file_ok = (err == UNZ_OK); + return err; +} + +/* +// Unzip Helper Functions - should be here? +/////////////////////////////////////////// +*/ + +/* + Read the local header of the current zipfile + Check the coherency of the local header and info in the end of central + directory about this file + store in *piSizeVar the size of extra info in local header + (filename and size of extra field data) +*/ +local int unzlocal_CheckCurrentFileCoherencyHeader (s,piSizeVar, + poffset_local_extrafield, + psize_local_extrafield) + unz_s* s; + uInt* piSizeVar; + uLong *poffset_local_extrafield; + uInt *psize_local_extrafield; +{ + uLong uMagic,uData,uFlags; + uLong size_filename; + uLong size_extra_field; + int err=UNZ_OK; + + *piSizeVar = 0; + *poffset_local_extrafield = 0; + *psize_local_extrafield = 0; + + if (ZSEEK(s->z_filefunc, s->filestream,s->cur_file_info_internal.offset_curfile + + s->byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET)!=0) + return UNZ_ERRNO; + + + if (err==UNZ_OK) + { + if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK) + err=UNZ_ERRNO; + else if (uMagic!=0x04034b50) + err=UNZ_BADZIPFILE; + } + + if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) + err=UNZ_ERRNO; +/* + else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion)) + err=UNZ_BADZIPFILE; +*/ + if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uFlags) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) + err=UNZ_ERRNO; + else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compression_method)) + err=UNZ_BADZIPFILE; + + if ((err==UNZ_OK) && (s->cur_file_info.compression_method!=0) && + (s->cur_file_info.compression_method!=Z_DEFLATED)) + err=UNZ_BADZIPFILE; + + if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* date/time */ + err=UNZ_ERRNO; + + if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* crc */ + err=UNZ_ERRNO; + else if ((err==UNZ_OK) && (uData!=s->cur_file_info.crc) && + ((uFlags & 8)==0)) + err=UNZ_BADZIPFILE; + + if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size compr */ + err=UNZ_ERRNO; + else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compressed_size) && + ((uFlags & 8)==0)) + err=UNZ_BADZIPFILE; + + if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size uncompr */ + err=UNZ_ERRNO; + else if ((err==UNZ_OK) && (uData!=s->cur_file_info.uncompressed_size) && + ((uFlags & 8)==0)) + err=UNZ_BADZIPFILE; + + + if (unzlocal_getShort(&s->z_filefunc, s->filestream,&size_filename) != UNZ_OK) + err=UNZ_ERRNO; + else if ((err==UNZ_OK) && (size_filename!=s->cur_file_info.size_filename)) + err=UNZ_BADZIPFILE; + + *piSizeVar += (uInt)size_filename; + + if (unzlocal_getShort(&s->z_filefunc, s->filestream,&size_extra_field) != UNZ_OK) + err=UNZ_ERRNO; + *poffset_local_extrafield= s->cur_file_info_internal.offset_curfile + + SIZEZIPLOCALHEADER + size_filename; + *psize_local_extrafield = (uInt)size_extra_field; + + *piSizeVar += (uInt)size_extra_field; + + return err; +} + +/* + Open for reading data the current file in the zipfile. + If there is no error and the file is opened, the return value is UNZ_OK. +*/ +extern int ZEXPORT unzOpenCurrentFile3 (file, method, level, raw, password) + unzFile file; + int* method; + int* level; + int raw; + const char* password; +{ + int err=UNZ_OK; + uInt iSizeVar; + unz_s* s; + file_in_zip_read_info_s* pfile_in_zip_read_info; + uLong offset_local_extrafield; /* offset of the local extra field */ + uInt size_local_extrafield; /* size of the local extra field */ +# ifndef NOUNCRYPT + char source[12]; +# else + if (password != NULL) + return UNZ_PARAMERROR; +# endif + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + if (!s->current_file_ok) + return UNZ_PARAMERROR; + + if (s->pfile_in_zip_read != NULL) + unzCloseCurrentFile(file); + + if (unzlocal_CheckCurrentFileCoherencyHeader(s,&iSizeVar, + &offset_local_extrafield,&size_local_extrafield)!=UNZ_OK) + return UNZ_BADZIPFILE; + + pfile_in_zip_read_info = (file_in_zip_read_info_s*) + ALLOC(sizeof(file_in_zip_read_info_s)); + if (pfile_in_zip_read_info==NULL) + return UNZ_INTERNALERROR; + + pfile_in_zip_read_info->read_buffer=(char*)ALLOC(UNZ_BUFSIZE); + pfile_in_zip_read_info->offset_local_extrafield = offset_local_extrafield; + pfile_in_zip_read_info->size_local_extrafield = size_local_extrafield; + pfile_in_zip_read_info->pos_local_extrafield=0; + pfile_in_zip_read_info->raw=raw; + + if (pfile_in_zip_read_info->read_buffer==NULL) + { + TRYFREE(pfile_in_zip_read_info); + return UNZ_INTERNALERROR; + } + + pfile_in_zip_read_info->stream_initialised=0; + + if (method!=NULL) + *method = (int)s->cur_file_info.compression_method; + + if (level!=NULL) + { + *level = 6; + switch (s->cur_file_info.flag & 0x06) + { + case 6 : *level = 1; break; + case 4 : *level = 2; break; + case 2 : *level = 9; break; + } + } + + if ((s->cur_file_info.compression_method!=0) && + (s->cur_file_info.compression_method!=Z_DEFLATED)) + err=UNZ_BADZIPFILE; + + pfile_in_zip_read_info->crc32_wait=s->cur_file_info.crc; + pfile_in_zip_read_info->crc32=0; + pfile_in_zip_read_info->compression_method = + s->cur_file_info.compression_method; + pfile_in_zip_read_info->filestream=s->filestream; + pfile_in_zip_read_info->z_filefunc=s->z_filefunc; + pfile_in_zip_read_info->byte_before_the_zipfile=s->byte_before_the_zipfile; + + pfile_in_zip_read_info->stream.total_out = 0; + + if ((s->cur_file_info.compression_method==Z_DEFLATED) && + (!raw)) + { + pfile_in_zip_read_info->stream.zalloc = (alloc_func)0; + pfile_in_zip_read_info->stream.zfree = (free_func)0; + pfile_in_zip_read_info->stream.opaque = (voidpf)0; + pfile_in_zip_read_info->stream.next_in = (voidpf)0; + pfile_in_zip_read_info->stream.avail_in = 0; + + err=inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS); + if (err == Z_OK) + pfile_in_zip_read_info->stream_initialised=1; + else + { + TRYFREE(pfile_in_zip_read_info); + return err; + } + /* windowBits is passed < 0 to tell that there is no zlib header. + * Note that in this case inflate *requires* an extra "dummy" byte + * after the compressed stream in order to complete decompression and + * return Z_STREAM_END. + * In unzip, i don't wait absolutely Z_STREAM_END because I known the + * size of both compressed and uncompressed data + */ + } + pfile_in_zip_read_info->rest_read_compressed = + s->cur_file_info.compressed_size ; + pfile_in_zip_read_info->rest_read_uncompressed = + s->cur_file_info.uncompressed_size ; + + + pfile_in_zip_read_info->pos_in_zipfile = + s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER + + iSizeVar; + + pfile_in_zip_read_info->stream.avail_in = (uInt)0; + + s->pfile_in_zip_read = pfile_in_zip_read_info; + +# ifndef NOUNCRYPT + if (password != NULL) + { + int i; + s->pcrc_32_tab = get_crc_table(); + init_keys(password,s->keys,s->pcrc_32_tab); + if (ZSEEK(s->z_filefunc, s->filestream, + s->pfile_in_zip_read->pos_in_zipfile + + s->pfile_in_zip_read->byte_before_the_zipfile, + SEEK_SET)!=0) + return UNZ_INTERNALERROR; + if(ZREAD(s->z_filefunc, s->filestream,source, 12)<12) + return UNZ_INTERNALERROR; + + for (i = 0; i<12; i++) + zdecode(s->keys,s->pcrc_32_tab,source[i]); + + s->pfile_in_zip_read->pos_in_zipfile+=12; + s->encrypted=1; + } +# endif + + + return UNZ_OK; +} + +extern int ZEXPORT unzOpenCurrentFile (file) + unzFile file; +{ + return unzOpenCurrentFile3(file, NULL, NULL, 0, NULL); +} + +extern int ZEXPORT unzOpenCurrentFilePassword (file, password) + unzFile file; + const char* password; +{ + return unzOpenCurrentFile3(file, NULL, NULL, 0, password); +} + +extern int ZEXPORT unzOpenCurrentFile2 (file,method,level,raw) + unzFile file; + int* method; + int* level; + int raw; +{ + return unzOpenCurrentFile3(file, method, level, raw, NULL); +} + +/* + Read bytes from the current file. + buf contain buffer where data must be copied + len the size of buf. + + return the number of byte copied if somes bytes are copied + return 0 if the end of file was reached + return <0 with error code if there is an error + (UNZ_ERRNO for IO error, or zLib error for uncompress error) +*/ +extern int ZEXPORT unzReadCurrentFile (file, buf, len) + unzFile file; + voidp buf; + unsigned len; +{ + int err=UNZ_OK; + uInt iRead = 0; + unz_s* s; + file_in_zip_read_info_s* pfile_in_zip_read_info; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + + if ((pfile_in_zip_read_info->read_buffer == NULL)) + return UNZ_END_OF_LIST_OF_FILE; + if (len==0) + return 0; + + pfile_in_zip_read_info->stream.next_out = (Bytef*)buf; + + pfile_in_zip_read_info->stream.avail_out = (uInt)len; + + if ((len>pfile_in_zip_read_info->rest_read_uncompressed) && + (!(pfile_in_zip_read_info->raw))) + pfile_in_zip_read_info->stream.avail_out = + (uInt)pfile_in_zip_read_info->rest_read_uncompressed; + + if ((len>pfile_in_zip_read_info->rest_read_compressed+ + pfile_in_zip_read_info->stream.avail_in) && + (pfile_in_zip_read_info->raw)) + pfile_in_zip_read_info->stream.avail_out = + (uInt)pfile_in_zip_read_info->rest_read_compressed+ + pfile_in_zip_read_info->stream.avail_in; + + while (pfile_in_zip_read_info->stream.avail_out>0) + { + if ((pfile_in_zip_read_info->stream.avail_in==0) && + (pfile_in_zip_read_info->rest_read_compressed>0)) + { + uInt uReadThis = UNZ_BUFSIZE; + if (pfile_in_zip_read_info->rest_read_compressedrest_read_compressed; + if (uReadThis == 0) + return UNZ_EOF; + if (ZSEEK(pfile_in_zip_read_info->z_filefunc, + pfile_in_zip_read_info->filestream, + pfile_in_zip_read_info->pos_in_zipfile + + pfile_in_zip_read_info->byte_before_the_zipfile, + ZLIB_FILEFUNC_SEEK_SET)!=0) + return UNZ_ERRNO; + if (ZREAD(pfile_in_zip_read_info->z_filefunc, + pfile_in_zip_read_info->filestream, + pfile_in_zip_read_info->read_buffer, + uReadThis)!=uReadThis) + return UNZ_ERRNO; + + +# ifndef NOUNCRYPT + if(s->encrypted) + { + uInt i; + for(i=0;iread_buffer[i] = + zdecode(s->keys,s->pcrc_32_tab, + pfile_in_zip_read_info->read_buffer[i]); + } +# endif + + + pfile_in_zip_read_info->pos_in_zipfile += uReadThis; + + pfile_in_zip_read_info->rest_read_compressed-=uReadThis; + + pfile_in_zip_read_info->stream.next_in = + (Bytef*)pfile_in_zip_read_info->read_buffer; + pfile_in_zip_read_info->stream.avail_in = (uInt)uReadThis; + } + + if ((pfile_in_zip_read_info->compression_method==0) || (pfile_in_zip_read_info->raw)) + { + uInt uDoCopy,i ; + + if ((pfile_in_zip_read_info->stream.avail_in == 0) && + (pfile_in_zip_read_info->rest_read_compressed == 0)) + return (iRead==0) ? UNZ_EOF : iRead; + + if (pfile_in_zip_read_info->stream.avail_out < + pfile_in_zip_read_info->stream.avail_in) + uDoCopy = pfile_in_zip_read_info->stream.avail_out ; + else + uDoCopy = pfile_in_zip_read_info->stream.avail_in ; + + for (i=0;istream.next_out+i) = + *(pfile_in_zip_read_info->stream.next_in+i); + + pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32, + pfile_in_zip_read_info->stream.next_out, + uDoCopy); + pfile_in_zip_read_info->rest_read_uncompressed-=uDoCopy; + pfile_in_zip_read_info->stream.avail_in -= uDoCopy; + pfile_in_zip_read_info->stream.avail_out -= uDoCopy; + pfile_in_zip_read_info->stream.next_out += uDoCopy; + pfile_in_zip_read_info->stream.next_in += uDoCopy; + pfile_in_zip_read_info->stream.total_out += uDoCopy; + iRead += uDoCopy; + } + else + { + uLong uTotalOutBefore,uTotalOutAfter; + const Bytef *bufBefore; + uLong uOutThis; + int flush=Z_SYNC_FLUSH; + + uTotalOutBefore = pfile_in_zip_read_info->stream.total_out; + bufBefore = pfile_in_zip_read_info->stream.next_out; + + /* + if ((pfile_in_zip_read_info->rest_read_uncompressed == + pfile_in_zip_read_info->stream.avail_out) && + (pfile_in_zip_read_info->rest_read_compressed == 0)) + flush = Z_FINISH; + */ + err=inflate(&pfile_in_zip_read_info->stream,flush); + + if ((err>=0) && (pfile_in_zip_read_info->stream.msg!=NULL)) + err = Z_DATA_ERROR; + + uTotalOutAfter = pfile_in_zip_read_info->stream.total_out; + uOutThis = uTotalOutAfter-uTotalOutBefore; + + pfile_in_zip_read_info->crc32 = + crc32(pfile_in_zip_read_info->crc32,bufBefore, + (uInt)(uOutThis)); + + pfile_in_zip_read_info->rest_read_uncompressed -= + uOutThis; + + iRead += (uInt)(uTotalOutAfter - uTotalOutBefore); + + if (err==Z_STREAM_END) + return (iRead==0) ? UNZ_EOF : iRead; + if (err!=Z_OK) + break; + } + } + + if (err==Z_OK) + return iRead; + return err; +} + + +/* + Give the current position in uncompressed data +*/ +extern z_off_t ZEXPORT unztell (file) + unzFile file; +{ + unz_s* s; + file_in_zip_read_info_s* pfile_in_zip_read_info; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + return (z_off_t)pfile_in_zip_read_info->stream.total_out; +} + + +/* + return 1 if the end of file was reached, 0 elsewhere +*/ +extern int ZEXPORT unzeof (file) + unzFile file; +{ + unz_s* s; + file_in_zip_read_info_s* pfile_in_zip_read_info; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + if (pfile_in_zip_read_info->rest_read_uncompressed == 0) + return 1; + else + return 0; +} + + + +/* + Read extra field from the current file (opened by unzOpenCurrentFile) + This is the local-header version of the extra field (sometimes, there is + more info in the local-header version than in the central-header) + + if buf==NULL, it return the size of the local extra field that can be read + + if buf!=NULL, len is the size of the buffer, the extra header is copied in + buf. + the return value is the number of bytes copied in buf, or (if <0) + the error code +*/ +extern int ZEXPORT unzGetLocalExtrafield (file,buf,len) + unzFile file; + voidp buf; + unsigned len; +{ + unz_s* s; + file_in_zip_read_info_s* pfile_in_zip_read_info; + uInt read_now; + uLong size_to_read; + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + size_to_read = (pfile_in_zip_read_info->size_local_extrafield - + pfile_in_zip_read_info->pos_local_extrafield); + + if (buf==NULL) + return (int)size_to_read; + + if (len>size_to_read) + read_now = (uInt)size_to_read; + else + read_now = (uInt)len ; + + if (read_now==0) + return 0; + + if (ZSEEK(pfile_in_zip_read_info->z_filefunc, + pfile_in_zip_read_info->filestream, + pfile_in_zip_read_info->offset_local_extrafield + + pfile_in_zip_read_info->pos_local_extrafield, + ZLIB_FILEFUNC_SEEK_SET)!=0) + return UNZ_ERRNO; + + if (ZREAD(pfile_in_zip_read_info->z_filefunc, + pfile_in_zip_read_info->filestream, + buf,read_now)!=read_now) + return UNZ_ERRNO; + + return (int)read_now; +} + +/* + Close the file in zip opened with unzipOpenCurrentFile + Return UNZ_CRCERROR if all the file was read but the CRC is not good +*/ +extern int ZEXPORT unzCloseCurrentFile (file) + unzFile file; +{ + int err=UNZ_OK; + + unz_s* s; + file_in_zip_read_info_s* pfile_in_zip_read_info; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + + if ((pfile_in_zip_read_info->rest_read_uncompressed == 0) && + (!pfile_in_zip_read_info->raw)) + { + if (pfile_in_zip_read_info->crc32 != pfile_in_zip_read_info->crc32_wait) + err=UNZ_CRCERROR; + } + + + TRYFREE(pfile_in_zip_read_info->read_buffer); + pfile_in_zip_read_info->read_buffer = NULL; + if (pfile_in_zip_read_info->stream_initialised) + inflateEnd(&pfile_in_zip_read_info->stream); + + pfile_in_zip_read_info->stream_initialised = 0; + TRYFREE(pfile_in_zip_read_info); + + s->pfile_in_zip_read=NULL; + + return err; +} + + +/* + Get the global comment string of the ZipFile, in the szComment buffer. + uSizeBuf is the size of the szComment buffer. + return the number of byte copied or an error code <0 +*/ +extern int ZEXPORT unzGetGlobalComment (file, szComment, uSizeBuf) + unzFile file; + char *szComment; + uLong uSizeBuf; +{ + unz_s* s; + uLong uReadThis ; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + + uReadThis = uSizeBuf; + if (uReadThis>s->gi.size_comment) + uReadThis = s->gi.size_comment; + + if (ZSEEK(s->z_filefunc,s->filestream,s->central_pos+22,ZLIB_FILEFUNC_SEEK_SET)!=0) + return UNZ_ERRNO; + + if (uReadThis>0) + { + *szComment='\0'; + if (ZREAD(s->z_filefunc,s->filestream,szComment,uReadThis)!=uReadThis) + return UNZ_ERRNO; + } + + if ((szComment != NULL) && (uSizeBuf > s->gi.size_comment)) + *(szComment+s->gi.size_comment)='\0'; + return (int)uReadThis; +} + +/* Additions by RX '2004 */ +extern uLong ZEXPORT unzGetOffset (file) + unzFile file; +{ + unz_s* s; + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + if (!s->current_file_ok) + return 0; + if (s->gi.number_entry != 0 && s->gi.number_entry != 0xffff) + if (s->num_file==s->gi.number_entry) + return 0; + return s->pos_in_central_dir; +} + +extern int ZEXPORT unzSetOffset (file, pos) + unzFile file; + uLong pos; +{ + unz_s* s; + int err; + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + + s->pos_in_central_dir = pos; + s->num_file = s->gi.number_entry; /* hack */ + err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, + &s->cur_file_info_internal, + NULL,0,NULL,0,NULL,0); + s->current_file_ok = (err == UNZ_OK); + return err; +} diff --git a/supergameboy/libgambatte/src/file/unzip/unzip.h b/supergameboy/libgambatte/src/file/unzip/unzip.h new file mode 100644 index 00000000..5bb6a696 --- /dev/null +++ b/supergameboy/libgambatte/src/file/unzip/unzip.h @@ -0,0 +1,354 @@ +/* unzip.h -- IO for uncompress .zip files using zlib + Version 1.01e, February 12th, 2005 + + Copyright (C) 1998-2005 Gilles Vollant + + This unzip package allow extract file from .ZIP file, compatible with PKZip 2.04g + WinZip, InfoZip tools and compatible. + + Multi volume ZipFile (span) are not supported. + Encryption compatible with pkzip 2.04g only supported + Old compressions used by old PKZip 1.x are not supported + + + I WAIT FEEDBACK at mail info@winimage.com + Visit also http://www.winimage.com/zLibDll/unzip.htm for evolution + + Condition of use and distribution are the same than zlib : + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + +*/ + +/* for more info about .ZIP format, see + http://www.info-zip.org/pub/infozip/doc/appnote-981119-iz.zip + http://www.info-zip.org/pub/infozip/doc/ + PkWare has also a specification at : + ftp://ftp.pkware.com/probdesc.zip +*/ + +#ifndef _unz_H +#define _unz_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _ZLIB_H +#include +#endif + +#ifndef _ZLIBIOAPI_H +#include "ioapi.h" +#endif + +#if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP) +/* like the STRICT of WIN32, we define a pointer that cannot be converted + from (void*) without cast */ +typedef struct TagunzFile__ { int unused; } unzFile__; +typedef unzFile__ *unzFile; +#else +typedef voidp unzFile; +#endif + + +#define UNZ_OK (0) +#define UNZ_END_OF_LIST_OF_FILE (-100) +#define UNZ_ERRNO (Z_ERRNO) +#define UNZ_EOF (0) +#define UNZ_PARAMERROR (-102) +#define UNZ_BADZIPFILE (-103) +#define UNZ_INTERNALERROR (-104) +#define UNZ_CRCERROR (-105) + +/* tm_unz contain date/time info */ +typedef struct tm_unz_s +{ + uInt tm_sec; /* seconds after the minute - [0,59] */ + uInt tm_min; /* minutes after the hour - [0,59] */ + uInt tm_hour; /* hours since midnight - [0,23] */ + uInt tm_mday; /* day of the month - [1,31] */ + uInt tm_mon; /* months since January - [0,11] */ + uInt tm_year; /* years - [1980..2044] */ +} tm_unz; + +/* unz_global_info structure contain global data about the ZIPfile + These data comes from the end of central dir */ +typedef struct unz_global_info_s +{ + uLong number_entry; /* total number of entries in + the central dir on this disk */ + uLong size_comment; /* size of the global comment of the zipfile */ +} unz_global_info; + + +/* unz_file_info contain information about a file in the zipfile */ +typedef struct unz_file_info_s +{ + uLong version; /* version made by 2 bytes */ + uLong version_needed; /* version needed to extract 2 bytes */ + uLong flag; /* general purpose bit flag 2 bytes */ + uLong compression_method; /* compression method 2 bytes */ + uLong dosDate; /* last mod file date in Dos fmt 4 bytes */ + uLong crc; /* crc-32 4 bytes */ + uLong compressed_size; /* compressed size 4 bytes */ + uLong uncompressed_size; /* uncompressed size 4 bytes */ + uLong size_filename; /* filename length 2 bytes */ + uLong size_file_extra; /* extra field length 2 bytes */ + uLong size_file_comment; /* file comment length 2 bytes */ + + uLong disk_num_start; /* disk number start 2 bytes */ + uLong internal_fa; /* internal file attributes 2 bytes */ + uLong external_fa; /* external file attributes 4 bytes */ + + tm_unz tmu_date; +} unz_file_info; + +extern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1, + const char* fileName2, + int iCaseSensitivity)); +/* + Compare two filename (fileName1,fileName2). + If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp) + If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi + or strcasecmp) + If iCaseSenisivity = 0, case sensitivity is defaut of your operating system + (like 1 on Unix, 2 on Windows) +*/ + + +extern unzFile ZEXPORT unzOpen OF((const char *path)); +/* + Open a Zip file. path contain the full pathname (by example, + on a Windows XP computer "c:\\zlib\\zlib113.zip" or on an Unix computer + "zlib/zlib113.zip". + If the zipfile cannot be opened (file don't exist or in not valid), the + return value is NULL. + Else, the return value is a unzFile Handle, usable with other function + of this unzip package. +*/ + +extern unzFile ZEXPORT unzOpen2 OF((const char *path, + zlib_filefunc_def* pzlib_filefunc_def)); +/* + Open a Zip file, like unzOpen, but provide a set of file low level API + for read/write the zip file (see ioapi.h) +*/ + +extern int ZEXPORT unzClose OF((unzFile file)); +/* + Close a ZipFile opened with unzipOpen. + If there is files inside the .Zip opened with unzOpenCurrentFile (see later), + these files MUST be closed with unzipCloseCurrentFile before call unzipClose. + return UNZ_OK if there is no problem. */ + +extern int ZEXPORT unzGetGlobalInfo OF((unzFile file, + unz_global_info *pglobal_info)); +/* + Write info about the ZipFile in the *pglobal_info structure. + No preparation of the structure is needed + return UNZ_OK if there is no problem. */ + + +extern int ZEXPORT unzGetGlobalComment OF((unzFile file, + char *szComment, + uLong uSizeBuf)); +/* + Get the global comment string of the ZipFile, in the szComment buffer. + uSizeBuf is the size of the szComment buffer. + return the number of byte copied or an error code <0 +*/ + + +/***************************************************************************/ +/* Unzip package allow you browse the directory of the zipfile */ + +extern int ZEXPORT unzGoToFirstFile OF((unzFile file)); +/* + Set the current file of the zipfile to the first file. + return UNZ_OK if there is no problem +*/ + +extern int ZEXPORT unzGoToNextFile OF((unzFile file)); +/* + Set the current file of the zipfile to the next file. + return UNZ_OK if there is no problem + return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. +*/ + +extern int ZEXPORT unzLocateFile OF((unzFile file, + const char *szFileName, + int iCaseSensitivity)); +/* + Try locate the file szFileName in the zipfile. + For the iCaseSensitivity signification, see unzStringFileNameCompare + + return value : + UNZ_OK if the file is found. It becomes the current file. + UNZ_END_OF_LIST_OF_FILE if the file is not found +*/ + + +/* ****************************************** */ +/* Ryan supplied functions */ +/* unz_file_info contain information about a file in the zipfile */ +typedef struct unz_file_pos_s +{ + uLong pos_in_zip_directory; /* offset in zip file directory */ + uLong num_of_file; /* # of file */ +} unz_file_pos; + +extern int ZEXPORT unzGetFilePos( + unzFile file, + unz_file_pos* file_pos); + +extern int ZEXPORT unzGoToFilePos( + unzFile file, + unz_file_pos* file_pos); + +/* ****************************************** */ + +extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file, + unz_file_info *pfile_info, + char *szFileName, + uLong fileNameBufferSize, + void *extraField, + uLong extraFieldBufferSize, + char *szComment, + uLong commentBufferSize)); +/* + Get Info about the current file + if pfile_info!=NULL, the *pfile_info structure will contain somes info about + the current file + if szFileName!=NULL, the filemane string will be copied in szFileName + (fileNameBufferSize is the size of the buffer) + if extraField!=NULL, the extra field information will be copied in extraField + (extraFieldBufferSize is the size of the buffer). + This is the Central-header version of the extra field + if szComment!=NULL, the comment string of the file will be copied in szComment + (commentBufferSize is the size of the buffer) +*/ + +/***************************************************************************/ +/* for reading the content of the current zipfile, you can open it, read data + from it, and close it (you can close it before reading all the file) + */ + +extern int ZEXPORT unzOpenCurrentFile OF((unzFile file)); +/* + Open for reading data the current file in the zipfile. + If there is no error, the return value is UNZ_OK. +*/ + +extern int ZEXPORT unzOpenCurrentFilePassword OF((unzFile file, + const char* password)); +/* + Open for reading data the current file in the zipfile. + password is a crypting password + If there is no error, the return value is UNZ_OK. +*/ + +extern int ZEXPORT unzOpenCurrentFile2 OF((unzFile file, + int* method, + int* level, + int raw)); +/* + Same than unzOpenCurrentFile, but open for read raw the file (not uncompress) + if raw==1 + *method will receive method of compression, *level will receive level of + compression + note : you can set level parameter as NULL (if you did not want known level, + but you CANNOT set method parameter as NULL +*/ + +extern int ZEXPORT unzOpenCurrentFile3 OF((unzFile file, + int* method, + int* level, + int raw, + const char* password)); +/* + Same than unzOpenCurrentFile, but open for read raw the file (not uncompress) + if raw==1 + *method will receive method of compression, *level will receive level of + compression + note : you can set level parameter as NULL (if you did not want known level, + but you CANNOT set method parameter as NULL +*/ + + +extern int ZEXPORT unzCloseCurrentFile OF((unzFile file)); +/* + Close the file in zip opened with unzOpenCurrentFile + Return UNZ_CRCERROR if all the file was read but the CRC is not good +*/ + +extern int ZEXPORT unzReadCurrentFile OF((unzFile file, + voidp buf, + unsigned len)); +/* + Read bytes from the current file (opened by unzOpenCurrentFile) + buf contain buffer where data must be copied + len the size of buf. + + return the number of byte copied if somes bytes are copied + return 0 if the end of file was reached + return <0 with error code if there is an error + (UNZ_ERRNO for IO error, or zLib error for uncompress error) +*/ + +extern z_off_t ZEXPORT unztell OF((unzFile file)); +/* + Give the current position in uncompressed data +*/ + +extern int ZEXPORT unzeof OF((unzFile file)); +/* + return 1 if the end of file was reached, 0 elsewhere +*/ + +extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file, + voidp buf, + unsigned len)); +/* + Read extra field from the current file (opened by unzOpenCurrentFile) + This is the local-header version of the extra field (sometimes, there is + more info in the local-header version than in the central-header) + + if buf==NULL, it return the size of the local extra field + + if buf!=NULL, len is the size of the buffer, the extra header is copied in + buf. + the return value is the number of bytes copied in buf, or (if <0) + the error code +*/ + +/***************************************************************************/ + +/* Get the current file offset */ +extern uLong ZEXPORT unzGetOffset (unzFile file); + +/* Set the current file offset */ +extern int ZEXPORT unzSetOffset (unzFile file, uLong pos); + + + +#ifdef __cplusplus +} +#endif + +#endif /* _unz_H */ diff --git a/supergameboy/libgambatte/src/gambatte.cpp b/supergameboy/libgambatte/src/gambatte.cpp new file mode 100644 index 00000000..27354c91 --- /dev/null +++ b/supergameboy/libgambatte/src/gambatte.cpp @@ -0,0 +1,184 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "gambatte.h" +#include "cpu.h" +#include "savestate.h" +#include "statesaver.h" +#include "initstate.h" +#include "state_osd_elements.h" +#include +#include + +#include + +static const std::string itos(int i) { + std::stringstream ss; + + ss << i; + + std::string out; + + ss >> out; + + return out; +} + +static const std::string statePath(const std::string &basePath, int stateNo) { + return basePath + "_" + itos(stateNo) + ".gqs"; +} + +namespace Gambatte { +GB::GB() : z80(new CPU), stateNo(1) {} + +GB::~GB() { + delete z80; +} + +unsigned GB::runFor(Gambatte::uint_least32_t *const soundBuf, const unsigned samples) { + z80->setSoundBuffer(soundBuf); + z80->runFor(samples * 2); + + return z80->fillSoundBuffer(); +} + +void GB::updateVideo() { + z80->updateVideo(); +} + +unsigned GB::lyCounter() { + return z80->lyCounter(); +} + +void GB::reset() { + z80->saveSavedata(); + + SaveState state; + z80->setStatePtrs(state); + setInitState(state, z80->isCgb()); + z80->loadState(state); + z80->loadSavedata(); + + z80->setAccumulator(supergameboy.version == 0 ? 0x01 : 0xff); + +// z80->reset(); +} + +void GB::setVideoBlitter(VideoBlitter *vb) { + z80->setVideoBlitter(vb); +} + +void GB::videoBufferChange() { + z80->videoBufferChange(); +} + +unsigned GB::videoWidth() const { + return z80->videoWidth(); +} + +unsigned GB::videoHeight() const { + return z80->videoHeight(); +} + +void GB::setVideoFilter(const unsigned n) { + z80->setVideoFilter(n); +} + +std::vector GB::filterInfo() const { + return z80->filterInfo(); +} + +void GB::setInputStateGetter(InputStateGetter *getInput) { + z80->setInputStateGetter(getInput); +} + +void GB::set_savedir(const char *sdir) { + z80->set_savedir(sdir); +} + +bool GB::load(const bool forceDmg) { + const bool failed = z80->load(forceDmg); + + if (!failed) { + SaveState state; + z80->setStatePtrs(state); + setInitState(state, z80->isCgb()); + z80->loadState(state); + z80->loadSavedata(); + + z80->setAccumulator(supergameboy.version == 0 ? 0x01 : 0xff); + + stateNo = 1; + z80->setOsdElement(std::auto_ptr()); + } + + return failed; +} + +bool GB::isCgb() const { + return z80->isCgb(); +} + +void GB::setDmgPaletteColor(unsigned palNum, unsigned colorNum, unsigned rgb32) { + z80->setDmgPaletteColor(palNum, colorNum, rgb32); +} + +void GB::saveSavedata() { + z80->saveSavedata(); +} + +void GB::loadState(const char *const filepath, const bool osdMessage) { + z80->saveSavedata(); + + SaveState state; + z80->setStatePtrs(state); + + if (StateSaver::loadState(state, filepath)) { + z80->loadState(state); + + if (osdMessage) + z80->setOsdElement(newStateLoadedOsdElement(stateNo)); + } +} + +void GB::saveState() { + saveState(statePath(z80->saveBasePath(), stateNo).c_str()); + z80->setOsdElement(newStateSavedOsdElement(stateNo)); +} + +void GB::loadState() { + loadState(statePath(z80->saveBasePath(), stateNo).c_str(), true); +} + +void GB::saveState(const char *filepath) { + SaveState state; + z80->setStatePtrs(state); + z80->saveState(state); + StateSaver::saveState(state, filepath); +} + +void GB::loadState(const char *const filepath) { + loadState(filepath, false); +} + +void GB::selectState(int n) { + n -= (n / 10) * 10; + stateNo = n < 0 ? n + 10 : n; + z80->setOsdElement(newSaveStateOsdElement(statePath(z80->saveBasePath(), stateNo).c_str(), stateNo)); +} +} diff --git a/supergameboy/libgambatte/src/initstate.cpp b/supergameboy/libgambatte/src/initstate.cpp new file mode 100644 index 00000000..c16d48b4 --- /dev/null +++ b/supergameboy/libgambatte/src/initstate.cpp @@ -0,0 +1,281 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "initstate.h" +#include "savestate.h" +#include +#include +#include "sound/sound_unit.h" +#include "memory.h" + +void setInitState(SaveState &state, const bool cgb) { + static const unsigned char feaxDump[0x60] = { + 0x18, 0x01, 0xEF, 0xDE, 0x06, 0x4A, 0xCD, 0xBD, + 0x18, 0x01, 0xEF, 0xDE, 0x06, 0x4A, 0xCD, 0xBD, + 0x18, 0x01, 0xEF, 0xDE, 0x06, 0x4A, 0xCD, 0xBD, + 0x18, 0x01, 0xEF, 0xDE, 0x06, 0x4A, 0xCD, 0xBD, + 0x00, 0x90, 0xF7, 0x7F, 0xC0, 0xB1, 0xB4, 0xFB, + 0x00, 0x90, 0xF7, 0x7F, 0xC0, 0xB1, 0xB4, 0xFB, + 0x00, 0x90, 0xF7, 0x7F, 0xC0, 0xB1, 0xB4, 0xFB, + 0x00, 0x90, 0xF7, 0x7F, 0xC0, 0xB1, 0xB4, 0xFB, + 0x24, 0x1B, 0xFD, 0x3A, 0x10, 0x12, 0xAD, 0x45, + 0x24, 0x1B, 0xFD, 0x3A, 0x10, 0x12, 0xAD, 0x45, + 0x24, 0x1B, 0xFD, 0x3A, 0x10, 0x12, 0xAD, 0x45, + 0x24, 0x1B, 0xFD, 0x3A, 0x10, 0x12, 0xAD, 0x45 + }; + + static const unsigned char ffxxDump[0x100] = { + 0xCF, 0x00, 0x7C, 0xFF, 0x43, 0x00, 0x00, 0xF8, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE1, + 0x80, 0xBF, 0xF3, 0xFF, 0xBF, 0xFF, 0x3F, 0x00, + 0xFF, 0xBF, 0x7F, 0xFF, 0x9F, 0xFF, 0xBF, 0xFF, + 0xFF, 0x00, 0x00, 0xBF, 0x77, 0xF3, 0xF1, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7E, 0xFF, 0xFE, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3E, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xC0, 0xFF, 0xC1, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, + 0xF8, 0xFF, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xCE, 0xED, 0x66, 0x66, 0xCC, 0x0D, 0x00, 0x0B, + 0x03, 0x73, 0x00, 0x83, 0x00, 0x0C, 0x00, 0x0D, + 0x00, 0x08, 0x11, 0x1F, 0x88, 0x89, 0x00, 0x0E, + 0xDC, 0xCC, 0x6E, 0xE6, 0xDD, 0xDD, 0xD9, 0x99, + 0xBB, 0xBB, 0x67, 0x63, 0x6E, 0x0E, 0xEC, 0xCC, + 0xDD, 0xDC, 0x99, 0x9F, 0xBB, 0xB9, 0x33, 0x3E, + 0x45, 0xEC, 0x52, 0xFA, 0x08, 0xB7, 0x07, 0x5D, + 0x01, 0xFD, 0xC0, 0xFF, 0x08, 0xFC, 0x00, 0xE5, + 0x0B, 0xF8, 0xC2, 0xCE, 0xF4, 0xF9, 0x0F, 0x7F, + 0x45, 0x6D, 0x3D, 0xFE, 0x46, 0x97, 0x33, 0x5E, + 0x08, 0xEF, 0xF1, 0xFF, 0x86, 0x83, 0x24, 0x74, + 0x12, 0xFC, 0x00, 0x9F, 0xB4, 0xB7, 0x06, 0xD5, + 0xD0, 0x7A, 0x00, 0x9E, 0x04, 0x5F, 0x41, 0x2F, + 0x1D, 0x77, 0x36, 0x75, 0x81, 0xAA, 0x70, 0x3A, + 0x98, 0xD1, 0x71, 0x02, 0x4D, 0x01, 0xC1, 0xFF, + 0x0D, 0x00, 0xD3, 0x05, 0xF9, 0x00, 0x0B, 0x00 + }; + + static const unsigned char cgbObjpDump[0x40] = { + 0x00, 0x00, 0xF2, 0xAB, + 0x61, 0xC2, 0xD9, 0xBA, + 0x88, 0x6E, 0xDD, 0x63, + 0x28, 0x27, 0xFB, 0x9F, + 0x35, 0x42, 0xD6, 0xD4, + 0x50, 0x48, 0x57, 0x5E, + 0x23, 0x3E, 0x3D, 0xCA, + 0x71, 0x21, 0x37, 0xC0, + 0xC6, 0xB3, 0xFB, 0xF9, + 0x08, 0x00, 0x8D, 0x29, + 0xA3, 0x20, 0xDB, 0x87, + 0x62, 0x05, 0x5D, 0xD4, + 0x0E, 0x08, 0xFE, 0xAF, + 0x20, 0x02, 0xD7, 0xFF, + 0x07, 0x6A, 0x55, 0xEC, + 0x83, 0x40, 0x0B, 0x77 + }; + + state.cpu.cycleCounter = 0x102A0; + state.cpu.PC = 0x100; + state.cpu.SP = 0xFFFE; + state.cpu.A = (cgb * 0x10) | 0x01; + state.cpu.B = 0x00; + state.cpu.C = 0x13; + state.cpu.D = 0x00; + state.cpu.E = 0xD8; + state.cpu.F = 0xB0; + state.cpu.H = 0x01; + state.cpu.L = 0x4D; + state.cpu.skip = false; + state.cpu.halted = false; + + + std::memset(state.mem.vram.ptr, 0, state.mem.vram.getSz()); + std::memset(state.mem.sram.ptr, 0xFF, state.mem.sram.getSz()); + + for (unsigned addr = 0x0000; addr < 0x0800; addr += 0x10) { + std::memset(state.mem.wram.ptr + addr + 0x00, 0xFF, 0x08); + std::memset(state.mem.wram.ptr + addr + 0x08, 0x00, 0x08); + } + + for (unsigned addr = 0x0800; addr < 0x1000; addr += 0x10) { + std::memset(state.mem.wram.ptr + addr + 0x00, 0x00, 0x08); + std::memset(state.mem.wram.ptr + addr + 0x08, 0xFF, 0x08); + } + + for (unsigned addr = 0x0E00; addr < 0x1000; addr += 0x10) { + state.mem.wram.ptr[addr + 0x02] = 0xFF; + state.mem.wram.ptr[addr + 0x0A] = 0x00; + } + + for (unsigned addr = 0x1000; addr < state.mem.wram.getSz(); addr += 0x1000) + std::memcpy(state.mem.wram.ptr + addr, state.mem.wram.ptr, 0x1000); + + std::memset(state.mem.ioamhram.ptr, 0x00, state.mem.ioamhram.getSz()); + std::memcpy(state.mem.ioamhram.ptr + 0xA0, feaxDump, sizeof(feaxDump)); + std::memcpy(state.mem.ioamhram.ptr + 0x100, ffxxDump, sizeof(ffxxDump)); + + state.mem.ioamhram.ptr[0x104] = 0x1C; + state.mem.ioamhram.ptr[0x140] = 0x91; + state.mem.ioamhram.ptr[0x144] = 0x00; + + if (!cgb) { + state.mem.ioamhram.ptr[0x130] = 0xAC; + state.mem.ioamhram.ptr[0x131] = 0xDD; + state.mem.ioamhram.ptr[0x132] = 0xDA; + state.mem.ioamhram.ptr[0x133] = 0x48; + state.mem.ioamhram.ptr[0x134] = 0x36; + state.mem.ioamhram.ptr[0x135] = 0x02; + state.mem.ioamhram.ptr[0x136] = 0xCF; + state.mem.ioamhram.ptr[0x137] = 0x16; + state.mem.ioamhram.ptr[0x138] = 0x2C; + state.mem.ioamhram.ptr[0x139] = 0x04; + state.mem.ioamhram.ptr[0x13A] = 0xE5; + state.mem.ioamhram.ptr[0x13B] = 0x2C; + state.mem.ioamhram.ptr[0x13C] = 0xAC; + state.mem.ioamhram.ptr[0x13D] = 0xDD; + state.mem.ioamhram.ptr[0x13E] = 0xDA; + state.mem.ioamhram.ptr[0x13F] = 0x48; + + state.mem.ioamhram.ptr[0x14D] = 0xFF; + state.mem.ioamhram.ptr[0x14F] = 0xFF; + state.mem.ioamhram.ptr[0x156] = 0xFF; + state.mem.ioamhram.ptr[0x168] = 0xFF; + state.mem.ioamhram.ptr[0x16A] = 0xFF; + state.mem.ioamhram.ptr[0x16B] = 0xFF; + state.mem.ioamhram.ptr[0x16C] = 0xFF; + state.mem.ioamhram.ptr[0x170] = 0xFF; + state.mem.ioamhram.ptr[0x172] = 0xFF; + state.mem.ioamhram.ptr[0x173] = 0xFF; + state.mem.ioamhram.ptr[0x174] = 0xFF; + state.mem.ioamhram.ptr[0x175] = 0xFF; + state.mem.ioamhram.ptr[0x176] = 0xFF; + state.mem.ioamhram.ptr[0x177] = 0xFF; + } + + state.mem.div_lastUpdate = 0; + state.mem.tima_lastUpdate = 0; + state.mem.tmatime = Memory::COUNTER_DISABLED; + state.mem.next_serialtime = Memory::COUNTER_DISABLED; + state.mem.lastOamDmaUpdate = Memory::COUNTER_DISABLED; + state.mem.minIntTime = 0; + state.mem.rombank = 1; + state.mem.dmaSource = 0; + state.mem.dmaDestination = 0; + state.mem.rambank = 0; + state.mem.oamDmaPos = 0xFE; + state.mem.IME = false; + state.mem.enable_ram = false; + state.mem.rambank_mode = false; + state.mem.hdma_transfer = false; + + + for (unsigned i = 0x00; i < 0x40; i += 0x02) { + state.ppu.bgpData.ptr[i] = 0xFF; + state.ppu.bgpData.ptr[i + 1] = 0x7F; + } + + std::memcpy(state.ppu.objpData.ptr, cgbObjpDump, sizeof(cgbObjpDump)); + + if (!cgb) { + state.ppu.bgpData.ptr[0] = state.mem.ioamhram.get()[0x147]; + state.ppu.objpData.ptr[0] = state.mem.ioamhram.get()[0x148]; + state.ppu.objpData.ptr[1] = state.mem.ioamhram.get()[0x149]; + } + + for (unsigned pos = 0; pos < 80; ++pos) + state.ppu.oamReaderBuf.ptr[pos] = state.mem.ioamhram.ptr[((pos * 2) & ~3) | (pos & 1)]; + + std::fill_n(state.ppu.oamReaderSzbuf.ptr, 40, false); + + state.ppu.videoCycles = 144*456ul + 164; + state.ppu.enableDisplayM0Time = state.cpu.cycleCounter - state.ppu.videoCycles + 159; + state.ppu.winYPos = 0xFF; + state.ppu.drawStartCycle = 90; + state.ppu.scReadOffset = 90; + state.ppu.lcdc = state.mem.ioamhram.get()[0x140]; + state.ppu.scx[1] = state.ppu.scx[0] = 0; + state.ppu.scy[1] = state.ppu.scy[0] = 0; + state.ppu.scxAnd7 = 0; + state.ppu.weMaster = false; + state.ppu.wx = 0; + state.ppu.wy = 0; + state.ppu.lycIrqSkip = false; + + + state.spu.cycleCounter = 0x1000 | ((state.cpu.cycleCounter >> 1) & 0xFFF); // spu.cycleCounter >> 12 & 7 represents the frame sequencer position. + + state.spu.ch1.sweep.counter = SoundUnit::COUNTER_DISABLED; + state.spu.ch1.sweep.shadow = 0; + state.spu.ch1.sweep.nr0 = 0; + state.spu.ch1.sweep.negging = false; + state.spu.ch1.duty.nextPosUpdate = (state.spu.cycleCounter & ~1) + 2048 * 2; + state.spu.ch1.duty.nr3 = 0; + state.spu.ch1.duty.pos = 0; + state.spu.ch1.env.counter = SoundUnit::COUNTER_DISABLED; + state.spu.ch1.env.volume = 0; + state.spu.ch1.lcounter.counter = SoundUnit::COUNTER_DISABLED; + state.spu.ch1.lcounter.lengthCounter = 0x40; + state.spu.ch1.nr4 = 0; + state.spu.ch1.master = true; + + state.spu.ch2.duty.nextPosUpdate = (state.spu.cycleCounter & ~1) + 2048 * 2; + state.spu.ch2.duty.nr3 = 0; + state.spu.ch2.duty.pos = 0; + state.spu.ch2.env.counter = state.spu.cycleCounter - ((state.spu.cycleCounter - 0x1000) & 0x7FFF) + 8ul * 0x8000; + state.spu.ch2.env.volume = 0; + state.spu.ch2.lcounter.counter = SoundUnit::COUNTER_DISABLED; + state.spu.ch2.lcounter.lengthCounter = 0x40; + state.spu.ch2.nr4 = 0; + state.spu.ch2.master = false; + + for (unsigned i = 0; i < 0x10; ++i) + state.spu.ch3.waveRam.ptr[i] = state.mem.ioamhram.get()[0x130 + i]; + + state.spu.ch3.lcounter.counter = SoundUnit::COUNTER_DISABLED; + state.spu.ch3.lcounter.lengthCounter = 0x100; + state.spu.ch3.waveCounter = SoundUnit::COUNTER_DISABLED; + state.spu.ch3.lastReadTime = SoundUnit::COUNTER_DISABLED; + state.spu.ch3.nr3 = 0; + state.spu.ch3.nr4 = 0; + state.spu.ch3.wavePos = 0; + state.spu.ch3.sampleBuf = 0; + state.spu.ch3.master = false; + + state.spu.ch4.lfsr.counter = state.spu.cycleCounter + 4; + state.spu.ch4.lfsr.reg = 0xFF; + state.spu.ch4.env.counter = state.spu.cycleCounter - ((state.spu.cycleCounter - 0x1000) & 0x7FFF) + 8ul * 0x8000; + state.spu.ch4.env.volume = 0; + state.spu.ch4.lcounter.counter = SoundUnit::COUNTER_DISABLED; + state.spu.ch4.lcounter.lengthCounter = 0x40; + state.spu.ch4.nr4 = 0; + state.spu.ch4.master = false; + + state.rtc.baseTime = std::time(0); + state.rtc.haltTime = state.rtc.baseTime; + state.rtc.index = 5; + state.rtc.dataDh = 0; + state.rtc.dataDl = 0; + state.rtc.dataH = 0; + state.rtc.dataM = 0; + state.rtc.dataS = 0; + state.rtc.lastLatchData = false; +} diff --git a/supergameboy/libgambatte/src/initstate.h b/supergameboy/libgambatte/src/initstate.h new file mode 100644 index 00000000..d550eed5 --- /dev/null +++ b/supergameboy/libgambatte/src/initstate.h @@ -0,0 +1,26 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef INITSTATE_H +#define INITSTATE_H + +class SaveState; + +void setInitState(SaveState &state, bool cgb); + +#endif diff --git a/supergameboy/libgambatte/src/insertion_sort.h b/supergameboy/libgambatte/src/insertion_sort.h new file mode 100644 index 00000000..939ba074 --- /dev/null +++ b/supergameboy/libgambatte/src/insertion_sort.h @@ -0,0 +1,51 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#ifndef INSERTION_SORT_H +#define INSERTION_SORT_H + +#include + +template +void insertionSort(T *const start, T *const end, Less less) { + if (start >= end) + return; + + T *a = start; + + while (++a < end) { + const T e = *a; + + T *b = a; + + while (b != start && less(e, *(b - 1))) { + *b = *(b - 1); + b = b - 1; + } + + *b = e; + } +} + +template +inline void insertionSort(T *const start, T *const end) { + insertionSort(start, end, std::less()); +} + +#endif /*INSERTION_SORT_H*/ diff --git a/supergameboy/libgambatte/src/interrupter.cpp b/supergameboy/libgambatte/src/interrupter.cpp new file mode 100644 index 00000000..aea9df41 --- /dev/null +++ b/supergameboy/libgambatte/src/interrupter.cpp @@ -0,0 +1,44 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "interrupter.h" + +#include "memory.h" + +Interrupter::Interrupter(unsigned short &SP_in, unsigned short &PC_in, bool &halted_in) : + SP(SP_in), + PC(PC_in), + halted(halted_in) +{} + +unsigned long Interrupter::interrupt(const unsigned address, unsigned long cycleCounter, Memory &memory) { + if (halted && memory.isCgb()) + cycleCounter += 4; + + halted = false; + cycleCounter += 8; + SP = (SP - 1) & 0xFFFF; + memory.write(SP, PC >> 8, cycleCounter); + cycleCounter += 4; + SP = (SP - 1) & 0xFFFF; + memory.write(SP, PC & 0xFF, cycleCounter); + PC = address; + cycleCounter += 8; + + return cycleCounter; +} diff --git a/supergameboy/libgambatte/src/interrupter.h b/supergameboy/libgambatte/src/interrupter.h new file mode 100644 index 00000000..18e0d9e1 --- /dev/null +++ b/supergameboy/libgambatte/src/interrupter.h @@ -0,0 +1,38 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef INTERRUPTER_H +#define INTERRUPTER_H + +class Memory; + +class Interrupter { + unsigned short &SP; + unsigned short &PC; + bool &halted; + +public: + Interrupter(unsigned short &SP, unsigned short &PC, bool &halted); + unsigned long interrupt(const unsigned address, unsigned long cycleCounter, Memory &memory); + + void unhalt() { + halted = false; + } +}; + +#endif diff --git a/supergameboy/libgambatte/src/memory.cpp b/supergameboy/libgambatte/src/memory.cpp new file mode 100644 index 00000000..2211733d --- /dev/null +++ b/supergameboy/libgambatte/src/memory.cpp @@ -0,0 +1,1867 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "memory.h" +#include "video.h" +#include "sound.h" +#include "inputstate.h" +#include "inputstategetter.h" +#include "savestate.h" +#include "file/file.h" +#include +#include + +// static const uint32_t timaClock[4]={ 1024, 16, 64, 256 }; +static const unsigned char timaClock[4] = { 10, 4, 6, 8 }; + +Memory::Memory(const Interrupter &interrupter_in) : +memchunk(NULL), +rambankdata(NULL), +rdisabled_ram(NULL), +wdisabled_ram(NULL), +oamDmaSrc(NULL), +vrambank(vram), +rsrambankptr(NULL), +wsrambankptr(NULL), +getInput(NULL), +div_lastUpdate(0), +tima_lastUpdate(0), +next_timatime(COUNTER_DISABLED), +next_blittime(144*456ul), +nextIntTime(COUNTER_DISABLED), +minIntTime(0), +next_dmatime(COUNTER_DISABLED), +next_hdmaReschedule(COUNTER_DISABLED), +next_unhalttime(COUNTER_DISABLED), +next_endtime(0), +tmatime(COUNTER_DISABLED), +next_serialtime(COUNTER_DISABLED), +lastOamDmaUpdate(COUNTER_DISABLED), +nextOamEventTime(COUNTER_DISABLED), +display(ioamhram, vram), +interrupter(interrupter_in), +romtype(plain), +rombanks(1), +rombank(1), +dmaSource(0), +dmaDestination(0), +rambank(0), +rambanks(1), +oamDmaArea1Lower(0), +oamDmaArea1Width(0), +oamDmaArea2Upper(0), +oamDmaPos(0xFE), +cgb(false), +doubleSpeed(false), +IME(false), +enable_ram(false), +rambank_mode(false), +battery(false), +rtcRom(false), +hdma_transfer(false), +active(false) +{ + romdata[1] = romdata[0] = NULL; + wramdata[1] = wramdata[0] = NULL; + std::fill_n(rmem, 0x10, static_cast(NULL)); + std::fill_n(wmem, 0x10, static_cast(NULL)); + set_irqEvent(); + set_event(); +} + +void Memory::setStatePtrs(SaveState &state) { + state.mem.vram.set(vram, sizeof vram); + state.mem.sram.set(rambankdata, rambanks * 0x2000ul); + state.mem.wram.set(wramdata[0], isCgb() ? 0x8000 : 0x2000); + state.mem.ioamhram.set(ioamhram, sizeof ioamhram); + + display.setStatePtrs(state); + sound.setStatePtrs(state); +} + +unsigned long Memory::saveState(SaveState &state, unsigned long cycleCounter) { + cycleCounter = resetCounters(cycleCounter); + nontrivial_ff_read(0xFF0F, cycleCounter); + nontrivial_ff_read(0xFF26, cycleCounter); + + state.mem.div_lastUpdate = div_lastUpdate; + state.mem.tima_lastUpdate = tima_lastUpdate; + state.mem.tmatime = tmatime; + state.mem.next_serialtime = next_serialtime; + state.mem.lastOamDmaUpdate = lastOamDmaUpdate; + state.mem.minIntTime = minIntTime; + state.mem.rombank = rombank; + state.mem.dmaSource = dmaSource; + state.mem.dmaDestination = dmaDestination; + state.mem.rambank = rambank; + state.mem.oamDmaPos = oamDmaPos; + state.mem.IME = IME; + state.mem.enable_ram = enable_ram; + state.mem.rambank_mode = rambank_mode; + state.mem.hdma_transfer = hdma_transfer; + + rtc.saveState(state); + display.saveState(state); + sound.saveState(state); + + return cycleCounter; +} + +void Memory::loadState(const SaveState &state, const unsigned long oldCc) { + sound.loadState(state); + display.loadState(state, state.mem.oamDmaPos < 0xA0 ? rdisabled_ram : ioamhram); + rtc.loadState(state, rtcRom ? state.mem.enable_ram : false); + + div_lastUpdate = state.mem.div_lastUpdate; + tima_lastUpdate = state.mem.tima_lastUpdate; + tmatime = state.mem.tmatime; + next_serialtime = state.mem.next_serialtime; + lastOamDmaUpdate = state.mem.lastOamDmaUpdate; + minIntTime = state.mem.minIntTime; + rombank = state.mem.rombank & (rombanks - 1); + dmaSource = state.mem.dmaSource; + dmaDestination = state.mem.dmaDestination; + rambank = state.mem.rambank & (rambanks - 1); + oamDmaPos = state.mem.oamDmaPos; + IME = state.mem.IME; + enable_ram = state.mem.enable_ram; + rambank_mode = state.mem.rambank_mode; + hdma_transfer = state.mem.hdma_transfer; + + const bool oldDs = doubleSpeed; + doubleSpeed = isCgb() & ioamhram[0x14D] >> 7; + oamDmaArea2Upper = oamDmaArea1Width = oamDmaArea1Lower = 0; + vrambank = vram + (ioamhram[0x14F] & 0x01 & isCgb()) * 0x2000; + wramdata[1] = wramdata[0] + ((isCgb() && (ioamhram[0x170] & 0x07)) ? (ioamhram[0x170] & 0x07) : 1) * 0x1000; + std::fill_n(rmem, 0x10, static_cast(NULL)); + std::fill_n(wmem, 0x10, static_cast(NULL)); + setBanks(); + + if (lastOamDmaUpdate != COUNTER_DISABLED) { + oamDmaInitSetup(); + + unsigned oamEventPos = 0x100; + + if (oamDmaPos < 0xA0) { + setOamDmaArea(); + oamEventPos = 0xA0; + } + + nextOamEventTime = lastOamDmaUpdate + (oamEventPos - oamDmaPos) * 4; + setOamDmaSrc(); + } + + if (!IME && state.cpu.halted) + schedule_unhalt(); + + next_blittime = (ioamhram[0x140] & 0x80) ? display.nextMode1IrqTime() : static_cast(COUNTER_DISABLED); + + const unsigned long cycleCounter = state.cpu.cycleCounter; + + if (hdma_transfer) { + next_dmatime = display.nextHdmaTime(cycleCounter); + next_hdmaReschedule = display.nextHdmaTimeInvalid(); + } else { + next_hdmaReschedule = next_dmatime = COUNTER_DISABLED; + } + + next_timatime = (ioamhram[0x107] & 4) ? tima_lastUpdate + ((256u - ioamhram[0x105]) << timaClock[ioamhram[0x107] & 3]) + 1 : static_cast(COUNTER_DISABLED); + set_irqEvent(); + rescheduleIrq(cycleCounter); + + if (oldDs != isDoubleSpeed()) + next_endtime = cycleCounter - (isDoubleSpeed() ?( oldCc - next_endtime) << 1 :( oldCc - next_endtime) >> 1); + else + next_endtime = cycleCounter - (oldCc - next_endtime); + +// set_event(); +} + +void Memory::schedule_unhalt() { + next_unhalttime = std::min(next_irqEventTime, display.nextIrqEvent()); + + if (next_unhalttime != COUNTER_DISABLED) + next_unhalttime += isCgb() * 4; + + set_event(); +} + +void Memory::rescheduleIrq(const unsigned long cycleCounter) { + if (IME) { + ioamhram[0x10F] |= display.getIfReg(cycleCounter) & 3; + + nextIntTime = (ioamhram[0x10F] & ioamhram[0x1FF] & 0x1F) ? cycleCounter : std::min(next_irqEventTime, display.nextIrqEvent()); + + if (nextIntTime < minIntTime) + nextIntTime = minIntTime; + + set_event(); + } +} + +void Memory::rescheduleHdmaReschedule() { + if (hdma_transfer && (ioamhram[0x140] & 0x80)) { + const unsigned long newTime = display.nextHdmaTimeInvalid(); + + if (newTime < next_hdmaReschedule) { + next_hdmaReschedule = newTime; + + if (newTime < next_eventtime) { + next_eventtime = newTime; + next_event = HDMA_RESCHEDULE; + } + } + } +} + +void Memory::ei(const unsigned long cycleCounter) { + IME = 1; + minIntTime = cycleCounter + 1; + rescheduleIrq(cycleCounter); +} + +void Memory::incEndtime(const unsigned long inc) { + active = true; + next_endtime += inc << isDoubleSpeed(); + set_event(); +} + +void Memory::setEndtime(const unsigned long cycleCounter, const unsigned long inc) { + next_endtime = cycleCounter; + incEndtime(inc); +} + +void Memory::set_irqEvent() { + next_irqEventTime = next_timatime; + next_irqEvent = TIMA; + + if (next_serialtime < next_irqEventTime) { + next_irqEvent = SERIAL; + next_irqEventTime = next_serialtime; + } +} + +void Memory::update_irqEvents(const unsigned long cc) { + while (next_irqEventTime <= cc) { + switch (next_irqEvent) { + case TIMA: + ioamhram[0x10F] |= 4; + next_timatime += (256u - ioamhram[0x106]) << timaClock[ioamhram[0x107] & 3]; + break; + case SERIAL: + next_serialtime = COUNTER_DISABLED; + ioamhram[0x101] = 0xFF; + ioamhram[0x102] &= 0x7F; + ioamhram[0x10F] |= 8; + break; + } + + set_irqEvent(); + } +} + +void Memory::set_event() { + next_event = INTERRUPTS; + next_eventtime = nextIntTime; + if (next_hdmaReschedule < next_eventtime) { + next_eventtime = next_hdmaReschedule; + next_event = HDMA_RESCHEDULE; + } + if (next_dmatime < next_eventtime) { + next_eventtime = next_dmatime; + next_event = DMA; + } + if (next_unhalttime < next_eventtime) { + next_eventtime = next_unhalttime; + next_event = UNHALT; + } + if (nextOamEventTime < next_eventtime) { + next_eventtime = nextOamEventTime; + next_event = OAM; + } + if (next_blittime < next_eventtime) { + next_event = BLIT; + next_eventtime = next_blittime; + } + if (next_endtime < next_eventtime) { + next_eventtime = next_endtime; + next_event = END; + } +} + +unsigned long Memory::event(unsigned long cycleCounter) { + if (lastOamDmaUpdate != COUNTER_DISABLED) + updateOamDma(cycleCounter); + + switch (next_event) { + case HDMA_RESCHEDULE: +// printf("hdma_reschedule\n"); + next_dmatime = display.nextHdmaTime(cycleCounter); + next_hdmaReschedule = display.nextHdmaTimeInvalid(); + break; + case DMA: +// printf("dma\n"); + { + const bool doubleSpeed = isDoubleSpeed(); + unsigned dmaSrc = dmaSource; + unsigned dmaDest = dmaDestination; + unsigned dmaLength = ((ioamhram[0x155] & 0x7F) + 0x1) * 0x10; + + unsigned length = hdma_transfer ? 0x10 : dmaLength; + + if ((static_cast(dmaDest) + length) & 0x10000) { + length = 0x10000 - dmaDest; + ioamhram[0x155] |= 0x80; + } + + dmaLength -= length; + + if (!(ioamhram[0x140] & 0x80)) + dmaLength = 0; + + { + unsigned long lOamDmaUpdate = lastOamDmaUpdate; + lastOamDmaUpdate = COUNTER_DISABLED; + + while (length--) { + const unsigned src = dmaSrc++ & 0xFFFF; + const unsigned data = ((src & 0xE000) == 0x8000 || src > 0xFDFF) ? 0xFF : read(src, cycleCounter); + + cycleCounter += 2 << doubleSpeed; + + if (cycleCounter - 3 > lOamDmaUpdate) { + oamDmaPos = (oamDmaPos + 1) & 0xFF; + lOamDmaUpdate += 4; + + if (oamDmaPos < 0xA0) { + if (oamDmaPos == 0) + startOamDma(lOamDmaUpdate - 2); + + ioamhram[src & 0xFF] = data; + } else if (oamDmaPos == 0xA0) { + endOamDma(lOamDmaUpdate - 2); + lOamDmaUpdate = COUNTER_DISABLED; + } + } + + nontrivial_write(0x8000 | (dmaDest++ & 0x1FFF), data, cycleCounter); + } + + lastOamDmaUpdate = lOamDmaUpdate; + } + + cycleCounter += 4; + + dmaSource = dmaSrc; + dmaDestination = dmaDest; + ioamhram[0x155] = ((dmaLength / 0x10 - 0x1) & 0xFF) | (ioamhram[0x155] & 0x80); + + if (ioamhram[0x155] & 0x80) { + next_hdmaReschedule = next_dmatime = COUNTER_DISABLED; + hdma_transfer = 0; + } + + if (hdma_transfer) { + if (lastOamDmaUpdate != COUNTER_DISABLED) + updateOamDma(cycleCounter); + + next_dmatime = display.nextHdmaTime(cycleCounter); + } + } + + break; + case INTERRUPTS: +// printf("interrupts\n"); + update_irqEvents(cycleCounter); + ioamhram[0x10F] |= display.getIfReg(cycleCounter) & 3; + + { + /*unsigned interrupt = ioamhram[0x10F] & ioamhram[0x1FF]; + interrupt |= interrupt << 1; + interrupt |= interrupt << 2; + interrupt |= interrupt << 1; + interrupt = ~interrupt; + ++interrupt; + interrupt &= 0x1F; + + if (interrupt) { + ioamhram[0x10F] &= ~interrupt; + display.setIfReg(ioamhram[0x10F], CycleCounter); + IME = false; + + unsigned address = interrupt; + interrupt >>= 1; + address -= interrupt & 0x0C; + interrupt >>= 1; + address -= interrupt & 5; + address += interrupt >> 2; + + address <<= 3; + address += 0x38; + + z80.interrupt(address); + }*/ + + const unsigned interrupt = ioamhram[0x10F] & ioamhram[0x1FF] & 0x1F; + + if (interrupt) { + unsigned n; + unsigned address; + + if ((n = interrupt & 0x01)) + address = 0x40; + else if ((n = interrupt & 0x02)) + address = 0x48; + else if ((n = interrupt & 0x04)) + address = 0x50; + else if ((n = interrupt & 0x08)) + address = 0x58; + else { + n = 0x10; + address = 0x60; + } + + ioamhram[0x10F] &= ~n; + display.setIfReg(ioamhram[0x10F], cycleCounter); + IME = false; + cycleCounter = interrupter.interrupt(address, cycleCounter, *this); + } + } + + nextIntTime = IME ? std::min(next_irqEventTime, display.nextIrqEvent()) : static_cast(COUNTER_DISABLED); + break; + case BLIT: +// printf("blit\n"); + display.updateScreen(next_blittime); + + if (ioamhram[0x140] & 0x80) + next_blittime += 70224 << isDoubleSpeed(); + else + next_blittime = COUNTER_DISABLED; + + break; + case UNHALT: +// printf("unhalt\n"); + update_irqEvents(cycleCounter); + ioamhram[0x10F] |= display.getIfReg(cycleCounter) & 3; + + if (ioamhram[0x10F] & ioamhram[0x1FF] & 0x1F) { + next_unhalttime = COUNTER_DISABLED; + interrupter.unhalt(); + } else + next_unhalttime = std::min(next_irqEventTime, display.nextIrqEvent()) + isCgb() * 4; + + break; + case OAM: + nextOamEventTime = lastOamDmaUpdate == COUNTER_DISABLED ? static_cast(COUNTER_DISABLED) : nextOamEventTime + 0xA0 * 4; + break; + case END: + { + const unsigned long endtime = next_endtime; + next_endtime = COUNTER_DISABLED; + set_event(); + + while (cycleCounter >= next_eventtime) + cycleCounter = event(cycleCounter); + + next_endtime = endtime; + active = false; + } + + break; + } + + set_event(); + + return cycleCounter; +} + +void Memory::speedChange(const unsigned long cycleCounter) { + if (isCgb() && (ioamhram[0x14D] & 0x1)) { + std::printf("speedChange\n"); + + update_irqEvents(cycleCounter); + sound.generate_samples(cycleCounter, isDoubleSpeed()); + display.preSpeedChange(cycleCounter); + + ioamhram[0x14D] = ~ioamhram[0x14D] & 0x80; + doubleSpeed = ioamhram[0x14D] >> 7; + + display.postSpeedChange(cycleCounter); + + if (hdma_transfer) { + next_dmatime = display.nextHdmaTime(cycleCounter); + next_hdmaReschedule = display.nextHdmaTimeInvalid(); + } + + next_blittime = (ioamhram[0x140] & 0x80) ? display.nextMode1IrqTime() : static_cast(COUNTER_DISABLED); + next_endtime = cycleCounter + (isDoubleSpeed() ?( next_endtime - cycleCounter) << 1 : ((next_endtime - cycleCounter) >> 1)); + set_irqEvent(); + rescheduleIrq(cycleCounter); + set_event(); + } +} + +static void decCycles(unsigned long &counter, const unsigned long dec) { + if (counter != Memory::COUNTER_DISABLED) + counter -= dec; +} + +unsigned long Memory::resetCounters(unsigned long cycleCounter) { + std::printf("resetting counters\n"); + + if (lastOamDmaUpdate != COUNTER_DISABLED) + updateOamDma(cycleCounter); + + update_irqEvents(cycleCounter); + rescheduleIrq(cycleCounter); + display.preResetCounter(cycleCounter); + + const unsigned long oldCC = cycleCounter; + + { + const unsigned long divinc = (cycleCounter - div_lastUpdate) >> 8; + ioamhram[0x104] = (ioamhram[0x104] + divinc) & 0xFF; + div_lastUpdate += divinc << 8; + } + + if (ioamhram[0x107] & 0x04) { + update_tima(cycleCounter); + } + + const unsigned long dec = cycleCounter < 0x10000 ? 0 : (cycleCounter & ~0x7FFFul) - 0x8000; + + minIntTime = minIntTime < cycleCounter ? 0 : minIntTime - dec; + + if (ioamhram[0x107] & 0x04) + decCycles(tima_lastUpdate, dec); + + decCycles(div_lastUpdate, dec); + decCycles(lastOamDmaUpdate, dec); + decCycles(next_eventtime, dec); + decCycles(next_irqEventTime, dec); + decCycles(next_timatime, dec); + decCycles(next_blittime, dec); + decCycles(nextOamEventTime, dec); + decCycles(next_endtime, dec); + decCycles(next_dmatime, dec); + decCycles(next_hdmaReschedule, dec); + decCycles(nextIntTime, dec); + decCycles(next_serialtime, dec); + decCycles(tmatime, dec); + decCycles(next_unhalttime, dec); + + cycleCounter -= dec; + + display.postResetCounter(oldCC, cycleCounter); + sound.resetCounter(cycleCounter, oldCC, isDoubleSpeed()); + + return cycleCounter; +} + +void Memory::updateInput() { + unsigned joypadId = 0x0F; + unsigned button = 0xFF; + unsigned dpad = 0xFF; + + if (getInput) { + const Gambatte::InputState &is = (*getInput)(); + + joypadId = is.joypadId; + + button ^= is.startButton << 3; + button ^= is.selectButton << 2; + button ^= is.bButton << 1; + button ^= is.aButton; + + dpad ^= is.dpadDown << 3; + dpad ^= is.dpadUp << 2; + dpad ^= is.dpadLeft << 1; + dpad ^= is.dpadRight; + } + + ioamhram[0x100] |= 0xF; + + if ((ioamhram[0x100] & 0x30) == 0x30) { + ioamhram[0x100] &= 0xf0; + ioamhram[0x100] |= joypadId; + } else { + if (!(ioamhram[0x100] & 0x10)) + ioamhram[0x100] &= dpad; + + if (!(ioamhram[0x100] & 0x20)) + ioamhram[0x100] &= button; + } +} + +void Memory::setRombank() { + unsigned bank = rombank; + + if ((romtype == mbc1 && !(bank & 0x1F)) || (romtype == mbc5 && !bank)) + ++bank; + + romdata[1] = romdata[0] + bank * 0x4000ul - 0x4000; + + if (oamDmaArea1Lower != 0xA0) { + rmem[0x7] = rmem[0x6] = rmem[0x5] = rmem[0x4] = romdata[1]; + } else + setOamDmaSrc(); +} + +void Memory::setRambank() { + rmem[0xB] = rmem[0xA] = rsrambankptr = rdisabled_ram - 0xA000; + wmem[0xB] = wmem[0xA] = wsrambankptr = wdisabled_ram - 0xA000; + + if (enable_ram) { + if (rtc.getActive()) { + wmem[0xB] = wmem[0xA] = rmem[0xB] = rmem[0xA] = wsrambankptr = rsrambankptr = NULL; + } else if (rambanks) { + wmem[0xB] = rmem[0xB] = wmem[0xA] = rmem[0xA] = wsrambankptr = rsrambankptr = rambankdata + rambank * 0x2000ul - 0xA000; + } + } + + if (oamDmaArea1Lower == 0xA0) { + wmem[0xB] = wmem[0xA] = rmem[0xB] = rmem[0xA] = NULL; + setOamDmaSrc(); + } +} + +void Memory::setBanks() { + rmem[0x3] = rmem[0x2] = rmem[0x1] = rmem[0x0] = romdata[0]; + + setRombank(); + setRambank(); + + rmem[0xC] = wmem[0xC] = wramdata[0] - 0xC000; + rmem[0xD] = wmem[0xD] = wramdata[1] - 0xD000; + rmem[0xE] = wmem[0xE] = wramdata[0] - 0xE000; +} + +void Memory::updateOamDma(const unsigned long cycleCounter) { + unsigned cycles = (cycleCounter - lastOamDmaUpdate) >> 2; + + while (cycles--) { + oamDmaPos = (oamDmaPos + 1) & 0xFF; + lastOamDmaUpdate += 4; + + //TODO: reads from vram while the ppu is reading vram should return whatever the ppu is reading. + if (oamDmaPos < 0xA0) { + if (oamDmaPos == 0) + startOamDma(lastOamDmaUpdate - 2); + + ioamhram[oamDmaPos] = oamDmaSrc ? oamDmaSrc[oamDmaPos] : *rtc.getActive(); + } else if (oamDmaPos == 0xA0) { + endOamDma(lastOamDmaUpdate - 2); + lastOamDmaUpdate = COUNTER_DISABLED; + break; + } + } +} + +void Memory::setOamDmaArea() { + if (ioamhram[0x146] < 0xC0) { + if ((ioamhram[0x146] & 0xE0) != 0x80) + oamDmaArea2Upper = 0x80; + + oamDmaArea1Width = 0x20; + } else if (ioamhram[0x146] < 0xE0) + oamDmaArea1Width = 0x3E; +} + +void Memory::oamDmaInitSetup() { + if (ioamhram[0x146] < 0xC0) { + if ((ioamhram[0x146] & 0xE0) == 0x80) { + oamDmaArea1Lower = 0x80; + } else { + oamDmaArea1Lower = 0xA0; + std::fill_n(rmem, 0x8, static_cast(NULL)); + rmem[0xB] = rmem[0xA] = NULL; + wmem[0xB] = wmem[0xA] = NULL; + } + } else if (ioamhram[0x146] < 0xE0) { + oamDmaArea1Lower = 0xC0; + rmem[0xE] = rmem[0xD] = rmem[0xC] = NULL; + wmem[0xE] = wmem[0xD] = wmem[0xC] = NULL; + } +} + +void Memory::setOamDmaSrc() { + oamDmaSrc = NULL; + + if (ioamhram[0x146] < 0xC0) { + if ((ioamhram[0x146] & 0xE0) == 0x80) { + oamDmaSrc = vrambank + (ioamhram[0x146] << 8 & 0x1FFF); + } else { + if (ioamhram[0x146] < 0x80) + oamDmaSrc = romdata[ioamhram[0x146] >> 6] + (ioamhram[0x146] << 8); + else if (rsrambankptr) + oamDmaSrc = rsrambankptr + (ioamhram[0x146] << 8); + } + } else if (ioamhram[0x146] < 0xE0) { + oamDmaSrc = wramdata[ioamhram[0x146] >> 4 & 1] + (ioamhram[0x146] << 8 & 0xFFF); + } else + oamDmaSrc = rdisabled_ram; +} + +void Memory::startOamDma(const unsigned long cycleCounter) { + setOamDmaArea(); + display.oamChange(rdisabled_ram, cycleCounter); + + if (next_unhalttime != COUNTER_DISABLED) + schedule_unhalt(); + else + rescheduleIrq(cycleCounter); + + rescheduleHdmaReschedule(); +} + +void Memory::endOamDma(const unsigned long cycleCounter) { + oamDmaArea2Upper = oamDmaArea1Width = oamDmaArea1Lower = 0; + oamDmaPos = 0xFE; + setBanks(); + display.oamChange(ioamhram, cycleCounter); + + if (next_unhalttime != COUNTER_DISABLED) + schedule_unhalt(); + else + rescheduleIrq(cycleCounter); + + rescheduleHdmaReschedule(); +} + +void Memory::update_tima(const unsigned long cycleCounter) { + const unsigned long ticks = (cycleCounter - tima_lastUpdate) >> timaClock[ioamhram[0x107] & 3]; + + tima_lastUpdate += ticks << timaClock[ioamhram[0x107] & 3]; + + if (cycleCounter >= tmatime) { + if (cycleCounter >= tmatime + 4) + tmatime = COUNTER_DISABLED; + + ioamhram[0x105] = ioamhram[0x106]; + } + + unsigned long tmp = ioamhram[0x105] + ticks; + + while (tmp > 0x100) + tmp -= 0x100 - ioamhram[0x106]; + + if (tmp == 0x100) { + tmp = 0; + tmatime = tima_lastUpdate + 3; + + if (cycleCounter >= tmatime) { + if (cycleCounter >= tmatime + 4) + tmatime = COUNTER_DISABLED; + + tmp = ioamhram[0x106]; + } + } + + ioamhram[0x105] = tmp; +} + +unsigned Memory::nontrivial_ff_read(const unsigned P, const unsigned long cycleCounter) { + if (lastOamDmaUpdate != COUNTER_DISABLED) + updateOamDma(cycleCounter); + + switch (P & 0x7F) { + case 0x00: + updateInput(); + break; + case 0x04: +// printf("div read\n"); + { + const unsigned long divcycles = (cycleCounter - div_lastUpdate) >> 8; + ioamhram[0x104] = (ioamhram[0x104] + divcycles) & 0xFF; + div_lastUpdate += divcycles << 8; + } + + break; + case 0x05: +// printf("tima read\n"); + if (ioamhram[0x107] & 0x04) + update_tima(cycleCounter); + + break; + case 0x0F: + update_irqEvents(cycleCounter); + ioamhram[0x10F] |= display.getIfReg(cycleCounter) & 3; +// rescheduleIrq(cycleCounter); + break; + case 0x26: +// printf("sound status read\n"); + if (ioamhram[0x126] & 0x80) { + sound.generate_samples(cycleCounter, isDoubleSpeed()); + ioamhram[0x126] = 0xF0 | sound.getStatus(); + } else + ioamhram[0x126] = 0x70; + + break; + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + case 0x38: + case 0x39: + case 0x3A: + case 0x3B: + case 0x3C: + case 0x3D: + case 0x3E: + case 0x3F: + sound.generate_samples(cycleCounter, isDoubleSpeed()); + return sound.waveRamRead(P & 0xF); + case 0x41: + return ioamhram[0x141] | display.get_stat(ioamhram[0x145], cycleCounter); + case 0x44: + return display.getLyReg(cycleCounter/*+4*/); + case 0x69: + return display.cgbBgColorRead(ioamhram[0x168] & 0x3F, cycleCounter); + case 0x6B: + return display.cgbSpColorRead(ioamhram[0x16A] & 0x3F, cycleCounter); + default: break; + } + + return ioamhram[P - 0xFE00]; +} + +unsigned Memory::nontrivial_read(const unsigned P, const unsigned long cycleCounter) { + if (P < 0xFF80) { + if (lastOamDmaUpdate != COUNTER_DISABLED) { + updateOamDma(cycleCounter); + + if ((P >> 8) - oamDmaArea1Lower < oamDmaArea1Width || P >> 8 < oamDmaArea2Upper) + return ioamhram[oamDmaPos]; + } + + if (P < 0xC000) { + if (P < 0x8000) + return romdata[P >> 14][P]; + + if (P < 0xA000) { + if (!display.vramAccessible(cycleCounter)) + return 0xFF; + + return vrambank[P & 0x1FFF]; + } + + if (rsrambankptr) + return rsrambankptr[P]; + + return *rtc.getActive(); + } + + if (P < 0xFE00) + return wramdata[P >> 12 & 1][P & 0xFFF]; + + if (P & 0x100) + return nontrivial_ff_read(P, cycleCounter); + + if (!display.oamAccessible(cycleCounter) || oamDmaPos < 0xA0) + return 0xFF; + } + + return ioamhram[P - 0xFE00]; +} + +void Memory::nontrivial_ff_write(const unsigned P, unsigned data, const unsigned long cycleCounter) { +// printf("mem[0x%X] = 0x%X\n", P, data); + + if (lastOamDmaUpdate != COUNTER_DISABLED) + updateOamDma(cycleCounter); + + switch (P & 0xFF) { + case 0x00: + data = (ioamhram[0x100] & 0xCF) | (data & 0xF0); + supergameboy.joyp_write(data & 0x20, data & 0x10); + break; + case 0x01: + update_irqEvents(cycleCounter); + break; + case 0x02: + update_irqEvents(cycleCounter); + + if ((data & 0x81) == 0x81) { + next_serialtime = cycleCounter; + next_serialtime += (isCgb() && (data & 0x2)) ? 128 : 4096; + set_irqEvent(); + } + + rescheduleIrq(cycleCounter); + data |= 0x7C; + break; + //If rom is trying to write to DIV register, reset it to 0. + case 0x04: +// printf("DIV write\n"); + ioamhram[0x104] = 0; + div_lastUpdate = cycleCounter; + return; + case 0x05: + // printf("tima write\n"); + if (ioamhram[0x107] & 0x04) { + update_irqEvents(cycleCounter); + update_tima(cycleCounter); + + if (tmatime - cycleCounter < 4) + tmatime = COUNTER_DISABLED; + + next_timatime = tima_lastUpdate + ((256u - data) << timaClock[ioamhram[0x107] & 3]) + 1; + set_irqEvent(); + rescheduleIrq(cycleCounter); + } + + break; + case 0x06: + if (ioamhram[0x107] & 0x04) { + update_irqEvents(cycleCounter); + update_tima(cycleCounter); + } + + break; + case 0x07: + // printf("tac write: %i\n", data); + data |= 0xF8; + + if (ioamhram[0x107] ^ data) { + if (ioamhram[0x107] & 0x04) { + update_irqEvents(cycleCounter); + update_tima(cycleCounter); + + tima_lastUpdate -= (1u << (timaClock[ioamhram[0x107] & 3] - 1)) + 3; + tmatime -= (1u << (timaClock[ioamhram[0x107] & 3] - 1)) + 3; + next_timatime -= (1u << (timaClock[ioamhram[0x107] & 3] - 1)) + 3; + set_irqEvent(); + update_tima(cycleCounter); + update_irqEvents(cycleCounter); + + tmatime = COUNTER_DISABLED; + next_timatime = COUNTER_DISABLED; + } + + if (data & 4) { + tima_lastUpdate = (cycleCounter >> timaClock[data & 3]) << timaClock[data & 3]; + next_timatime = tima_lastUpdate + ((256u - ioamhram[0x105]) << timaClock[data & 3]) + 1; + } + + set_irqEvent(); + rescheduleIrq(cycleCounter); + } + + break; + case 0x0F: + update_irqEvents(cycleCounter); + display.setIfReg(data, cycleCounter); + ioamhram[0x10F] = 0xE0 | data; + rescheduleIrq(cycleCounter); + return; + case 0x10: + if(!sound.isEnabled()) return; + sound.generate_samples(cycleCounter, isDoubleSpeed()); + sound.set_nr10(data); + data |= 0x80; + break; + case 0x11: + if(!sound.isEnabled()) { + if (isCgb()) + return; + + data &= 0x3F; + } + + sound.generate_samples(cycleCounter, isDoubleSpeed()); + sound.set_nr11(data); + data |= 0x3F; + break; + case 0x12: + if(!sound.isEnabled()) return; + sound.generate_samples(cycleCounter, isDoubleSpeed()); + sound.set_nr12(data); + break; + case 0x13: + if(!sound.isEnabled()) return; + sound.generate_samples(cycleCounter, isDoubleSpeed()); + sound.set_nr13(data); + return; + case 0x14: + if(!sound.isEnabled()) return; + sound.generate_samples(cycleCounter, isDoubleSpeed()); + sound.set_nr14(data); + data |= 0xBF; + break; + case 0x16: + if(!sound.isEnabled()) { + if (isCgb()) + return; + + data &= 0x3F; + } + + sound.generate_samples(cycleCounter, isDoubleSpeed()); + sound.set_nr21(data); + data |= 0x3F; + break; + case 0x17: + if(!sound.isEnabled()) return; + sound.generate_samples(cycleCounter, isDoubleSpeed()); + sound.set_nr22(data); + break; + case 0x18: + if(!sound.isEnabled()) return; + sound.generate_samples(cycleCounter, isDoubleSpeed()); + sound.set_nr23(data); + return; + case 0x19: + if(!sound.isEnabled()) return; + sound.generate_samples(cycleCounter, isDoubleSpeed()); + sound.set_nr24(data); + data |= 0xBF; + break; + case 0x1A: + if(!sound.isEnabled()) return; + sound.generate_samples(cycleCounter, isDoubleSpeed()); + sound.set_nr30(data); + data |= 0x7F; + break; + case 0x1B: + if(!sound.isEnabled() && isCgb()) return; + sound.generate_samples(cycleCounter, isDoubleSpeed()); + sound.set_nr31(data); + return; + case 0x1C: + if(!sound.isEnabled()) return; + sound.generate_samples(cycleCounter, isDoubleSpeed()); + sound.set_nr32(data); + data |= 0x9F; + break; + case 0x1D: + if(!sound.isEnabled()) return; + sound.generate_samples(cycleCounter, isDoubleSpeed()); + sound.set_nr33(data); + return; + case 0x1E: + if(!sound.isEnabled()) return; + sound.generate_samples(cycleCounter, isDoubleSpeed()); + sound.set_nr34(data); + data |= 0xBF; + break; + case 0x20: + if(!sound.isEnabled() && isCgb()) return; + sound.generate_samples(cycleCounter, isDoubleSpeed()); + sound.set_nr41(data); + return; + case 0x21: + if(!sound.isEnabled()) return; + sound.generate_samples(cycleCounter, isDoubleSpeed()); + sound.set_nr42(data); + break; + case 0x22: + if(!sound.isEnabled()) return; + sound.generate_samples(cycleCounter, isDoubleSpeed()); + sound.set_nr43(data); + break; + case 0x23: + if(!sound.isEnabled()) return; + sound.generate_samples(cycleCounter, isDoubleSpeed()); + sound.set_nr44(data); + data |= 0xBF; + break; + case 0x24: + if(!sound.isEnabled()) return; + sound.generate_samples(cycleCounter, isDoubleSpeed()); + sound.set_so_volume(data); + break; + case 0x25: + if(!sound.isEnabled()) return; + sound.generate_samples(cycleCounter, isDoubleSpeed()); + sound.map_so(data); + break; + case 0x26: + if ((ioamhram[0x126] ^ data) & 0x80) { + sound.generate_samples(cycleCounter, isDoubleSpeed()); + + if (!(data & 0x80)) { + for (unsigned i = 0xFF10; i < 0xFF26; ++i) + ff_write(i, 0, cycleCounter); + +// std::memcpy(memory + 0xFF10, soundRegInitValues, sizeof(soundRegInitValues)); + sound.setEnabled(false); + } else { + sound.reset(/*memory + 0xFF00, isDoubleSpeed()*/); + sound.setEnabled(true); + } + } + + data = (data & 0x80) | (ioamhram[0x126] & 0x7F); + break; + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + case 0x38: + case 0x39: + case 0x3A: + case 0x3B: + case 0x3C: + case 0x3D: + case 0x3E: + case 0x3F: + sound.generate_samples(cycleCounter, isDoubleSpeed()); + sound.waveRamWrite(P & 0xF, data); + break; + case 0x40: + if (ioamhram[0x140] != data) { + if ((ioamhram[0x140] ^ data) & 0x80) { + update_irqEvents(cycleCounter); + const unsigned lyc = display.get_stat(ioamhram[0x145], cycleCounter) & 4; + display.enableChange(cycleCounter); + ioamhram[0x144] = 0; +// enable_display = bool(data & 0x80); + ioamhram[0x141] &= 0xF8; + + if (data & 0x80) { + next_blittime = display.nextMode1IrqTime() + (70224 << isDoubleSpeed()); + } else { + ioamhram[0x141] |= lyc; //Mr. Do! needs conicidence flag preserved. + next_blittime = cycleCounter + (456 * 4 << isDoubleSpeed()); + + if (hdma_transfer) + next_dmatime = cycleCounter; + + next_hdmaReschedule = COUNTER_DISABLED; + } + + set_event(); + } + + if ((ioamhram[0x140] ^ data) & 0x4) { + display.spriteSizeChange(data & 0x4, cycleCounter); + } + + if ((ioamhram[0x140] ^ data) & 0x20) { +// printf("%u: weChange to %u\n", CycleCounter, (data & 0x20) != 0); + display.weChange(data & 0x20, cycleCounter); + } + + if ((ioamhram[0x140] ^ data) & 0x40) + display.wdTileMapSelectChange(data & 0x40, cycleCounter); + + if ((ioamhram[0x140] ^ data) & 0x08) + display.bgTileMapSelectChange(data & 0x08, cycleCounter); + + if ((ioamhram[0x140] ^ data) & 0x10) + display.bgTileDataSelectChange(data & 0x10, cycleCounter); + + if ((ioamhram[0x140] ^ data) & 0x02) + display.spriteEnableChange(data & 0x02, cycleCounter); + + if ((ioamhram[0x140] ^ data) & 0x01) + display.bgEnableChange(data & 0x01, cycleCounter); + + ioamhram[0x140] = data; + rescheduleIrq(cycleCounter); + rescheduleHdmaReschedule(); + } + + return; + case 0x41: + display.lcdstatChange(data, cycleCounter); + rescheduleIrq(cycleCounter); + data = (ioamhram[0x141] & 0x87) | (data & 0x78); + break; + case 0x42: + display.scyChange(data, cycleCounter); + break; + case 0x43: + display.scxChange(data, cycleCounter); + rescheduleIrq(cycleCounter); + rescheduleHdmaReschedule(); + break; + //If rom is trying to write to LY register, reset it to 0. + case 0x44: + if (ioamhram[0x140] & 0x80) { + std::printf("ly write\n"); + display.lyWrite(cycleCounter); + rescheduleIrq(cycleCounter); + rescheduleHdmaReschedule(); + } + + return; + case 0x45: + display.lycRegChange(data, cycleCounter); + rescheduleIrq(cycleCounter); + break; + case 0x46: + if (lastOamDmaUpdate != COUNTER_DISABLED) + endOamDma(cycleCounter); + + lastOamDmaUpdate = cycleCounter; + nextOamEventTime = cycleCounter + 8; + ioamhram[0x146] = data; + oamDmaInitSetup(); + setOamDmaSrc(); + return; + case 0x47: + if (!isCgb()) { + display.dmgBgPaletteChange(data, cycleCounter); + } + + break; + case 0x48: + if (!isCgb()) { + display.dmgSpPalette1Change(data, cycleCounter); + } + + break; + case 0x49: + if (!isCgb()) { + display.dmgSpPalette2Change(data, cycleCounter); + } + + break; + case 0x4A: +// printf("%u: wyChange to %u\n", CycleCounter, data); + display.wyChange(data, cycleCounter); + rescheduleIrq(cycleCounter); + rescheduleHdmaReschedule(); + break; + case 0x4B: +// printf("%u: wxChange to %u\n", CycleCounter, data); + display.wxChange(data, cycleCounter); + rescheduleIrq(cycleCounter); + rescheduleHdmaReschedule(); + break; + + //cgb stuff: + case 0x4D: + ioamhram[0x14D] |= data & 0x01; + return; + //Select vram bank + case 0x4F: + if (isCgb()) { + vrambank = vram + (data & 0x01) * 0x2000; + + if (oamDmaArea1Lower == 0x80) + setOamDmaSrc(); + + ioamhram[0x14F] = 0xFE | data; + } + + return; + case 0x51: + dmaSource = data << 8 | (dmaSource & 0xFF); + return; + case 0x52: + dmaSource = (dmaSource & 0xFF00) | (data & 0xF0); + return; + case 0x53: + dmaDestination = data << 8 | (dmaDestination & 0xFF); + return; + case 0x54: + dmaDestination = (dmaDestination & 0xFF00) | (data & 0xF0); + return; + case 0x55: + if (!isCgb()) + return; + + ioamhram[0x155] = data & 0x7F; + + if (hdma_transfer) { + if (!(data & 0x80)) { + ioamhram[0x155] |= 0x80; + + if (next_dmatime > cycleCounter) { + hdma_transfer = 0; + next_hdmaReschedule = next_dmatime = COUNTER_DISABLED; + set_event(); + } + } + + return; + } + + if (data & 0x80) { + hdma_transfer = 1; + + if (!(ioamhram[0x140] & 0x80) || display.isHdmaPeriod(cycleCounter)) { + next_dmatime = cycleCounter; + next_hdmaReschedule = COUNTER_DISABLED; + } else { + next_dmatime = display.nextHdmaTime(cycleCounter); + next_hdmaReschedule = display.nextHdmaTimeInvalid(); + } + } else + next_dmatime = cycleCounter; + + set_event(); + return; + case 0x56: + if (isCgb()) { + ioamhram[0x156] = data | 0x3E; + } + + return; + //Set bg palette index + case 0x68: + if (isCgb()) + ioamhram[0x168] = data | 0x40; + + return; + //Write to bg palette data + case 0x69: + if (isCgb()) { + const unsigned index = ioamhram[0x168] & 0x3F; + + display.cgbBgColorChange(index, data, cycleCounter); + + ioamhram[0x168] = (ioamhram[0x168] & ~0x3F) | ((index + (ioamhram[0x168] >> 7)) & 0x3F); + } + + return; + case 0x6A: + if (isCgb()) + ioamhram[0x16A] = data | 0x40; + + return; + //Write to obj palette data. + case 0x6B: + if (isCgb()) { + const unsigned index = ioamhram[0x16A] & 0x3F; + + display.cgbSpColorChange(index, data, cycleCounter); + + ioamhram[0x16A] = (ioamhram[0x16A] & ~0x3F) | ((index + (ioamhram[0x16A] >> 7)) & 0x3F); + } + + return; + case 0x6C: + if (isCgb()) + ioamhram[0x16C] = data | 0xFE; + + return; + case 0x70: + if (isCgb()) { + wramdata[1] = wramdata[0] + ((data & 0x07) ? (data & 0x07) : 1) * 0x1000; + + if (oamDmaArea1Lower == 0xC0) + setOamDmaSrc(); + else + wmem[0xD] = rmem[0xD] = wramdata[1] - 0xD000; + + ioamhram[0x170] = data | 0xF8; + } + + return; + case 0x72: + case 0x73: + case 0x74: + if (isCgb()) + break; + + return; + case 0x75: + if (isCgb()) + ioamhram[0x175] = data | 0x8F; + + return; + case 0xFF: + ioamhram[0x1FF] = data; + rescheduleIrq(cycleCounter); + return; + default: +// if (P < 0xFF80) + return; + } + + ioamhram[P - 0xFE00] = data; +} + +void Memory::mbc_write(const unsigned P, const unsigned data) { +// printf("mem[0x%X] = 0x%X\n", P, data); + + switch (P >> 12 & 0x7) { + case 0x0: + case 0x1: //Most MBCs write 0x?A to addresses lower than 0x2000 to enable ram. + if (romtype == mbc2 && (P & 0x0100)) break; + + enable_ram = (data & 0x0F) == 0xA; + + if (rtcRom) + rtc.setEnabled(enable_ram); + + setRambank(); + break; + //MBC1 writes ???n nnnn to address area 0x2000-0x3FFF, ???n nnnn makes up the lower digits to determine which rombank to load. + //MBC3 writes ?nnn nnnn to address area 0x2000-0x3FFF, ?nnn nnnn makes up the lower digits to determine which rombank to load. + //MBC5 writes nnnn nnnn to address area 0x2000-0x2FFF, nnnn nnnn makes up the lower digits to determine which rombank to load. + //MBC5 writes bit8 of the number that determines which rombank to load to address 0x3000-0x3FFF. + case 0x2: + switch (romtype) { + case plain: + return; + case mbc5: + rombank = (rombank & 0x100) | data; + rombank = rombank & (rombanks - 1); + setRombank(); + return; + default: + break; //Only supposed to break one level. + } + case 0x3: + switch (romtype) { + case mbc1: + rombank = rambank_mode ? data & 0x1F : ((rombank & 0x60) | (data & 0x1F)); + break; + case mbc2: + if (P & 0x0100) { + rombank = data & 0x0F; + break; + } + + return; + case mbc3: + rombank = data & 0x7F; + break; + case mbc5: + rombank = (data & 0x1) << 8 | (rombank & 0xFF); + break; + default: + return; + } + + rombank = rombank & (rombanks - 1); + setRombank(); + break; + //MBC1 writes ???? ??nn to area 0x4000-0x5FFF either to determine rambank to load, or upper 2 bits of the rombank number to load, depending on rom-mode. + //MBC3 writes ???? ??nn to area 0x4000-0x5FFF to determine rambank to load + //MBC5 writes ???? nnnn to area 0x4000-0x5FFF to determine rambank to load + case 0x4: + case 0x5: + switch (romtype) { + case mbc1: + if (rambank_mode) { + rambank = data & 0x03; + break; + } + + rombank = (data & 0x03) << 5 | (rombank & 0x1F); + rombank = rombank & (rombanks - 1); + setRombank(); + return; + case mbc3: + if (rtcRom) + rtc.swapActive(data); + + rambank = data & 0x03; + break; + case mbc5: + rambank = data & 0x0F; + break; + default: + return; + } + + rambank &= rambanks - 1; + setRambank(); + break; + //MBC1: If ???? ???1 is written to area 0x6000-0x7FFFF rom will be set to rambank mode. + case 0x6: + case 0x7: + switch (romtype) { + case mbc1: + rambank_mode = data & 0x01; + break; + case mbc3: + rtc.latch(data); + break; + default: + break; + } + + break; +// default: break; + } +} + +void Memory::nontrivial_write(const unsigned P, const unsigned data, const unsigned long cycleCounter) { + if (lastOamDmaUpdate != COUNTER_DISABLED) { + updateOamDma(cycleCounter); + + if ((P >> 8) - oamDmaArea1Lower < oamDmaArea1Width || P >> 8 < oamDmaArea2Upper) { + ioamhram[oamDmaPos] = data; + return; + } + } + + if (P < 0xFE00) { + if (P < 0xA000) { + if (P < 0x8000) { + mbc_write(P, data); + } else if (display.vramAccessible(cycleCounter)) { + display.vramChange(cycleCounter); + vrambank[P & 0x1FFF] = data; + } + } else if (P < 0xC000) { + if (wsrambankptr) + wsrambankptr[P] = data; + else + rtc.write(data); + } else + wramdata[P >> 12 & 1][P & 0xFFF] = data; + } else if (((P + 1) & 0xFFFF) < 0xFF81) { + if (P < 0xFF00) { + if (display.oamAccessible(cycleCounter) && oamDmaPos >= 0xA0) { + display.oamChange(cycleCounter); + rescheduleIrq(cycleCounter); + rescheduleHdmaReschedule(); + ioamhram[P - 0xFE00] = data; + } + } else + nontrivial_ff_write(P, data, cycleCounter); + } else + ioamhram[P - 0xFE00] = data; +} + +static const std::string stripExtension(const std::string &str) { + const std::string::size_type lastDot = str.find_last_of('.'); + const std::string::size_type lastSlash = str.find_last_of('/'); + + if (lastDot != std::string::npos && (lastSlash == std::string::npos || lastSlash < lastDot)) + return str.substr(0, lastDot); + + return str; +} + +static const std::string stripDir(const std::string &str) { + const std::string::size_type lastSlash = str.find_last_of('/'); + + if (lastSlash != std::string::npos) + return str.substr(lastSlash + 1); + + return str; +} + +const std::string Memory::saveBasePath() const { + return saveDir.empty() ? defaultSaveBasePath : saveDir + stripDir(defaultSaveBasePath); +} + +void Memory::set_savedir(const char *dir) { + saveDir = dir ? dir : ""; + + if (!saveDir.empty() && saveDir[saveDir.length() - 1] != '/') { + saveDir += '/'; + } +} + +static void enforce8bit(unsigned char *data, unsigned long sz) { + if (static_cast(0x100)) + while (sz--) + *data++ &= 0xFF; +} + +static unsigned pow2ceil(unsigned n) { + --n; + n |= n >> 1; + n |= n >> 2; + n |= n >> 4; + n |= n >> 8; + ++n; + + return n; +} + +bool Memory::loadROM(const bool forceDmg) { + defaultSaveBasePath = ""; + + { + unsigned char *header = (unsigned char*)supergameboy.romdata; + + cgb = header[0x0143] >> 7 & 1; + + if (cgb & forceDmg) { + cgb = false; + defaultSaveBasePath += "_dmg"; + } + + switch (header[0x0147]) { + case 0x00: std::printf("Plain ROM loaded.\n"); + romtype = plain; + break; + case 0x01: std::printf("MBC1 ROM loaded.\n"); + romtype = mbc1; + break; + case 0x02: std::printf("MBC1 ROM+RAM loaded.\n"); + romtype = mbc1; + break; + case 0x03: std::printf("MBC1 ROM+RAM+BATTERY loaded.\n"); + romtype = mbc1; + battery = 1; + break; + case 0x05: std::printf("MBC2 ROM loaded.\n"); + romtype = mbc2; + break; + case 0x06: std::printf("MBC2 ROM+BATTERY loaded.\n"); + romtype = mbc2; + battery = 1; + break; + case 0x08: std::printf("Plain ROM with additional RAM loaded.\n"); + break; + case 0x09: std::printf("Plain ROM with additional RAM and Battery loaded.\n"); + battery = 1; + break; + case 0x0B: /*cout << "MM01 ROM not supported.\n";*/ + return 1; + break; + case 0x0C: /*cout << "MM01 ROM not supported.\n";*/ + return 1; + break; + case 0x0D: /*cout << "MM01 ROM not supported.\n";*/ + return 1; + break; + case 0x0F: std::printf("MBC3 ROM+TIMER+BATTERY loaded.\n"); + romtype = mbc3; + battery = true; + rtcRom = true; + break; + case 0x10: std::printf("MBC3 ROM+TIMER+RAM+BATTERY loaded.\n"); + romtype = mbc3; + battery = true; + rtcRom = true; + break; + case 0x11: std::printf("MBC3 ROM loaded.\n"); + romtype = mbc3; + break; + case 0x12: std::printf("MBC3 ROM+RAM loaded.\n"); + romtype = mbc3; + break; + case 0x13: std::printf("MBC3 ROM+RAM+BATTERY loaded.\n"); + romtype = mbc3; + battery = 1; + break; + case 0x15: /*cout << "MBC4 ROM not supported.\n";*/ + return 1; + break; + case 0x16: /*cout << "MBC4 ROM not supported.\n";*/ + return 1; + break; + case 0x17: /*cout << "MBC4 ROM not supported.\n";*/ + return 1; + break; + case 0x19: std::printf("MBC5 ROM loaded.\n"); + romtype = mbc5; + break; + case 0x1A: std::printf("MBC5 ROM+RAM loaded.\n"); + romtype = mbc5; + break; + case 0x1B: std::printf("MBC5 ROM+RAM+BATTERY loaded.\n"); + romtype = mbc5; + battery = 1; + break; + case 0x1C: std::printf("MBC5+RUMLE ROM not supported.\n"); + romtype = mbc5; + break; + case 0x1D: std::printf("MBC5+RUMLE+RAM ROM not suported.\n"); + romtype = mbc5; + break; + case 0x1E: std::printf("MBC5+RUMLE+RAM+BATTERY ROM not supported.\n"); + romtype = mbc5; + battery = 1; + break; + case 0xFC: /*cout << "Pocket Camera ROM not supported.\n";*/ + return 1; + break; + case 0xFD: /*cout << "Bandai TAMA5 ROM not supported.\n";*/ + return 1; + break; + case 0xFE: /*cout << "HuC3 ROM not supported.\n";*/ + return 1; + break; + case 0xFF: /*cout << "HuC1 ROM not supported.\n";*/ + return 1; + break; + default: /*cout << "Wrong data-format, corrupt or unsupported ROM loaded.\n";*/ + return 1; + } + + /*switch (header[0x0148]) { + case 0x00: + rombanks = 2; + break; + case 0x01: + rombanks = 4; + break; + case 0x02: + rombanks = 8; + break; + case 0x03: + rombanks = 16; + break; + case 0x04: + rombanks = 32; + break; + case 0x05: + rombanks = 64; + break; + case 0x06: + rombanks = 128; + break; + case 0x07: + rombanks = 256; + break; + case 0x08: + rombanks = 512; + break; + case 0x52: + rombanks = 72; + break; + case 0x53: + rombanks = 80; + break; + case 0x54: + rombanks = 96; + break; + default: + return 1; + } + + printf("rombanks: %u\n", rombanks);*/ + + switch (header[0x0149]) { + case 0x00: /*cout << "No RAM\n";*/ rambanks = romtype == mbc2; break; + case 0x01: /*cout << "2kB RAM\n";*/ /*rambankrom=1; break;*/ + case 0x02: /*cout << "8kB RAM\n";*/ + rambanks = 1; + break; + case 0x03: /*cout << "32kB RAM\n";*/ + rambanks = 4; + break; + case 0x04: /*cout << "128kB RAM\n";*/ + rambanks = 16; + break; + case 0x05: /*cout << "undocumented kB RAM\n";*/ + rambanks = 16; + break; + default: /*cout << "Wrong data-format, corrupt or unsupported ROM loaded.\n";*/ + rambanks = 16; + break; + } + } + + std::printf("rambanks: %u\n", rambanks); + + rombanks = pow2ceil(supergameboy.romsize / 0x4000); + std::printf("rombanks: %u\n", supergameboy.romsize / 0x4000); + + delete []memchunk; + memchunk = new unsigned char[0x4000 + rombanks * 0x4000ul + rambanks * 0x2000ul + (isCgb() ? 0x8000 : 0x2000) + 0x4000]; + + romdata[0] = memchunk + 0x4000; + rambankdata = romdata[0] + rombanks * 0x4000ul; + wramdata[0] = rambankdata + rambanks * 0x2000; + rdisabled_ram = wramdata[0] + (isCgb() ? 0x8000 : 0x2000); + wdisabled_ram = rdisabled_ram + 0x2000; + + wramdata[1] = wramdata[0] + 0x1000; + std::memset(rdisabled_ram, 0xFF, 0x2000); + + memcpy((char*)romdata[0], supergameboy.romdata, (supergameboy.romsize / 0x4000) * 0x4000ul); + // In case rombanks isn't a power of 2, allocate a disabled area for invalid rombank addresses. This is only based on speculation. + std::memset(romdata[0] + (supergameboy.romsize / 0x4000) * 0x4000ul, 0xFF, (rombanks - supergameboy.romsize / 0x4000) * 0x4000ul); + enforce8bit(romdata[0], rombanks * 0x4000ul); + + sound.init(isCgb()); + display.reset(ioamhram, isCgb()); + + return 0; +} + +void Memory::loadSavedata() { + if (battery) { + if (supergameboy.ramdata) { + memcpy((char*)rambankdata, supergameboy.ramdata, std::min(supergameboy.ramsize, (unsigned int)(rambanks * 0x2000ul))); + enforce8bit(rambankdata, rambanks * 0x2000ul); + } + } + + if (rtcRom) { + if (supergameboy.rtcdata && supergameboy.rtcsize >= 4) { + unsigned long basetime = 0; + + basetime = basetime << 8 | (supergameboy.rtcdata[0]); + basetime = basetime << 8 | (supergameboy.rtcdata[1]); + basetime = basetime << 8 | (supergameboy.rtcdata[2]); + basetime = basetime << 8 | (supergameboy.rtcdata[3]); + + rtc.setBaseTime(basetime); + } + } +} + +void Memory::saveSavedata() { + if (battery) { + if (supergameboy.ramdata) { + memcpy(supergameboy.ramdata, (char*)rambankdata, std::min(supergameboy.ramsize, (unsigned int)(rambanks * 0x2000ul))); + } + } + + if (rtcRom) { + if (supergameboy.rtcdata && supergameboy.rtcsize >= 4) { + const unsigned long basetime = rtc.getBaseTime(); + + supergameboy.rtcdata[0] = basetime >> 24; + supergameboy.rtcdata[1] = basetime >> 16; + supergameboy.rtcdata[2] = basetime >> 8; + supergameboy.rtcdata[3] = basetime >> 0; + } + } +} + +unsigned Memory::fillSoundBuffer(const unsigned long cycleCounter) { + sound.generate_samples(cycleCounter, isDoubleSpeed()); + return sound.fillBuffer(); +} + +void Memory::setVideoBlitter(Gambatte::VideoBlitter *const vb) { + display.setVideoBlitter(vb); +} + +void Memory::videoBufferChange() { + display.videoBufferChange(); +} + +void Memory::setVideoFilter(const unsigned int n) { + display.setVideoFilter(n); +} + +void Memory::setDmgPaletteColor(unsigned palNum, unsigned colorNum, unsigned long rgb32) { + display.setDmgPaletteColor(palNum, colorNum, rgb32); +} + +Memory::~Memory() { + saveSavedata(); + + delete []memchunk; +} diff --git a/supergameboy/libgambatte/src/memory.h b/supergameboy/libgambatte/src/memory.h new file mode 100644 index 00000000..eb9f3197 --- /dev/null +++ b/supergameboy/libgambatte/src/memory.h @@ -0,0 +1,238 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef MEMORY_H +#define MEMORY_H + +class SaveState; + +#include "int.h" +#include "video.h" +#include "sound.h" + +#include "interrupter.h" +#include "rtc.h" +#include + +namespace Gambatte { +class InputStateGetter; +class FilterInfo; +} + +class Memory { +public: + enum { COUNTER_DISABLED = 0xFFFFFFFFu }; + +private: + enum cartridgetype { plain, mbc1, mbc2, mbc3, mbc5 }; + enum events { HDMA_RESCHEDULE, DMA, INTERRUPTS, BLIT, UNHALT, OAM, END }; + enum irqEvents { /*MODE0, MODE1, MODE2, LYC,*/ TIMA, /*M0RESC,*/ SERIAL }; + + unsigned char ioamhram[0x200]; + unsigned char vram[0x2000 * 2]; + unsigned char *rmem[0x10]; + unsigned char *wmem[0x10]; + + unsigned char *memchunk; + unsigned char *romdata[2]; + unsigned char *wramdata[2]; + unsigned char *rambankdata; + unsigned char *rdisabled_ram; + unsigned char *wdisabled_ram; + unsigned char *oamDmaSrc; + unsigned char *vrambank; + unsigned char *rsrambankptr; + unsigned char *wsrambankptr; + + Gambatte::InputStateGetter *getInput; + + unsigned long div_lastUpdate; + unsigned long tima_lastUpdate; + unsigned long next_timatime; + unsigned long next_blittime; + unsigned long nextIntTime; + unsigned long minIntTime; + unsigned long next_dmatime; + unsigned long next_hdmaReschedule; + unsigned long next_unhalttime; + unsigned long next_endtime; + unsigned long next_irqEventTime; + unsigned long tmatime; + unsigned long next_serialtime; + unsigned long next_eventtime; + unsigned long lastOamDmaUpdate; + unsigned long nextOamEventTime; + + LCD display; + PSG sound; + Interrupter interrupter; + Rtc rtc; + + events next_event; + irqEvents next_irqEvent; + cartridgetype romtype; + + std::string defaultSaveBasePath; + std::string saveDir; + + unsigned short rombanks; + unsigned short rombank; + unsigned short dmaSource; + unsigned short dmaDestination; + + unsigned char rambank; + unsigned char rambanks; + unsigned char oamDmaArea1Lower; + unsigned char oamDmaArea1Width; + unsigned char oamDmaArea2Upper; + unsigned char oamDmaPos; + + bool cgb; + bool doubleSpeed; + bool IME; + bool enable_ram; + bool rambank_mode; + bool battery, rtcRom; + bool hdma_transfer; + bool active; + + void updateInput(); + + void setRombank(); + void setRambank(); + void setBanks(); + void oamDmaInitSetup(); + void setOamDmaArea(); + void updateOamDma(unsigned long cycleCounter); + void startOamDma(unsigned long cycleCounter); + void endOamDma(unsigned long cycleCounter); + void setOamDmaSrc(); + + unsigned nontrivial_ff_read(unsigned P, unsigned long cycleCounter); + unsigned nontrivial_read(unsigned P, unsigned long cycleCounter); + void nontrivial_ff_write(unsigned P, unsigned data, unsigned long cycleCounter); + void mbc_write(unsigned P, unsigned data); + void nontrivial_write(unsigned P, unsigned data, unsigned long cycleCounter); + + void set_event(); + void set_irqEvent(); + void update_irqEvents(unsigned long cc); + void update_tima(unsigned long cycleCounter); + + void rescheduleIrq(unsigned long cycleCounter); + void rescheduleHdmaReschedule(); + + bool isDoubleSpeed() const { return doubleSpeed; } + +public: + Memory(const Interrupter &interrupter); + ~Memory(); + + void updateVideo(unsigned cycleCounter) { display.update(cycleCounter); } + unsigned lyCounter(unsigned cycleCounter) { return display.getLyReg(cycleCounter); } + + void setStatePtrs(SaveState &state); + unsigned long saveState(SaveState &state, unsigned long cc); + void loadState(const SaveState &state, unsigned long oldCc); + void loadSavedata(); + void saveSavedata(); + const std::string saveBasePath() const; + + void setOsdElement(std::auto_ptr osdElement) { + display.setOsdElement(osdElement); + } + + void speedChange(unsigned long cycleCounter); + bool isCgb() const { return cgb; } + bool getIME() const { return IME; } + unsigned long getNextEventTime() const { return next_eventtime; } + + bool isActive() const { return active; } + + void ei(unsigned long cycleCounter); + + void di() { + IME = 0; + nextIntTime = COUNTER_DISABLED; + + if (next_event == INTERRUPTS) + set_event(); + +// next_eitime=0; +// if(next_event==EI) set_event(); + } + + unsigned ff_read(const unsigned P, const unsigned long cycleCounter) { + return P < 0xFF80 ? nontrivial_ff_read(P, cycleCounter) : ioamhram[P - 0xFE00]; + } + + unsigned read(const unsigned P, const unsigned long cycleCounter) { + return rmem[P >> 12] ? rmem[P >> 12][P] : nontrivial_read(P, cycleCounter); + } + + void write(const unsigned P, const unsigned data, const unsigned long cycleCounter) { + if (wmem[P >> 12]) + wmem[P >> 12][P] = data; + else + nontrivial_write(P, data, cycleCounter); + } + + void ff_write(const unsigned P, const unsigned data, const unsigned long cycleCounter) { + if (((P + 1) & 0xFF) < 0x81) + nontrivial_ff_write(P, data, cycleCounter); + else + ioamhram[P - 0xFE00] = data; + } + + unsigned long event(unsigned long cycleCounter); + unsigned long resetCounters(unsigned long cycleCounter); + + bool loadROM(bool forceDmg); + void set_savedir(const char *dir); + + void setInputStateGetter(Gambatte::InputStateGetter *getInput) { + this->getInput = getInput; + } + + void schedule_unhalt(); + void incEndtime(unsigned long inc); + void setEndtime(unsigned long cc, unsigned long inc); + + void setSoundBuffer(Gambatte::uint_least32_t *const buf) { sound.setBuffer(buf); } + unsigned fillSoundBuffer(unsigned long cc); + void setVideoBlitter(Gambatte::VideoBlitter * vb); + void setVideoFilter(unsigned int n); + + void videoBufferChange(); + + unsigned videoWidth() const { + return display.videoWidth(); + } + + unsigned videoHeight() const { + return display.videoHeight(); + } + + std::vector filterInfo() const { + return display.filterInfo(); + } + + void setDmgPaletteColor(unsigned palNum, unsigned colorNum, unsigned long rgb32); +}; + +#endif diff --git a/supergameboy/libgambatte/src/osd_element.h b/supergameboy/libgambatte/src/osd_element.h new file mode 100644 index 00000000..2517d34f --- /dev/null +++ b/supergameboy/libgambatte/src/osd_element.h @@ -0,0 +1,65 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef OSD_ELEMENT_H +#define OSD_ELEMENT_H + +#include "int.h" + +class OsdElement { +public: + enum Opacity { SEVEN_EIGHTHS, THREE_FOURTHS }; + +private: + Opacity opacity_; + unsigned x_; + unsigned y_; + unsigned w_; + unsigned h_; + +protected: + OsdElement(unsigned x = 0, unsigned y = 0, unsigned w = 0, unsigned h = 0, Opacity opacity = SEVEN_EIGHTHS) { + setPos(x, y); + setSize(w, h); + setOpacity(opacity); + } + + void setPos(unsigned x, unsigned y) { + x_ = x; + y_ = y; + } + + void setSize(unsigned w, unsigned h) { + w_ = w; + h_ = h; + } + + void setOpacity(Opacity opacity) { opacity_ = opacity; } + +public: + virtual ~OsdElement() {} + unsigned x() const { return x_; } + unsigned y() const { return y_; } + unsigned w() const { return w_; } + unsigned h() const { return h_; } + Opacity opacity() const { return opacity_; } + + virtual const Gambatte::uint_least32_t* update() = 0; +}; + +#endif diff --git a/supergameboy/libgambatte/src/rtc.cpp b/supergameboy/libgambatte/src/rtc.cpp new file mode 100644 index 00000000..75164919 --- /dev/null +++ b/supergameboy/libgambatte/src/rtc.cpp @@ -0,0 +1,157 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "rtc.h" +#include "savestate.h" + +using namespace std; + +Rtc::Rtc() : +activeData(NULL), +activeSet(NULL), +baseTime(0), +haltTime(0), +index(5), +dataDh(0), +dataDl(0), +dataH(0), +dataM(0), +dataS(0), +enabled(false), +lastLatchData(false) { +} + +void Rtc::doLatch() { + time_t tmp = ((dataDh & 0x40) ? haltTime : time(NULL)) - baseTime; + + while (tmp > 0x1FF * 86400) { + baseTime += 0x1FF * 86400; + tmp -= 0x1FF * 86400; + dataDh |= 0x80; + } + + dataDl = (tmp / 86400) & 0xFF; + dataDh &= 0xFE; + dataDh |= ((tmp / 86400) & 0x100) >> 8; + tmp %= 86400; + + dataH = tmp / 3600; + tmp %= 3600; + + dataM = tmp / 60; + tmp %= 60; + + dataS = tmp; +} + +void Rtc::doSwapActive() { + if (!enabled || index > 4) { + activeData = NULL; + activeSet = NULL; + } else switch (index) { + case 0x00: + activeData = &dataS; + activeSet = &Rtc::setS; + break; + case 0x01: + activeData = &dataM; + activeSet = &Rtc::setM; + break; + case 0x02: + activeData = &dataH; + activeSet = &Rtc::setH; + break; + case 0x03: + activeData = &dataDl; + activeSet = &Rtc::setDl; + break; + case 0x04: + activeData = &dataDh; + activeSet = &Rtc::setDh; + break; + } +} + +void Rtc::saveState(SaveState &state) const { + state.rtc.baseTime = baseTime; + state.rtc.haltTime = haltTime; + state.rtc.index = index; + state.rtc.dataDh = dataDh; + state.rtc.dataDl = dataDl; + state.rtc.dataH = dataH; + state.rtc.dataM = dataM; + state.rtc.dataS = dataS; + state.rtc.lastLatchData = lastLatchData; +} + +void Rtc::loadState(const SaveState &state, const bool enabled) { + this->enabled = enabled; + + baseTime = state.rtc.baseTime; + haltTime = state.rtc.haltTime; + index = state.rtc.index; + dataDh = state.rtc.dataDh; + dataDl = state.rtc.dataDl; + dataH = state.rtc.dataH; + dataM = state.rtc.dataM; + dataS = state.rtc.dataS; + lastLatchData = state.rtc.lastLatchData; + + doSwapActive(); +} + +void Rtc::setDh(const unsigned new_dh) { + const time_t unixtime = (dataDh & 0x40) ? haltTime : time(NULL); + const time_t old_highdays = ((unixtime - baseTime) / 86400) & 0x100; + baseTime += old_highdays * 86400; + baseTime -= ((new_dh & 0x1) << 8) * 86400; + + if ((dataDh ^ new_dh) & 0x40) { + if (new_dh & 0x40) + haltTime = time(NULL); + else + baseTime += time(NULL) - haltTime; + } +} + +void Rtc::setDl(const unsigned new_lowdays) { + const time_t unixtime = (dataDh & 0x40) ? haltTime : time(NULL); + const time_t old_lowdays = ((unixtime - baseTime) / 86400) & 0xFF; + baseTime += old_lowdays * 86400; + baseTime -= new_lowdays * 86400; +} + +void Rtc::setH(const unsigned new_hours) { + const time_t unixtime = (dataDh & 0x40) ? haltTime : time(NULL); + const time_t old_hours = ((unixtime - baseTime) / 3600) % 24; + baseTime += old_hours * 3600; + baseTime -= new_hours * 3600; +} + +void Rtc::setM(const unsigned new_minutes) { + const time_t unixtime = (dataDh & 0x40) ? haltTime : time(NULL); + const time_t old_minutes = ((unixtime - baseTime) / 60) % 60; + baseTime += old_minutes * 60; + baseTime -= new_minutes * 60; +} + +void Rtc::setS(const unsigned new_seconds) { + const time_t unixtime = (dataDh & 0x40) ? haltTime : time(NULL); + baseTime += (unixtime - baseTime) % 60; + baseTime -= new_seconds; +} diff --git a/supergameboy/libgambatte/src/rtc.h b/supergameboy/libgambatte/src/rtc.h new file mode 100644 index 00000000..40905c18 --- /dev/null +++ b/supergameboy/libgambatte/src/rtc.h @@ -0,0 +1,97 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef RTC_H +#define RTC_H + +class SaveState; + +#include + +class Rtc { +private: + unsigned char *activeData; + void (Rtc::*activeSet)(unsigned); + std::time_t baseTime; + std::time_t haltTime; + unsigned char index; + unsigned char dataDh; + unsigned char dataDl; + unsigned char dataH; + unsigned char dataM; + unsigned char dataS; + bool enabled; + bool lastLatchData; + + void doLatch(); + void doSwapActive(); + void setDh(unsigned new_dh); + void setDl(unsigned new_lowdays); + void setH(unsigned new_hours); + void setM(unsigned new_minutes); + void setS(unsigned new_seconds); + +public: + Rtc(); + + const unsigned char* getActive() const { + return activeData; + } + + std::time_t getBaseTime() const { + return baseTime; + } + + void setBaseTime(const std::time_t baseTime) { + this->baseTime = baseTime; +// doLatch(); + } + + void latch(const unsigned data) { + if (!lastLatchData && data == 1) + doLatch(); + + lastLatchData = data; + } + + void saveState(SaveState &state) const; + void loadState(const SaveState &state, bool enabled); + + void setEnabled(const bool enabled) { + this->enabled = enabled; + + doSwapActive(); + } + + void swapActive(unsigned index) { + index &= 0xF; + index -= 8; + + this->index = index; + + doSwapActive(); + } + + void write(const unsigned data) { +// if (activeSet) + (this->*activeSet)(data); + *activeData = data; + } +}; + +#endif diff --git a/supergameboy/libgambatte/src/savestate.h b/supergameboy/libgambatte/src/savestate.h new file mode 100644 index 00000000..c4b245fd --- /dev/null +++ b/supergameboy/libgambatte/src/savestate.h @@ -0,0 +1,184 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef SAVESTATE_H +#define SAVESTATE_H + +#include "int.h" + +struct SaveState { + template + class Ptr { + T *ptr; + unsigned long sz; + + public: + Ptr() : ptr(0), sz(0) {} + const T* get() const { return ptr; } + unsigned long getSz() const { return sz; } + void set(T *ptr, const unsigned long sz) { this->ptr = ptr; this->sz = sz; } + + friend class SaverList; + friend void setInitState(SaveState &, bool); + }; + + struct CPU { + unsigned long cycleCounter; + unsigned short PC; + unsigned short SP; + unsigned char A; + unsigned char B; + unsigned char C; + unsigned char D; + unsigned char E; + unsigned char F; + unsigned char H; + unsigned char L; + bool skip; + bool halted; + } cpu; + + struct Mem { + Ptr vram; + Ptr sram; + Ptr wram; + Ptr ioamhram; + unsigned long div_lastUpdate; + unsigned long tima_lastUpdate; + unsigned long tmatime; + unsigned long next_serialtime; + unsigned long lastOamDmaUpdate; + unsigned long minIntTime; + unsigned short rombank; + unsigned short dmaSource; + unsigned short dmaDestination; + unsigned char rambank; + unsigned char oamDmaPos; + bool IME; + bool enable_ram; + bool rambank_mode; + bool hdma_transfer; + } mem; + + struct PPU { + Ptr drawBuffer; + Ptr bgpData; + Ptr objpData; + //SpriteMapper::OamReader + Ptr oamReaderBuf; + Ptr oamReaderSzbuf; + + unsigned long videoCycles; + unsigned long enableDisplayM0Time; + unsigned char winYPos; + unsigned char drawStartCycle; + unsigned char scReadOffset; + unsigned char lcdc; + //ScReader + unsigned char scx[2]; + unsigned char scy[2]; + //ScxReader + unsigned char scxAnd7; + //WeMasterChecker + bool weMaster; + //WxReader + unsigned char wx; + //Wy + unsigned char wy; + bool lycIrqSkip; + } ppu; + + struct SPU { + struct Duty { + unsigned long nextPosUpdate; + unsigned char nr3; + unsigned char pos; + }; + + struct Env { + unsigned long counter; + unsigned char volume; + }; + + struct LCounter { + unsigned long counter; + unsigned short lengthCounter; + }; + + struct { + struct { + unsigned long counter; + unsigned short shadow; + unsigned char nr0; + bool negging; + } sweep; + Duty duty; + Env env; + LCounter lcounter; + unsigned char nr4; + bool master; + } ch1; + + struct { + Duty duty; + Env env; + LCounter lcounter; + unsigned char nr4; + bool master; + } ch2; + + struct { + Ptr waveRam; + LCounter lcounter; + unsigned long waveCounter; + unsigned long lastReadTime; + unsigned char nr3; + unsigned char nr4; + unsigned char wavePos; + unsigned char sampleBuf; + bool master; + } ch3; + + struct { + struct { + unsigned long counter; + unsigned short reg; + } lfsr; + Env env; + LCounter lcounter; + unsigned char nr4; + bool master; + } ch4; + + unsigned long cycleCounter; + } spu; + + struct RTC { + unsigned long baseTime; + unsigned long haltTime; + unsigned char index; + unsigned char dataDh; + unsigned char dataDl; + unsigned char dataH; + unsigned char dataM; + unsigned char dataS; + bool lastLatchData; + } rtc; +}; + +#endif diff --git a/supergameboy/libgambatte/src/sound.cpp b/supergameboy/libgambatte/src/sound.cpp new file mode 100644 index 00000000..3ff8063f --- /dev/null +++ b/supergameboy/libgambatte/src/sound.cpp @@ -0,0 +1,155 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "sound.h" + +#include "savestate.h" +#include +#include + +/* + Frame Sequencer + + Step Length Ctr Vol Env Sweep + - - - - - - - - - - - - - - - - - - - - + 0 Clock - Clock +S 1 - Clock - + 2 Clock - - + 3 - - - + 4 Clock - Clock + 5 - - - + 6 Clock - - + 7 - - - + - - - - - - - - - - - - - - - - - - - - + Rate 256 Hz 64 Hz 128 Hz + +S) start step on sound power on. +*/ + +// static const unsigned bufferSize = 35112 + 16 + 2048; //FIXME: DMA can prevent process from returning for up to 4096 cycles. + +PSG::PSG() : +buffer(NULL), +lastUpdate(0), +soVol(0), +rsum(0x8000), // initialize to 0x8000 to prevent borrows from high word, xor away later +bufferPos(0), +enabled(false) +{} + +void PSG::init(const bool cgb) { + ch1.init(cgb); + ch2.init(cgb); + ch3.init(cgb); + ch4.init(cgb); +} + +void PSG::reset() { + ch1.reset(); + ch2.reset(); + ch3.reset(); + ch4.reset(); +} + +void PSG::setStatePtrs(SaveState &state) { + ch3.setStatePtrs(state); +} + +void PSG::saveState(SaveState &state) { + ch1.saveState(state); + ch2.saveState(state); + ch3.saveState(state); + ch4.saveState(state); +} + +void PSG::loadState(const SaveState &state) { + ch1.loadState(state); + ch2.loadState(state); + ch3.loadState(state); + ch4.loadState(state); + + lastUpdate = state.cpu.cycleCounter; + set_so_volume(state.mem.ioamhram.get()[0x124]); + map_so(state.mem.ioamhram.get()[0x125]); + enabled = state.mem.ioamhram.get()[0x126] >> 7 & 1; +} + +void PSG::accumulate_channels(const unsigned long cycles) { + Gambatte::uint_least32_t *const buf = buffer + bufferPos; + + std::memset(buf, 0, cycles * sizeof(Gambatte::uint_least32_t)); + ch1.update(buf, soVol, cycles); + ch2.update(buf, soVol, cycles); + ch3.update(buf, soVol, cycles); + ch4.update(buf, soVol, cycles); +} + +void PSG::generate_samples(const unsigned long cycleCounter, const unsigned doubleSpeed) { + const unsigned long cycles = (cycleCounter - lastUpdate) >> (1 + doubleSpeed); + lastUpdate += cycles << (1 + doubleSpeed); + + if (cycles) + accumulate_channels(cycles); + + bufferPos += cycles; +} + +void PSG::resetCounter(const unsigned long newCc, const unsigned long oldCc, const unsigned doubleSpeed) { + generate_samples(oldCc, doubleSpeed); + lastUpdate = newCc - (oldCc - lastUpdate); +} + +unsigned PSG::fillBuffer() { + Gambatte::uint_least32_t sum = rsum; + Gambatte::uint_least32_t *b = buffer; + unsigned n = bufferPos; + + while (n--) { + sum += *b; + *b++ = sum ^ 0x8000; // xor away the initial rsum value of 0x8000 (which prevents borrows from the high word) from the low word + } + + rsum = sum; + + return bufferPos; +} + +#ifdef WORDS_BIGENDIAN +static const unsigned long so1Mul = 0x00000001; +static const unsigned long so2Mul = 0x00010000; +#else +static const unsigned long so1Mul = 0x00010000; +static const unsigned long so2Mul = 0x00000001; +#endif + +void PSG::set_so_volume(const unsigned nr50) { + soVol = (((nr50 & 0x7) + 1) * so1Mul + ((nr50 >> 4 & 0x7) + 1) * so2Mul) * 64; +} + +void PSG::map_so(const unsigned nr51) { + const unsigned long tmp = nr51 * so1Mul + (nr51 >> 4) * so2Mul; + + ch1.setSo((tmp & 0x00010001) * 0xFFFF); + ch2.setSo((tmp >> 1 & 0x00010001) * 0xFFFF); + ch3.setSo((tmp >> 2 & 0x00010001) * 0xFFFF); + ch4.setSo((tmp >> 3 & 0x00010001) * 0xFFFF); +} + +unsigned PSG::getStatus() const { + return ch1.isActive() | (ch2.isActive() << 1) | (ch3.isActive() << 2) | (ch4.isActive() << 3); +} diff --git a/supergameboy/libgambatte/src/sound.h b/supergameboy/libgambatte/src/sound.h new file mode 100644 index 00000000..06916846 --- /dev/null +++ b/supergameboy/libgambatte/src/sound.h @@ -0,0 +1,95 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef SOUND_H +#define SOUND_H + +class SaveState; + +#include "int.h" + +#include "sound/channel1.h" +#include "sound/channel2.h" +#include "sound/channel3.h" +#include "sound/channel4.h" + +class PSG { + Channel1 ch1; + Channel2 ch2; + Channel3 ch3; + Channel4 ch4; + + Gambatte::uint_least32_t *buffer; + + unsigned long lastUpdate; + unsigned long soVol; + + Gambatte::uint_least32_t rsum; + + unsigned bufferPos; + + bool enabled; + + void accumulate_channels(unsigned long cycles); + +public: + PSG(); + void init(bool cgb); + void reset(); + void setStatePtrs(SaveState &state); + void saveState(SaveState &state); + void loadState(const SaveState &state); + + void generate_samples(unsigned long cycleCounter, unsigned doubleSpeed); + void resetCounter(unsigned long newCc, unsigned long oldCc, unsigned doubleSpeed); + unsigned fillBuffer(); + void setBuffer(Gambatte::uint_least32_t *const buf) { buffer = buf; bufferPos = 0; } + + bool isEnabled() const { return enabled; } + void setEnabled(bool value) { enabled = value; } + + void set_nr10(unsigned data) { ch1.setNr0(data); } + void set_nr11(unsigned data) { ch1.setNr1(data); } + void set_nr12(unsigned data) { ch1.setNr2(data); } + void set_nr13(unsigned data) { ch1.setNr3(data); } + void set_nr14(unsigned data) { ch1.setNr4(data); } + + void set_nr21(unsigned data) { ch2.setNr1(data); } + void set_nr22(unsigned data) { ch2.setNr2(data); } + void set_nr23(unsigned data) { ch2.setNr3(data); } + void set_nr24(unsigned data) { ch2.setNr4(data); } + + void set_nr30(unsigned data) { ch3.setNr0(data); } + void set_nr31(unsigned data) { ch3.setNr1(data); } + void set_nr32(unsigned data) { ch3.setNr2(data); } + void set_nr33(unsigned data) { ch3.setNr3(data); } + void set_nr34(unsigned data) { ch3.setNr4(data); } + unsigned waveRamRead(unsigned index) const { return ch3.waveRamRead(index); } + void waveRamWrite(unsigned index, unsigned data) { ch3.waveRamWrite(index, data); } + + void set_nr41(unsigned data) { ch4.setNr1(data); } + void set_nr42(unsigned data) { ch4.setNr2(data); } + void set_nr43(unsigned data) { ch4.setNr3(data); } + void set_nr44(unsigned data) { ch4.setNr4(data); } + + void set_so_volume(unsigned nr50); + void map_so(unsigned nr51); + unsigned getStatus() const; +}; + +#endif diff --git a/supergameboy/libgambatte/src/sound/channel1.cpp b/supergameboy/libgambatte/src/sound/channel1.cpp new file mode 100644 index 00000000..5e112eb2 --- /dev/null +++ b/supergameboy/libgambatte/src/sound/channel1.cpp @@ -0,0 +1,257 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "channel1.h" +#include "../savestate.h" +#include + +Channel1::SweepUnit::SweepUnit(MasterDisabler &disabler, DutyUnit &dutyUnit) : + disableMaster(disabler), + dutyUnit(dutyUnit), + shadow(0), + nr0(0), + negging(false) +{} + +unsigned Channel1::SweepUnit::calcFreq() { + unsigned freq = shadow >> (nr0 & 0x07); + + if (nr0 & 0x08) { + freq = shadow - freq; + negging = true; + } else + freq = shadow + freq; + + if (freq & 2048) + disableMaster(); + + return freq; +} + +void Channel1::SweepUnit::event() { + const unsigned long period = nr0 >> 4 & 0x07; + + if (period) { + const unsigned freq = calcFreq(); + + if (!(freq & 2048) && (nr0 & 0x07)) { + shadow = freq; + dutyUnit.setFreq(freq, counter); + calcFreq(); + } + + counter += period << 14; + } else + counter += 8ul << 14; +} + +void Channel1::SweepUnit::nr0Change(const unsigned newNr0) { + if (negging && !(newNr0 & 0x08)) + disableMaster(); + + nr0 = newNr0; +} + +void Channel1::SweepUnit::nr4Init(const unsigned long cc) { + negging = false; + shadow = dutyUnit.getFreq(); + + const unsigned period = nr0 >> 4 & 0x07; + const unsigned shift = nr0 & 0x07; + + if (period | shift) + counter = ((cc >> 14) + (period ? period : 8)) << 14; + else + counter = COUNTER_DISABLED; + + if (shift) + calcFreq(); +} + +void Channel1::SweepUnit::reset() { + counter = COUNTER_DISABLED; +} + +void Channel1::SweepUnit::saveState(SaveState &state) const { + state.spu.ch1.sweep.counter = counter; + state.spu.ch1.sweep.shadow = shadow; + state.spu.ch1.sweep.nr0 = nr0; + state.spu.ch1.sweep.negging = negging; +} + +void Channel1::SweepUnit::loadState(const SaveState &state) { + counter = std::max(state.spu.ch1.sweep.counter, state.spu.cycleCounter); + shadow = state.spu.ch1.sweep.shadow; + nr0 = state.spu.ch1.sweep.nr0; + negging = state.spu.ch1.sweep.negging; +} + +Channel1::Channel1() : + staticOutputTest(*this, dutyUnit), + disableMaster(master, dutyUnit), + lengthCounter(disableMaster, 0x3F), + envelopeUnit(staticOutputTest), + sweepUnit(disableMaster, dutyUnit), + cycleCounter(0), + soMask(0), + prevOut(0), + nr4(0), + master(false) +{ + setEvent(); +} + +void Channel1::setEvent() { +// nextEventUnit = &dutyUnit; +// if (sweepUnit.getCounter() < nextEventUnit->getCounter()) + nextEventUnit = &sweepUnit; + if (envelopeUnit.getCounter() < nextEventUnit->getCounter()) + nextEventUnit = &envelopeUnit; + if (lengthCounter.getCounter() < nextEventUnit->getCounter()) + nextEventUnit = &lengthCounter; +} + +void Channel1::setNr0(const unsigned data) { + sweepUnit.nr0Change(data); + setEvent(); +} + +void Channel1::setNr1(const unsigned data) { + lengthCounter.nr1Change(data, nr4, cycleCounter); + dutyUnit.nr1Change(data, cycleCounter); + + setEvent(); +} + +void Channel1::setNr2(const unsigned data) { + if (envelopeUnit.nr2Change(data)) + disableMaster(); + else + staticOutputTest(cycleCounter); + + setEvent(); +} + +void Channel1::setNr3(const unsigned data) { + dutyUnit.nr3Change(data, cycleCounter); + setEvent(); +} + +void Channel1::setNr4(const unsigned data) { + lengthCounter.nr4Change(nr4, data, cycleCounter); + + nr4 = data; + + dutyUnit.nr4Change(data, cycleCounter); + + if (data & 0x80) { //init-bit + nr4 &= 0x7F; + master = !envelopeUnit.nr4Init(cycleCounter); + sweepUnit.nr4Init(cycleCounter); + staticOutputTest(cycleCounter); + } + + setEvent(); +} + +void Channel1::setSo(const unsigned long soMask) { + this->soMask = soMask; + staticOutputTest(cycleCounter); + setEvent(); +} + +void Channel1::reset() { + cycleCounter = 0x1000 | (cycleCounter & 0xFFF); // cycleCounter >> 12 & 7 represents the frame sequencer position. + +// lengthCounter.reset(); + dutyUnit.reset(); + envelopeUnit.reset(); + sweepUnit.reset(); + + setEvent(); +} + +void Channel1::init(const bool cgb) { + lengthCounter.init(cgb); +} + +void Channel1::saveState(SaveState &state) { + sweepUnit.saveState(state); + dutyUnit.saveState(state.spu.ch1.duty, cycleCounter); + envelopeUnit.saveState(state.spu.ch1.env); + lengthCounter.saveState(state.spu.ch1.lcounter); + + state.spu.cycleCounter = cycleCounter; + state.spu.ch1.nr4 = nr4; + state.spu.ch1.master = master; +} + +void Channel1::loadState(const SaveState &state) { + sweepUnit.loadState(state); + dutyUnit.loadState(state.spu.ch1.duty, state.mem.ioamhram.get()[0x111], state.spu.ch1.nr4, state.spu.cycleCounter); + envelopeUnit.loadState(state.spu.ch1.env, state.mem.ioamhram.get()[0x112], state.spu.cycleCounter); + lengthCounter.loadState(state.spu.ch1.lcounter, state.spu.cycleCounter); + + cycleCounter = state.spu.cycleCounter; + nr4 = state.spu.ch1.nr4; + master = state.spu.ch1.master; +} + +void Channel1::update(Gambatte::uint_least32_t *buf, const unsigned long soBaseVol, unsigned long cycles) { + const unsigned long outBase = envelopeUnit.dacIsOn() ? soBaseVol & soMask : 0; + const unsigned long outLow = outBase * (0 - 15ul); + const unsigned long endCycles = cycleCounter + cycles; + + for (;;) { + const unsigned long outHigh = master ? outBase * (envelopeUnit.getVolume() * 2 - 15ul) : outLow; + const unsigned long nextMajorEvent = nextEventUnit->getCounter() < endCycles ? nextEventUnit->getCounter() : endCycles; + unsigned long out = dutyUnit.isHighState() ? outHigh : outLow; + + while (dutyUnit.getCounter() <= nextMajorEvent) { + *buf = out - prevOut; + prevOut = out; + buf += dutyUnit.getCounter() - cycleCounter; + cycleCounter = dutyUnit.getCounter(); + + dutyUnit.event(); + out = dutyUnit.isHighState() ? outHigh : outLow; + } + + if (cycleCounter < nextMajorEvent) { + *buf = out - prevOut; + prevOut = out; + buf += nextMajorEvent - cycleCounter; + cycleCounter = nextMajorEvent; + } + + if (nextEventUnit->getCounter() == nextMajorEvent) { + nextEventUnit->event(); + setEvent(); + } else + break; + } + + if (cycleCounter & SoundUnit::COUNTER_MAX) { + dutyUnit.resetCounters(cycleCounter); + lengthCounter.resetCounters(cycleCounter); + envelopeUnit.resetCounters(cycleCounter); + sweepUnit.resetCounters(cycleCounter); + + cycleCounter -= SoundUnit::COUNTER_MAX; + } +} diff --git a/supergameboy/libgambatte/src/sound/channel1.h b/supergameboy/libgambatte/src/sound/channel1.h new file mode 100644 index 00000000..d790e0ec --- /dev/null +++ b/supergameboy/libgambatte/src/sound/channel1.h @@ -0,0 +1,91 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef SOUND_CHANNEL1_H +#define SOUND_CHANNEL1_H + +class SaveState; + +#include "int.h" + +#include "master_disabler.h" +#include "length_counter.h" +#include "duty_unit.h" +#include "envelope_unit.h" +#include "static_output_tester.h" + +class Channel1 { + class SweepUnit : public SoundUnit { + MasterDisabler &disableMaster; + DutyUnit &dutyUnit; + unsigned short shadow; + unsigned char nr0; + bool negging; + + unsigned calcFreq(); + + public: + SweepUnit(MasterDisabler &disabler, DutyUnit &dutyUnit); + void event(); + void nr0Change(unsigned newNr0); + void nr4Init(unsigned long cycleCounter); + void reset(); + void saveState(SaveState &state) const; + void loadState(const SaveState &state); + }; + + friend class StaticOutputTester; + + StaticOutputTester staticOutputTest; + DutyMasterDisabler disableMaster; + LengthCounter lengthCounter; + DutyUnit dutyUnit; + EnvelopeUnit envelopeUnit; + SweepUnit sweepUnit; + + SoundUnit *nextEventUnit; + + unsigned long cycleCounter; + unsigned long soMask; + unsigned long prevOut; + + unsigned char nr4; + bool master; + + void setEvent(); + +public: + Channel1(); + void setNr0(unsigned data); + void setNr1(unsigned data); + void setNr2(unsigned data); + void setNr3(unsigned data); + void setNr4(unsigned data); + + void setSo(unsigned long soMask); + bool isActive() const { return master; } + + void update(Gambatte::uint_least32_t *buf, unsigned long soBaseVol, unsigned long cycles); + + void reset(); + void init(bool cgb); + void saveState(SaveState &state); + void loadState(const SaveState &state); +}; + +#endif diff --git a/supergameboy/libgambatte/src/sound/channel2.cpp b/supergameboy/libgambatte/src/sound/channel2.cpp new file mode 100644 index 00000000..2db30658 --- /dev/null +++ b/supergameboy/libgambatte/src/sound/channel2.cpp @@ -0,0 +1,161 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "channel2.h" +#include "../savestate.h" + +Channel2::Channel2() : + staticOutputTest(*this, dutyUnit), + disableMaster(master, dutyUnit), + lengthCounter(disableMaster, 0x3F), + envelopeUnit(staticOutputTest), + cycleCounter(0), + soMask(0), + prevOut(0), + nr4(0), + master(false) +{ + setEvent(); +} + +void Channel2::setEvent() { +// nextEventUnit = &dutyUnit; +// if (envelopeUnit.getCounter() < nextEventUnit->getCounter()) + nextEventUnit = &envelopeUnit; + if (lengthCounter.getCounter() < nextEventUnit->getCounter()) + nextEventUnit = &lengthCounter; +} + +void Channel2::setNr1(const unsigned data) { + lengthCounter.nr1Change(data, nr4, cycleCounter); + dutyUnit.nr1Change(data, cycleCounter); + + setEvent(); +} + +void Channel2::setNr2(const unsigned data) { + if (envelopeUnit.nr2Change(data)) + disableMaster(); + else + staticOutputTest(cycleCounter); + + setEvent(); +} + +void Channel2::setNr3(const unsigned data) { + dutyUnit.nr3Change(data, cycleCounter); + setEvent(); +} + +void Channel2::setNr4(const unsigned data) { + lengthCounter.nr4Change(nr4, data, cycleCounter); + + nr4 = data; + + if (data & 0x80) { //init-bit + nr4 &= 0x7F; + master = !envelopeUnit.nr4Init(cycleCounter); + staticOutputTest(cycleCounter); + } + + dutyUnit.nr4Change(data, cycleCounter); + + setEvent(); +} + +void Channel2::setSo(const unsigned long soMask) { + this->soMask = soMask; + staticOutputTest(cycleCounter); + setEvent(); +} + +void Channel2::reset() { + cycleCounter = 0x1000 | (cycleCounter & 0xFFF); // cycleCounter >> 12 & 7 represents the frame sequencer position. + +// lengthCounter.reset(); + dutyUnit.reset(); + envelopeUnit.reset(); + + setEvent(); +} + +void Channel2::init(const bool cgb) { + lengthCounter.init(cgb); +} + +void Channel2::saveState(SaveState &state) { + dutyUnit.saveState(state.spu.ch2.duty, cycleCounter); + envelopeUnit.saveState(state.spu.ch2.env); + lengthCounter.saveState(state.spu.ch2.lcounter); + + state.spu.ch2.nr4 = nr4; + state.spu.ch2.master = master; +} + +void Channel2::loadState(const SaveState &state) { + dutyUnit.loadState(state.spu.ch2.duty, state.mem.ioamhram.get()[0x116], state.spu.ch2.nr4,state.spu.cycleCounter); + envelopeUnit.loadState(state.spu.ch2.env, state.mem.ioamhram.get()[0x117], state.spu.cycleCounter); + lengthCounter.loadState(state.spu.ch2.lcounter, state.spu.cycleCounter); + + cycleCounter = state.spu.cycleCounter; + nr4 = state.spu.ch2.nr4; + master = state.spu.ch2.master; +} + +void Channel2::update(Gambatte::uint_least32_t *buf, const unsigned long soBaseVol, unsigned long cycles) { + const unsigned long outBase = envelopeUnit.dacIsOn() ? soBaseVol & soMask : 0; + const unsigned long outLow = outBase * (0 - 15ul); + const unsigned long endCycles = cycleCounter + cycles; + + for (;;) { + const unsigned long outHigh = master ? outBase * (envelopeUnit.getVolume() * 2 - 15ul) : outLow; + const unsigned long nextMajorEvent = nextEventUnit->getCounter() < endCycles ? nextEventUnit->getCounter() : endCycles; + unsigned long out = dutyUnit.isHighState() ? outHigh : outLow; + + while (dutyUnit.getCounter() <= nextMajorEvent) { + *buf += out - prevOut; + prevOut = out; + buf += dutyUnit.getCounter() - cycleCounter; + cycleCounter = dutyUnit.getCounter(); + + dutyUnit.event(); + out = dutyUnit.isHighState() ? outHigh : outLow; + } + + if (cycleCounter < nextMajorEvent) { + *buf += out - prevOut; + prevOut = out; + buf += nextMajorEvent - cycleCounter; + cycleCounter = nextMajorEvent; + } + + if (nextEventUnit->getCounter() == nextMajorEvent) { + nextEventUnit->event(); + setEvent(); + } else + break; + } + + if (cycleCounter & SoundUnit::COUNTER_MAX) { + dutyUnit.resetCounters(cycleCounter); + lengthCounter.resetCounters(cycleCounter); + envelopeUnit.resetCounters(cycleCounter); + + cycleCounter -= SoundUnit::COUNTER_MAX; + } +} diff --git a/supergameboy/libgambatte/src/sound/channel2.h b/supergameboy/libgambatte/src/sound/channel2.h new file mode 100644 index 00000000..24bc66a4 --- /dev/null +++ b/supergameboy/libgambatte/src/sound/channel2.h @@ -0,0 +1,70 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef SOUND_CHANNEL2_H +#define SOUND_CHANNEL2_H + +class SaveState; + +#include "int.h" + +#include "length_counter.h" +#include "duty_unit.h" +#include "envelope_unit.h" +#include "static_output_tester.h" + +class Channel2 { + friend class StaticOutputTester; + + StaticOutputTester staticOutputTest; + DutyMasterDisabler disableMaster; + LengthCounter lengthCounter; + DutyUnit dutyUnit; + EnvelopeUnit envelopeUnit; + + SoundUnit *nextEventUnit; + + unsigned long cycleCounter; + unsigned long soMask; + unsigned long prevOut; + + unsigned char nr4; + bool master; + + void setEvent(); + +public: + Channel2(); + void setNr1(unsigned data); + void setNr2(unsigned data); + void setNr3(unsigned data); + void setNr4(unsigned data); + + void setSo(unsigned long soMask); + // void deactivate() { disableMaster(); setEvent(); } + bool isActive() const { return master; } + + void update(Gambatte::uint_least32_t *buf, unsigned long soBaseVol, unsigned long cycles); + + void reset(); + void init(bool cgb); + void saveState(SaveState &state); + void loadState(const SaveState &state); +}; + +#endif diff --git a/supergameboy/libgambatte/src/sound/channel3.cpp b/supergameboy/libgambatte/src/sound/channel3.cpp new file mode 100644 index 00000000..944271e3 --- /dev/null +++ b/supergameboy/libgambatte/src/sound/channel3.cpp @@ -0,0 +1,207 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "channel3.h" +#include "../savestate.h" +#include +#include + +static inline unsigned toPeriod(const unsigned nr3, const unsigned nr4) { + return 0x800 - ((nr4 << 8 & 0x700) | nr3); +} + +Channel3::Channel3() : + disableMaster(master, waveCounter), + lengthCounter(disableMaster, 0xFF), + cycleCounter(0), + soMask(0), + prevOut(0), + waveCounter(SoundUnit::COUNTER_DISABLED), + lastReadTime(0), + nr0(0), + nr3(0), + nr4(0), + wavePos(0), + rShift(4), + sampleBuf(0), + master(false), + cgb(false) +{} + +void Channel3::setNr0(const unsigned data) { + nr0 = data & 0x80; + + if (!(data & 0x80)) + disableMaster(); +} + +void Channel3::setNr2(const unsigned data) { + rShift = (data >> 5 & 3U) - 1; + + if (rShift > 3) + rShift = 4; +} + +void Channel3::setNr4(const unsigned data) { + lengthCounter.nr4Change(nr4, data, cycleCounter); + + nr4 = data & 0x7F; + + if (data & nr0/* & 0x80*/) { + if (!cgb && waveCounter == cycleCounter + 1) { + const unsigned pos = ((wavePos + 1) & 0x1F) >> 1; + + if (pos < 4) + waveRam[0] = waveRam[pos]; + else + std::memcpy(waveRam, waveRam + (pos & ~3), 4); + } + + master = true; + wavePos = 0; + lastReadTime = waveCounter = cycleCounter + toPeriod(nr3, data) + 3; + } +} + +void Channel3::setSo(const unsigned long soMask) { + this->soMask = soMask; +} + +void Channel3::reset() { + cycleCounter = 0x1000 | (cycleCounter & 0xFFF); // cycleCounter >> 12 & 7 represents the frame sequencer position. + +// lengthCounter.reset(); + sampleBuf = 0; +} + +void Channel3::init(const bool cgb) { + this->cgb = cgb; + lengthCounter.init(cgb); +} + +void Channel3::setStatePtrs(SaveState &state) { + state.spu.ch3.waveRam.set(waveRam, sizeof waveRam); +} + +void Channel3::saveState(SaveState &state) const { + lengthCounter.saveState(state.spu.ch3.lcounter); + + state.spu.ch3.waveCounter = waveCounter; + state.spu.ch3.lastReadTime = lastReadTime; + state.spu.ch3.nr3 = nr3; + state.spu.ch3.nr4 = nr4; + state.spu.ch3.wavePos = wavePos; + state.spu.ch3.sampleBuf = sampleBuf; + state.spu.ch3.master = master; +} + +void Channel3::loadState(const SaveState &state) { + lengthCounter.loadState(state.spu.ch3.lcounter, state.spu.cycleCounter); + + cycleCounter = state.spu.cycleCounter; + waveCounter = std::max(state.spu.ch3.waveCounter, state.spu.cycleCounter); + lastReadTime = state.spu.ch3.lastReadTime; + nr3 = state.spu.ch3.nr3; + nr4 = state.spu.ch3.nr4; + wavePos = state.spu.ch3.wavePos & 0x1F; + sampleBuf = state.spu.ch3.sampleBuf; + master = state.spu.ch3.master; + + nr0 = state.mem.ioamhram.get()[0x11A] & 0x80; + setNr2(state.mem.ioamhram.get()[0x11C]); +} + +void Channel3::updateWaveCounter(const unsigned long cc) { + if (cc >= waveCounter) { + const unsigned period = toPeriod(nr3, nr4); + const unsigned long periods = (cc - waveCounter) / period; + + lastReadTime = waveCounter + periods * period; + waveCounter = lastReadTime + period; + + wavePos += periods + 1; + wavePos &= 0x1F; + + sampleBuf = waveRam[wavePos >> 1]; + } +} + +void Channel3::update(Gambatte::uint_least32_t *buf, const unsigned long soBaseVol, unsigned long cycles) { + const unsigned long outBase = (nr0/* & 0x80*/) ? soBaseVol & soMask : 0; + + if (outBase && rShift != 4) { + const unsigned long endCycles = cycleCounter + cycles; + + for (;;) { + const unsigned long nextMajorEvent = lengthCounter.getCounter() < endCycles ? lengthCounter.getCounter() : endCycles; + unsigned long out = outBase * (master ? ((sampleBuf >> (~wavePos << 2 & 4) & 0xF) >> rShift) * 2 - 15ul : 0 - 15ul); + + while (waveCounter <= nextMajorEvent) { + *buf += out - prevOut; + prevOut = out; + buf += waveCounter - cycleCounter; + cycleCounter = waveCounter; + + lastReadTime = waveCounter; + waveCounter += toPeriod(nr3, nr4); + ++wavePos; + wavePos &= 0x1F; + sampleBuf = waveRam[wavePos >> 1]; + out = outBase * (/*master ? */((sampleBuf >> (~wavePos << 2 & 4) & 0xF) >> rShift) * 2 - 15ul/* : 0 - 15ul*/); + } + + if (cycleCounter < nextMajorEvent) { + *buf += out - prevOut; + prevOut = out; + buf += nextMajorEvent - cycleCounter; + cycleCounter = nextMajorEvent; + } + + if (lengthCounter.getCounter() == nextMajorEvent) { + lengthCounter.event(); + } else + break; + } + } else { + if (outBase) { + const unsigned long out = outBase * (0 - 15ul); + + *buf += out - prevOut; + prevOut = out; + } + + cycleCounter += cycles; + + while (lengthCounter.getCounter() <= cycleCounter) { + updateWaveCounter(lengthCounter.getCounter()); + lengthCounter.event(); + } + + updateWaveCounter(cycleCounter); + } + + if (cycleCounter & SoundUnit::COUNTER_MAX) { + lengthCounter.resetCounters(cycleCounter); + + if (waveCounter != SoundUnit::COUNTER_DISABLED) + waveCounter -= SoundUnit::COUNTER_MAX; + + lastReadTime -= SoundUnit::COUNTER_MAX; + cycleCounter -= SoundUnit::COUNTER_MAX; + } +} diff --git a/supergameboy/libgambatte/src/sound/channel3.h b/supergameboy/libgambatte/src/sound/channel3.h new file mode 100644 index 00000000..8ec8688d --- /dev/null +++ b/supergameboy/libgambatte/src/sound/channel3.h @@ -0,0 +1,100 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef SOUND_CHANNEL3_H +#define SOUND_CHANNEL3_H + +class SaveState; + +#include "int.h" + +#include "master_disabler.h" +#include "length_counter.h" + +class Channel3 { + class Ch3MasterDisabler : public MasterDisabler { + unsigned long &waveCounter; + + public: + Ch3MasterDisabler(bool &m, unsigned long &wC) : MasterDisabler(m), waveCounter(wC) {} + void operator()() { MasterDisabler::operator()(); waveCounter = SoundUnit::COUNTER_DISABLED; } + }; + + unsigned char waveRam[0x10]; + + Ch3MasterDisabler disableMaster; + LengthCounter lengthCounter; + + unsigned long cycleCounter; + unsigned long soMask; + unsigned long prevOut; + unsigned long waveCounter; + unsigned long lastReadTime; + + unsigned char nr0; + unsigned char nr3; + unsigned char nr4; + unsigned char wavePos; + unsigned char rShift; + unsigned char sampleBuf; + + bool master; + bool cgb; + + void updateWaveCounter(unsigned long cc); + +public: + Channel3(); + bool isActive() const { return master; } + void reset(); + void init(bool cgb); + void setStatePtrs(SaveState &state); + void saveState(SaveState &state) const; + void loadState(const SaveState &state); + void setNr0(unsigned data); + void setNr1(unsigned data) { lengthCounter.nr1Change(data, nr4, cycleCounter); } + void setNr2(unsigned data); + void setNr3(unsigned data) { nr3 = data; } + void setNr4(unsigned data); + void setSo(unsigned long soMask); + void update(Gambatte::uint_least32_t *buf, unsigned long soBaseVol, unsigned long cycles); + + unsigned waveRamRead(unsigned index) const { + if (master) { + if (!cgb && cycleCounter != lastReadTime) + return 0xFF; + + index = wavePos >> 1; + } + + return waveRam[index]; + } + + void waveRamWrite(unsigned index, unsigned data) { + if (master) { + if (!cgb && cycleCounter != lastReadTime) + return; + + index = wavePos >> 1; + } + + waveRam[index] = data; + } +}; + +#endif diff --git a/supergameboy/libgambatte/src/sound/channel4.cpp b/supergameboy/libgambatte/src/sound/channel4.cpp new file mode 100644 index 00000000..c1efcf28 --- /dev/null +++ b/supergameboy/libgambatte/src/sound/channel4.cpp @@ -0,0 +1,300 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "channel4.h" +#include "../savestate.h" +#include + +static unsigned long toPeriod(const unsigned nr3) { + unsigned s = (nr3 >> 4) + 3; + unsigned r = nr3 & 7; + + if (!r) { + r = 1; + --s; + } + + return r << s; +} + +Channel4::Lfsr::Lfsr() : +backupCounter(COUNTER_DISABLED), +reg(0xFF), +nr3(0), +master(false) +{} + +void Channel4::Lfsr::updateBackupCounter(const unsigned long cc) { + /*if (backupCounter <= cc) { + const unsigned long period = toPeriod(nr3); + backupCounter = cc - (cc - backupCounter) % period + period; + }*/ + + if (backupCounter <= cc) { + const unsigned long period = toPeriod(nr3); + unsigned long periods = (cc - backupCounter) / period + 1; + + backupCounter += periods * period; + + if (master && nr3 < 0xE0) { + if (nr3 & 8) { + while (periods > 6) { + const unsigned xored = (reg << 1 ^ reg) & 0x7E; + reg = (reg >> 6 & ~0x7E) | xored | xored << 8; + periods -= 6; + } + + const unsigned xored = ((reg ^ reg >> 1) << (7 - periods)) & 0x7F; + reg = (reg >> periods & ~(0x80 - (0x80 >> periods))) | xored | xored << 8; + } else { + while (periods > 15) { + reg = reg ^ reg >> 1; + periods -= 15; + } + + reg = reg >> periods | (((reg ^ reg >> 1) << (15 - periods)) & 0x7FFF); + } + } + } +} + +void Channel4::Lfsr::reviveCounter(const unsigned long cc) { + updateBackupCounter(cc); + counter = backupCounter; +} + +/*static const unsigned char nextStateDistance[0x40] = { + 6, 1, 1, 2, 2, 1, 1, 3, + 3, 1, 1, 2, 2, 1, 1, 4, + 4, 1, 1, 2, 2, 1, 1, 3, + 3, 1, 1, 2, 2, 1, 1, 5, + 5, 1, 1, 2, 2, 1, 1, 3, + 3, 1, 1, 2, 2, 1, 1, 4, + 4, 1, 1, 2, 2, 1, 1, 3, + 3, 1, 1, 2, 2, 1, 1, 6, +};*/ + +inline void Channel4::Lfsr::event() { + if (nr3 < 0xE0) { + const unsigned shifted = reg >> 1; + const unsigned xored = (reg ^ shifted) & 1; + + reg = shifted | xored << 14; + + if (nr3 & 8) + reg = (reg & ~0x40) | xored << 6; + } + + counter += toPeriod(nr3); + backupCounter = counter; + + + /*if (nr3 < 0xE0) { + const unsigned periods = nextStateDistance[reg & 0x3F]; + const unsigned xored = ((reg ^ reg >> 1) << (7 - periods)) & 0x7F; + + reg = reg >> periods | xored << 8; + + if (nr3 & 8) + reg = reg & ~(0x80 - (0x80 >> periods)) | xored; + } + + const unsigned long period = toPeriod(nr3); + backupCounter = counter + period; + counter += period * nextStateDistance[reg & 0x3F];*/ +} + +void Channel4::Lfsr::nr3Change(const unsigned newNr3, const unsigned long cc) { + updateBackupCounter(cc); + nr3 = newNr3; + +// if (counter != COUNTER_DISABLED) +// counter = backupCounter + toPeriod(nr3) * (nextStateDistance[reg & 0x3F] - 1); +} + +void Channel4::Lfsr::nr4Init(unsigned long cc) { + disableMaster(); + updateBackupCounter(cc); + master = true; + backupCounter += 4; + counter = backupCounter; +// counter = backupCounter + toPeriod(nr3) * (nextStateDistance[reg & 0x3F] - 1); +} + +void Channel4::Lfsr::reset(const unsigned long cc) { + nr3 = 0; + disableMaster(); + backupCounter = cc + toPeriod(nr3); +} + +void Channel4::Lfsr::resetCounters(const unsigned long oldCc) { + updateBackupCounter(oldCc); + backupCounter -= COUNTER_MAX; + SoundUnit::resetCounters(oldCc); +} + +void Channel4::Lfsr::saveState(SaveState &state, const unsigned long cc) { + updateBackupCounter(cc); + state.spu.ch4.lfsr.counter = backupCounter; + state.spu.ch4.lfsr.reg = reg; +} + +void Channel4::Lfsr::loadState(const SaveState &state) { + counter = backupCounter = std::max(state.spu.ch4.lfsr.counter, state.spu.cycleCounter); + reg = state.spu.ch4.lfsr.reg; + master = state.spu.ch4.master; + nr3 = state.mem.ioamhram.get()[0x122]; +} + +Channel4::Channel4() : + staticOutputTest(*this, lfsr), + disableMaster(master, lfsr), + lengthCounter(disableMaster, 0x3F), + envelopeUnit(staticOutputTest), + cycleCounter(0), + soMask(0), + prevOut(0), + nr4(0), + master(false) +{ + setEvent(); +} + +void Channel4::setEvent() { +// nextEventUnit = &lfsr; +// if (envelopeUnit.getCounter() < nextEventUnit->getCounter()) + nextEventUnit = &envelopeUnit; + if (lengthCounter.getCounter() < nextEventUnit->getCounter()) + nextEventUnit = &lengthCounter; +} + +void Channel4::setNr1(const unsigned data) { + lengthCounter.nr1Change(data, nr4, cycleCounter); + + setEvent(); +} + +void Channel4::setNr2(const unsigned data) { + if (envelopeUnit.nr2Change(data)) + disableMaster(); + else + staticOutputTest(cycleCounter); + + setEvent(); +} + +void Channel4::setNr4(const unsigned data) { + lengthCounter.nr4Change(nr4, data, cycleCounter); + + nr4 = data; + + if (data & 0x80) { //init-bit + nr4 &= 0x7F; + + master = !envelopeUnit.nr4Init(cycleCounter); + + if (master) + lfsr.nr4Init(cycleCounter); + + staticOutputTest(cycleCounter); + } + + setEvent(); +} + +void Channel4::setSo(const unsigned long soMask) { + this->soMask = soMask; + staticOutputTest(cycleCounter); + setEvent(); +} + +void Channel4::reset() { + cycleCounter = 0x1000 | (cycleCounter & 0xFFF); // cycleCounter >> 12 & 7 represents the frame sequencer position. + +// lengthCounter.reset(); + lfsr.reset(cycleCounter); + envelopeUnit.reset(); + + setEvent(); +} + +void Channel4::init(const bool cgb) { + lengthCounter.init(cgb); +} + +void Channel4::saveState(SaveState &state) { + lfsr.saveState(state, cycleCounter); + envelopeUnit.saveState(state.spu.ch4.env); + lengthCounter.saveState(state.spu.ch4.lcounter); + + state.spu.ch4.nr4 = nr4; + state.spu.ch4.master = master; +} + +void Channel4::loadState(const SaveState &state) { + lfsr.loadState(state); + envelopeUnit.loadState(state.spu.ch4.env, state.mem.ioamhram.get()[0x121], state.spu.cycleCounter); + lengthCounter.loadState(state.spu.ch4.lcounter, state.spu.cycleCounter); + + cycleCounter = state.spu.cycleCounter; + nr4 = state.spu.ch4.nr4; + master = state.spu.ch4.master; +} + +void Channel4::update(Gambatte::uint_least32_t *buf, const unsigned long soBaseVol, unsigned long cycles) { + const unsigned long outBase = envelopeUnit.dacIsOn() ? soBaseVol & soMask : 0; + const unsigned long outLow = outBase * (0 - 15ul); + const unsigned long endCycles = cycleCounter + cycles; + + for (;;) { + const unsigned long outHigh = /*master ? */outBase * (envelopeUnit.getVolume() * 2 - 15ul)/* : outLow*/; + const unsigned long nextMajorEvent = nextEventUnit->getCounter() < endCycles ? nextEventUnit->getCounter() : endCycles; + unsigned long out = lfsr.isHighState() ? outHigh : outLow; + + while (lfsr.getCounter() <= nextMajorEvent) { + *buf += out - prevOut; + prevOut = out; + buf += lfsr.getCounter() - cycleCounter; + cycleCounter = lfsr.getCounter(); + + lfsr.event(); + out = lfsr.isHighState() ? outHigh : outLow; + } + + if (cycleCounter < nextMajorEvent) { + *buf += out - prevOut; + prevOut = out; + buf += nextMajorEvent - cycleCounter; + cycleCounter = nextMajorEvent; + } + + if (nextEventUnit->getCounter() == nextMajorEvent) { + nextEventUnit->event(); + setEvent(); + } else + break; + } + + if (cycleCounter & SoundUnit::COUNTER_MAX) { + lengthCounter.resetCounters(cycleCounter); + lfsr.resetCounters(cycleCounter); + envelopeUnit.resetCounters(cycleCounter); + + cycleCounter -= SoundUnit::COUNTER_MAX; + } +} diff --git a/supergameboy/libgambatte/src/sound/channel4.h b/supergameboy/libgambatte/src/sound/channel4.h new file mode 100644 index 00000000..7563dc2c --- /dev/null +++ b/supergameboy/libgambatte/src/sound/channel4.h @@ -0,0 +1,99 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef SOUND_CHANNEL4_H +#define SOUND_CHANNEL4_H + +class SaveState; + +#include "int.h" + +#include "master_disabler.h" +#include "length_counter.h" +#include "envelope_unit.h" +#include "static_output_tester.h" + +class Channel4 { + class Lfsr : public SoundUnit { + unsigned long backupCounter; + unsigned short reg; + unsigned char nr3; + bool master; + + void updateBackupCounter(unsigned long cc); + + public: + Lfsr(); + void event(); + bool isHighState() const { return ~reg & 1; } + void nr3Change(unsigned newNr3, unsigned long cc); + void nr4Init(unsigned long cc); + void reset(unsigned long cc); + void saveState(SaveState &state, const unsigned long cc); + void loadState(const SaveState &state); + void resetCounters(unsigned long oldCc); + void disableMaster() { killCounter(); master = false; reg = 0xFF; } + void killCounter() { counter = COUNTER_DISABLED; } + void reviveCounter(unsigned long cc); + }; + + class Ch4MasterDisabler : public MasterDisabler { + Lfsr &lfsr; + public: + Ch4MasterDisabler(bool &m, Lfsr &lfsr) : MasterDisabler(m), lfsr(lfsr) {} + void operator()() { MasterDisabler::operator()(); lfsr.disableMaster(); } + }; + + friend class StaticOutputTester; + + StaticOutputTester staticOutputTest; + Ch4MasterDisabler disableMaster; + LengthCounter lengthCounter; + EnvelopeUnit envelopeUnit; + Lfsr lfsr; + + SoundUnit *nextEventUnit; + + unsigned long cycleCounter; + unsigned long soMask; + unsigned long prevOut; + + unsigned char nr4; + bool master; + + void setEvent(); + +public: + Channel4(); + void setNr1(unsigned data); + void setNr2(unsigned data); + void setNr3(unsigned data) { lfsr.nr3Change(data, cycleCounter); /*setEvent();*/ } + void setNr4(unsigned data); + + void setSo(unsigned long soMask); + bool isActive() const { return master; } + + void update(Gambatte::uint_least32_t *buf, unsigned long soBaseVol, unsigned long cycles); + + void reset(); + void init(bool cgb); + void saveState(SaveState &state); + void loadState(const SaveState &state); +}; + +#endif diff --git a/supergameboy/libgambatte/src/sound/duty_unit.cpp b/supergameboy/libgambatte/src/sound/duty_unit.cpp new file mode 100644 index 00000000..d3de6abd --- /dev/null +++ b/supergameboy/libgambatte/src/sound/duty_unit.cpp @@ -0,0 +1,148 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "duty_unit.h" +#include + +static inline bool toOutState(const unsigned duty, const unsigned pos) { + static const unsigned char duties[4] = { 0x80, 0x81, 0xE1, 0x7E }; + + return duties[duty] >> pos & 1; +} + +static inline unsigned toPeriod(const unsigned freq) { + return (2048 - freq) << 1; +} + +void DutyUnit::updatePos(const unsigned long cc) { + if (cc >= nextPosUpdate) { + const unsigned long inc = (cc - nextPosUpdate) / period + 1; + nextPosUpdate += period * inc; + pos += inc; + pos &= 7; + } +} + +void DutyUnit::setDuty(const unsigned nr1) { + duty = nr1 >> 6; + high = toOutState(duty, pos); +} + +void DutyUnit::setCounter() { + static const unsigned char nextStateDistance[4 * 8] = { + 6, 5, 4, 3, 2, 1, 0, 0, + 0, 5, 4, 3, 2, 1, 0, 1, + 0, 3, 2, 1, 0, 3, 2, 1, + 0, 5, 4, 3, 2, 1, 0, 1 + }; + + if (enableEvents && nextPosUpdate != COUNTER_DISABLED) + counter = nextPosUpdate + period * nextStateDistance[(duty * 8) | pos]; + else + counter = COUNTER_DISABLED; +} + +void DutyUnit::setFreq(const unsigned newFreq, const unsigned long cc) { + updatePos(cc); + period = toPeriod(newFreq); + setCounter(); +} + +void DutyUnit::event() { + unsigned inc = period << duty; + + if (duty == 3) + inc -= period * 2; + + if (!(high ^= true)) + inc = period * 8 - inc; + + counter += inc; +} + +void DutyUnit::nr1Change(const unsigned newNr1, const unsigned long cc) { + updatePos(cc); + setDuty(newNr1); + setCounter(); +} + +void DutyUnit::nr3Change(const unsigned newNr3, const unsigned long cc) { + setFreq((getFreq() & 0x700) | newNr3, cc); +} + +void DutyUnit::nr4Change(const unsigned newNr4, const unsigned long cc) { + setFreq((newNr4 << 8 & 0x700) | (getFreq() & 0xFF), cc); + + if (newNr4 & 0x80) { + nextPosUpdate = (cc & ~1) + period; + setCounter(); + } +} + +DutyUnit::DutyUnit() : +nextPosUpdate(COUNTER_DISABLED), +period(4096), +pos(0), +duty(0), +high(false), +enableEvents(true) +{} + +void DutyUnit::reset() { + pos = 0; + high = toOutState(duty, pos); + nextPosUpdate = COUNTER_DISABLED; + setCounter(); +} + +void DutyUnit::saveState(SaveState::SPU::Duty &dstate, const unsigned long cc) { + updatePos(cc); + dstate.nextPosUpdate = nextPosUpdate; + dstate.nr3 = getFreq() & 0xFF; + dstate.pos = pos; +} + +void DutyUnit::loadState(const SaveState::SPU::Duty &dstate, const unsigned nr1, const unsigned nr4, const unsigned long cc) { + nextPosUpdate = std::max(dstate.nextPosUpdate, cc); + pos = dstate.pos & 7; + setDuty(nr1); + period = toPeriod((nr4 << 8 & 0x700) | dstate.nr3); + enableEvents = true; + setCounter(); +} + +void DutyUnit::resetCounters(const unsigned long oldCc) { + if (nextPosUpdate == COUNTER_DISABLED) + return; + + updatePos(oldCc); + nextPosUpdate -= COUNTER_MAX; + SoundUnit::resetCounters(oldCc); +} + +void DutyUnit::killCounter() { + enableEvents = false; + setCounter(); +} + +void DutyUnit::reviveCounter(const unsigned long cc) { + updatePos(cc); + high = toOutState(duty, pos); + enableEvents = true; + setCounter(); +} diff --git a/supergameboy/libgambatte/src/sound/duty_unit.h b/supergameboy/libgambatte/src/sound/duty_unit.h new file mode 100644 index 00000000..e55cec59 --- /dev/null +++ b/supergameboy/libgambatte/src/sound/duty_unit.h @@ -0,0 +1,64 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef DUTY_UNIT_H +#define DUTY_UNIT_H + +#include "sound_unit.h" +#include "master_disabler.h" +#include "../savestate.h" + +class DutyUnit : public SoundUnit { + unsigned long nextPosUpdate; + unsigned short period; + unsigned char pos; + unsigned char duty; + bool high; + bool enableEvents; + + void setCounter(); + void setDuty(unsigned nr1); + void updatePos(unsigned long cc); + +public: + DutyUnit(); + void event(); + bool isHighState() const { return high; } + void nr1Change(unsigned newNr1, unsigned long cc); + void nr3Change(unsigned newNr3, unsigned long cc); + void nr4Change(unsigned newNr4, unsigned long cc); + void reset(); + void saveState(SaveState::SPU::Duty &dstate, unsigned long cc); + void loadState(const SaveState::SPU::Duty &dstate, unsigned nr1, unsigned nr4, unsigned long cc); + void resetCounters(unsigned long oldCc); + void killCounter(); + void reviveCounter(unsigned long cc); + + //intended for use by SweepUnit only. + unsigned getFreq() const { return 2048 - (period >> 1); } + void setFreq(unsigned newFreq, unsigned long cc); +}; + +class DutyMasterDisabler : public MasterDisabler { + DutyUnit &dutyUnit; +public: + DutyMasterDisabler(bool &m, DutyUnit &dutyUnit) : MasterDisabler(m), dutyUnit(dutyUnit) {} + void operator()() { MasterDisabler::operator()(); dutyUnit.killCounter(); } +}; + +#endif diff --git a/supergameboy/libgambatte/src/sound/envelope_unit.cpp b/supergameboy/libgambatte/src/sound/envelope_unit.cpp new file mode 100644 index 00000000..ed526eb5 --- /dev/null +++ b/supergameboy/libgambatte/src/sound/envelope_unit.cpp @@ -0,0 +1,101 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "envelope_unit.h" +#include + +EnvelopeUnit::VolOnOffEvent EnvelopeUnit::nullEvent; + +void EnvelopeUnit::event() { + const unsigned long period = nr2 & 7; + + if (period) { + unsigned newVol = volume; + + if (nr2 & 8) + ++newVol; + else + --newVol; + + if (newVol < 0x10U) { + volume = newVol; + + if (volume < 2) + volOnOffEvent(counter); + + counter += period << 15; + } else + counter = COUNTER_DISABLED; + } else + counter += 8ul << 15; +} + +bool EnvelopeUnit::nr2Change(const unsigned newNr2) { + if (!(nr2 & 7) && counter != COUNTER_DISABLED) + ++volume; + else if (!(nr2 & 8)) + volume += 2; + + if ((nr2 ^ newNr2) & 8) + volume = 0x10 - volume; + + volume &= 0xF; + + nr2 = newNr2; + + return !(newNr2 & 0xF8); +} + +bool EnvelopeUnit::nr4Init(const unsigned long cc) { + { + unsigned long period = nr2 & 7; + + if (!period) + period = 8; + + if (!(cc & 0x7000)) + ++period; + + counter = cc - ((cc - 0x1000) & 0x7FFF) + period * 0x8000; + } + + volume = nr2 >> 4; + + return !(nr2 & 0xF8); +} + +EnvelopeUnit::EnvelopeUnit(VolOnOffEvent &volOnOffEvent) : +volOnOffEvent(volOnOffEvent), +nr2(0), +volume(0) +{} + +void EnvelopeUnit::reset() { + counter = COUNTER_DISABLED; +} + +void EnvelopeUnit::saveState(SaveState::SPU::Env &estate) const { + estate.counter = counter; + estate.volume = volume; +} + +void EnvelopeUnit::loadState(const SaveState::SPU::Env &estate, const unsigned nr2, const unsigned long cc) { + counter = std::max(estate.counter, cc); + volume = estate.volume; + this->nr2 = nr2; +} diff --git a/supergameboy/libgambatte/src/sound/envelope_unit.h b/supergameboy/libgambatte/src/sound/envelope_unit.h new file mode 100644 index 00000000..e9bae2f0 --- /dev/null +++ b/supergameboy/libgambatte/src/sound/envelope_unit.h @@ -0,0 +1,50 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef ENVELOPE_UNIT_H +#define ENVELOPE_UNIT_H + +#include "sound_unit.h" +#include "../savestate.h" + +class EnvelopeUnit : public SoundUnit { +public: + struct VolOnOffEvent { + virtual ~VolOnOffEvent() {} + virtual void operator()(unsigned long /*cc*/) {} + }; + +private: + static VolOnOffEvent nullEvent; + VolOnOffEvent &volOnOffEvent; + unsigned char nr2; + unsigned char volume; + +public: + EnvelopeUnit(VolOnOffEvent &volOnOffEvent = nullEvent); + void event(); + bool dacIsOn() const { return nr2 & 0xF8; } + unsigned getVolume() const { return volume; } + bool nr2Change(unsigned newNr2); + bool nr4Init(unsigned long cycleCounter); + void reset(); + void saveState(SaveState::SPU::Env &estate) const; + void loadState(const SaveState::SPU::Env &estate, unsigned nr2, unsigned long cc); +}; + +#endif diff --git a/supergameboy/libgambatte/src/sound/length_counter.cpp b/supergameboy/libgambatte/src/sound/length_counter.cpp new file mode 100644 index 00000000..8bbe85e1 --- /dev/null +++ b/supergameboy/libgambatte/src/sound/length_counter.cpp @@ -0,0 +1,87 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +***************************************************************************/ +#include "length_counter.h" +#include "master_disabler.h" +#include + +LengthCounter::LengthCounter(MasterDisabler &disabler, const unsigned mask) : + disableMaster(disabler), + lengthMask(mask) +{ + init(false); + nr1Change(0, 0, 0); +} + +void LengthCounter::event() { + counter = COUNTER_DISABLED; + lengthCounter = 0; + disableMaster(); +} + +void LengthCounter::nr1Change(const unsigned newNr1, const unsigned nr4, const unsigned long cycleCounter) { + lengthCounter = (~newNr1 & lengthMask) + 1; + counter = (nr4 & 0x40) ?( (cycleCounter >> 13) + lengthCounter) << 13 : static_cast(COUNTER_DISABLED); +} + +void LengthCounter::nr4Change(const unsigned oldNr4, const unsigned newNr4, const unsigned long cycleCounter) { + if (counter != COUNTER_DISABLED) + lengthCounter = (counter >> 13) - (cycleCounter >> 13); + + { + unsigned dec = 0; + + if (newNr4 & 0x40) { + dec = ~cycleCounter >> 12 & 1; + + if (!(oldNr4 & 0x40) && lengthCounter) { + if (!(lengthCounter -= dec)) + disableMaster(); + } + } + + if ((newNr4 & 0x80) && !lengthCounter) + lengthCounter = lengthMask + 1 - dec; + } + + if ((newNr4 & 0x40) && lengthCounter) + counter = ((cycleCounter >> 13) + lengthCounter) << 13; + else + counter = COUNTER_DISABLED; +} + +/*void LengthCounter::reset() { + counter = COUNTER_DISABLED; + + if (cgb) + lengthCounter = lengthMask + 1; +}*/ + +void LengthCounter::init(const bool cgb) { + this->cgb = cgb; +} + +void LengthCounter::saveState(SaveState::SPU::LCounter &lstate) const { + lstate.counter = counter; + lstate.lengthCounter = lengthCounter; +} + +void LengthCounter::loadState(const SaveState::SPU::LCounter &lstate, const unsigned long cc) { + counter = std::max(lstate.counter, cc); + lengthCounter = lstate.lengthCounter; +} diff --git a/supergameboy/libgambatte/src/sound/length_counter.h b/supergameboy/libgambatte/src/sound/length_counter.h new file mode 100644 index 00000000..2d9451d7 --- /dev/null +++ b/supergameboy/libgambatte/src/sound/length_counter.h @@ -0,0 +1,44 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +***************************************************************************/ +#ifndef LENGTH_COUNTER_H +#define LENGTH_COUNTER_H + +#include "sound_unit.h" +#include "../savestate.h" + +class MasterDisabler; + +class LengthCounter : public SoundUnit { + MasterDisabler &disableMaster; + unsigned short lengthCounter; + const unsigned char lengthMask; + bool cgb; + +public: + LengthCounter(MasterDisabler &disabler, unsigned lengthMask); + void event(); + void nr1Change(unsigned newNr1, unsigned nr4, unsigned long cc); + void nr4Change(unsigned oldNr4, unsigned newNr4, unsigned long cc); +// void reset(); + void init(bool cgb); + void saveState(SaveState::SPU::LCounter &lstate) const; + void loadState(const SaveState::SPU::LCounter &lstate, unsigned long cc); +}; + +#endif diff --git a/supergameboy/libgambatte/src/sound/master_disabler.h b/supergameboy/libgambatte/src/sound/master_disabler.h new file mode 100644 index 00000000..7dd588c5 --- /dev/null +++ b/supergameboy/libgambatte/src/sound/master_disabler.h @@ -0,0 +1,31 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +***************************************************************************/ +#ifndef MASTER_DISABLER_H +#define MASTER_DISABLER_H + +class MasterDisabler { + bool &master; + +public: + MasterDisabler(bool &m) : master(m) {} + virtual ~MasterDisabler() {} + virtual void operator()() { master = false; } +}; + +#endif diff --git a/supergameboy/libgambatte/src/sound/sound_unit.h b/supergameboy/libgambatte/src/sound/sound_unit.h new file mode 100644 index 00000000..2857c0c1 --- /dev/null +++ b/supergameboy/libgambatte/src/sound/sound_unit.h @@ -0,0 +1,35 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +***************************************************************************/ +#ifndef SOUND_UNIT_H +#define SOUND_UNIT_H + +class SoundUnit { +protected: + unsigned long counter; +public: + enum { COUNTER_MAX = 0x80000000u, COUNTER_DISABLED = 0xFFFFFFFFu }; + + SoundUnit() : counter(COUNTER_DISABLED) {} + virtual ~SoundUnit() {} + virtual void event() = 0; + unsigned long getCounter() const { return counter; } + virtual void resetCounters(unsigned long /*oldCc*/) { if (counter != COUNTER_DISABLED) counter -= COUNTER_MAX; } +}; + +#endif diff --git a/supergameboy/libgambatte/src/sound/static_output_tester.h b/supergameboy/libgambatte/src/sound/static_output_tester.h new file mode 100644 index 00000000..3dbe216e --- /dev/null +++ b/supergameboy/libgambatte/src/sound/static_output_tester.h @@ -0,0 +1,41 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef STATIC_OUTPUT_TESTER_H +#define STATIC_OUTPUT_TESTER_H + +#include "envelope_unit.h" + +template +class StaticOutputTester : public EnvelopeUnit::VolOnOffEvent { + const Channel &ch; + Unit &unit; +public: + StaticOutputTester(const Channel &ch, Unit &unit) : ch(ch), unit(unit) {} + void operator()(unsigned long cc); +}; + +template +void StaticOutputTester::operator()(const unsigned long cc) { + if (ch.soMask && ch.master && ch.envelopeUnit.getVolume()) + unit.reviveCounter(cc); + else + unit.killCounter(); +} + +#endif diff --git a/supergameboy/libgambatte/src/state_osd_elements.cpp b/supergameboy/libgambatte/src/state_osd_elements.cpp new file mode 100644 index 00000000..44740d16 --- /dev/null +++ b/supergameboy/libgambatte/src/state_osd_elements.cpp @@ -0,0 +1,169 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "state_osd_elements.h" +#include "bitmap_font.h" +#include "statesaver.h" +#include +#include + +using namespace BitmapFont; + +static const char stateLoadedTxt[] = { S,t,a,t,e,SPC,N0,SPC,l,o,a,d,e,d,0 }; +static const char stateSavedTxt[] = { S,t,a,t,e,SPC,N0,SPC,s,a,v,e,d,0 }; +static const unsigned stateLoadedTxtWidth = getWidth(stateLoadedTxt); +static const unsigned stateSavedTxtWidth = getWidth(stateSavedTxt); + +class ShadedTextOsdElment : public OsdElement { + struct ShadeFill { + void operator()(Gambatte::uint_least32_t *dest, const unsigned pitch) { + dest[2] = dest[1] = dest[0] = 0x000000ul; + dest += pitch; + dest[2] = dest[0] = 0x000000ul; + dest += pitch; + dest[2] = dest[1] = dest[0] = 0x000000ul; + } + }; + + Gambatte::uint_least32_t *const pixels; + unsigned life; + +public: + ShadedTextOsdElment(unsigned w, const char *txt); + ~ShadedTextOsdElment(); + const Gambatte::uint_least32_t* update(); +}; + +ShadedTextOsdElment::ShadedTextOsdElment(unsigned width, const char *txt) : +OsdElement(MAX_WIDTH, 144 - HEIGHT - HEIGHT, width + 2, HEIGHT + 2, THREE_FOURTHS), +pixels(new Gambatte::uint_least32_t[w() * h()]), +life(4 * 60) { + std::memset(pixels, 0xFF, w() * h() * sizeof(Gambatte::uint_least32_t)); + + /*print(pixels + 0 * w() + 0, w(), 0x000000ul, txt); + print(pixels + 0 * w() + 1, w(), 0x000000ul, txt); + print(pixels + 0 * w() + 2, w(), 0x000000ul, txt); + print(pixels + 1 * w() + 0, w(), 0x000000ul, txt); + print(pixels + 1 * w() + 2, w(), 0x000000ul, txt); + print(pixels + 2 * w() + 0, w(), 0x000000ul, txt); + print(pixels + 2 * w() + 1, w(), 0x000000ul, txt); + print(pixels + 2 * w() + 2, w(), 0x000000ul, txt); + print(pixels + 1 * w() + 1, w(), 0xE0E0E0ul, txt);*/ + + print(pixels, w(), ShadeFill(), txt); + print(pixels + 1 * w() + 1, w(), 0xE0E0E0ul, txt); +} + +ShadedTextOsdElment::~ShadedTextOsdElment() { + delete []pixels; +} + +const Gambatte::uint_least32_t* ShadedTextOsdElment::update() { + if (life--) + return pixels; + + return 0; +} + +/*class FramedTextOsdElment : public OsdElement { + Gambatte::uint_least32_t *const pixels; + unsigned life; + +public: + FramedTextOsdElment(unsigned w, const char *txt); + ~FramedTextOsdElment(); + const Gambatte::uint_least32_t* update(); +}; + +FramedTextOsdElment::FramedTextOsdElment(unsigned width, const char *txt) : +OsdElement(NUMBER_WIDTH, 144 - HEIGHT * 2 - HEIGHT / 2, width + NUMBER_WIDTH * 2, HEIGHT * 2), +pixels(new Gambatte::uint_least32_t[w() * h()]), +life(4 * 60) { + std::memset(pixels, 0x00, w() * h() * sizeof(Gambatte::uint_least32_t)); + print(pixels + (w() - width) / 2 + ((h() - HEIGHT) / 2) * w(), w(), 0xA0A0A0ul, txt); +} + +FramedTextOsdElment::~FramedTextOsdElment() { + delete []pixels; +} + +const Gambatte::uint_least32_t* FramedTextOsdElment::update() { + if (life--) + return pixels; + + return 0; +}*/ + +std::auto_ptr newStateLoadedOsdElement(unsigned stateNo) { + char txt[sizeof(stateLoadedTxt)]; + + std::memcpy(txt, stateLoadedTxt, sizeof(stateLoadedTxt)); + utoa(stateNo, txt + 6); + + return std::auto_ptr(new ShadedTextOsdElment(stateLoadedTxtWidth, txt)); +} + +std::auto_ptr newStateSavedOsdElement(unsigned stateNo) { + char txt[sizeof(stateSavedTxt)]; + + std::memcpy(txt, stateSavedTxt, sizeof(stateSavedTxt)); + utoa(stateNo, txt + 6); + + return std::auto_ptr(new ShadedTextOsdElment(stateSavedTxtWidth, txt)); +} + +class SaveStateOsdElement : public OsdElement { + Gambatte::uint_least32_t pixels[StateSaver::SS_WIDTH * StateSaver::SS_HEIGHT]; + unsigned life; + +public: + SaveStateOsdElement(const char *fileName, unsigned stateNo); + const Gambatte::uint_least32_t* update(); +}; + +SaveStateOsdElement::SaveStateOsdElement(const char *fileName, unsigned stateNo) : +OsdElement((stateNo ? stateNo - 1 : 9) * ((160 - StateSaver::SS_WIDTH) / 10) + ((160 - StateSaver::SS_WIDTH) / 10) / 2, 4, StateSaver::SS_WIDTH, StateSaver::SS_HEIGHT), +life(4 * 60) { + std::ifstream file(fileName, std::ios_base::binary); + + if (file.is_open()) { + file.ignore(5); + file.read(reinterpret_cast(pixels), sizeof(pixels)); + } else { + std::memset(pixels, 0, sizeof(pixels)); + + { + using namespace BitmapFont; + + static const char txt[] = { E,m,p,t,BitmapFont::y,0 }; + + print(pixels + 3 + (StateSaver::SS_HEIGHT / 2 - BitmapFont::HEIGHT / 2) * StateSaver::SS_WIDTH, StateSaver::SS_WIDTH, 0x808080ul, txt); + } + } +} + +const Gambatte::uint_least32_t* SaveStateOsdElement::update() { + if (life--) + return pixels; + + return 0; +} + +std::auto_ptr newSaveStateOsdElement(const char *fileName, unsigned stateNo) { + return std::auto_ptr(new SaveStateOsdElement(fileName, stateNo)); +} diff --git a/supergameboy/libgambatte/src/state_osd_elements.h b/supergameboy/libgambatte/src/state_osd_elements.h new file mode 100644 index 00000000..c10344d2 --- /dev/null +++ b/supergameboy/libgambatte/src/state_osd_elements.h @@ -0,0 +1,29 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef STATE_OSD_ELEMENTS_H +#define STATE_OSD_ELEMENTS_H + +#include "osd_element.h" +#include + +std::auto_ptr newStateLoadedOsdElement(unsigned stateNo); +std::auto_ptr newStateSavedOsdElement(unsigned stateNo); +std::auto_ptr newSaveStateOsdElement(const char *fileName, unsigned stateNo); + +#endif diff --git a/supergameboy/libgambatte/src/statesaver.cpp b/supergameboy/libgambatte/src/statesaver.cpp new file mode 100644 index 00000000..9b113ee6 --- /dev/null +++ b/supergameboy/libgambatte/src/statesaver.cpp @@ -0,0 +1,407 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "statesaver.h" +#include "savestate.h" +#include "array.h" +#include +#include +#include +#include + +enum AsciiChar { + NUL, SOH, STX, ETX, EOT, ENQ, ACK, BEL, BS, TAB, LF, VT, FF, CR, SO, SI, + DLE, DC1, DC2, DC3, DC4, NAK, SYN, ETB, CAN, EM, SUB, ESC, FS, GS, RS, US, + SP, XCL, QOT, HSH, DLR, PRC, AMP, APO, LPA, RPA, AST, PLU, COM, HYP, STP, DIV, + NO0, NO1, NO2, NO3, NO4, NO5, NO6, NO7, NO8, NO9, CLN, SCL, LT, EQL, GT, QTN, + AT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, + P, Q, R, S, T, U, V, W, X, Y, Z, LBX, BSL, RBX, CAT, UND, + ACN, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, + p, q, r, s, t, u, v, w, x, y, z, LBR, BAR, RBR, TLD, DEL +}; + +struct Saver { + const char *label; + void (*save)(std::ofstream &file, const SaveState &state); + void (*load)(std::ifstream &file, SaveState &state); + unsigned char labelsize; +}; + +static inline bool operator<(const Saver &l, const Saver &r) { + return std::strcmp(l.label, r.label) < 0; +} + +static void put24(std::ofstream &file, const unsigned long data) { + file.put(data >> 16 & 0xFF); + file.put(data >> 8 & 0xFF); + file.put(data & 0xFF); +} + +static void put32(std::ofstream &file, const unsigned long data) { + file.put(data >> 24 & 0xFF); + file.put(data >> 16 & 0xFF); + file.put(data >> 8 & 0xFF); + file.put(data & 0xFF); +} + +static void write(std::ofstream &file, const unsigned char data) { + static const char inf[] = { 0x00, 0x00, 0x01 }; + + file.write(inf, sizeof(inf)); + file.put(data & 0xFF); +} + +static void write(std::ofstream &file, const unsigned short data) { + static const char inf[] = { 0x00, 0x00, 0x02 }; + + file.write(inf, sizeof(inf)); + file.put(data >> 8 & 0xFF); + file.put(data & 0xFF); +} + +static void write(std::ofstream &file, const unsigned long data) { + static const char inf[] = { 0x00, 0x00, 0x04 }; + + file.write(inf, sizeof(inf)); + put32(file, data); +} + +static inline void write(std::ofstream &file, const bool data) { + write(file, static_cast(data)); +} + +static void write(std::ofstream &file, const unsigned char *data, const unsigned long sz) { + put24(file, sz); + file.write(reinterpret_cast(data), sz); +} + +static void write(std::ofstream &file, const bool *data, const unsigned long sz) { + put24(file, sz); + + for (unsigned long i = 0; i < sz; ++i) + file.put(data[i]); +} + +static unsigned long get24(std::ifstream &file) { + unsigned long tmp = file.get() & 0xFF; + + tmp = tmp << 8 | (file.get() & 0xFF); + + return tmp << 8 | (file.get() & 0xFF); +} + +static unsigned long read(std::ifstream &file) { + unsigned long size = get24(file); + + if (size > 4) { + file.ignore(size - 4); + size = 4; + } + + unsigned long out = 0; + + switch (size) { + case 4: out = (out | (file.get() & 0xFF)) << 8; + case 3: out = (out | (file.get() & 0xFF)) << 8; + case 2: out = (out | (file.get() & 0xFF)) << 8; + case 1: out = out | (file.get() & 0xFF); + } + + return out; +} + +static inline void read(std::ifstream &file, unsigned char &data) { + data = read(file) & 0xFF; +} + +static inline void read(std::ifstream &file, unsigned short &data) { + data = read(file) & 0xFFFF; +} + +static inline void read(std::ifstream &file, unsigned long &data) { + data = read(file); +} + +static inline void read(std::ifstream &file, bool &data) { + data = read(file); +} + +static void read(std::ifstream &file, unsigned char *data, unsigned long sz) { + const unsigned long size = get24(file); + + if (size < sz) + sz = size; + + file.read(reinterpret_cast(data), sz); + file.ignore(size - sz); + + if (static_cast(0x100)) { + for (unsigned long i = 0; i < sz; ++i) + data[i] &= 0xFF; + } +} + +static void read(std::ifstream &file, bool *data, unsigned long sz) { + const unsigned long size = get24(file); + + if (size < sz) + sz = size; + + for (unsigned long i = 0; i < sz; ++i) + data[i] = file.get(); + + file.ignore(size - sz); +} + +class SaverList { +public: + typedef std::vector list_t; + typedef list_t::const_iterator const_iterator; + +private: + list_t list; + unsigned char maxLabelsize_; + +public: + SaverList(); + const_iterator begin() const { return list.begin(); } + const_iterator end() const { return list.end(); } + unsigned maxLabelsize() const { return maxLabelsize_; } +}; + +SaverList::SaverList() { +#define ADD(arg) do { \ + struct Func { \ + static void save(std::ofstream &file, const SaveState &state) { write(file, state.arg); } \ + static void load(std::ifstream &file, SaveState &state) { read(file, state.arg); } \ + }; \ + \ + Saver saver = { label, Func::save, Func::load, sizeof label }; \ + list.push_back(saver); \ +} while (0) + +#define ADDPTR(arg) do { \ + struct Func { \ + static void save(std::ofstream &file, const SaveState &state) { write(file, state.arg.get(), state.arg.getSz()); } \ + static void load(std::ifstream &file, SaveState &state) { read(file, state.arg.ptr, state.arg.getSz()); } \ + }; \ + \ + Saver saver = { label, Func::save, Func::load, sizeof label }; \ + list.push_back(saver); \ +} while (0) + + { static const char label[] = { c,c, NUL }; ADD(cpu.cycleCounter); } + { static const char label[] = { p,c, NUL }; ADD(cpu.PC); } + { static const char label[] = { s,p, NUL }; ADD(cpu.SP); } + { static const char label[] = { a, NUL }; ADD(cpu.A); } + { static const char label[] = { b, NUL }; ADD(cpu.B); } + { static const char label[] = { c, NUL }; ADD(cpu.C); } + { static const char label[] = { d, NUL }; ADD(cpu.D); } + { static const char label[] = { e, NUL }; ADD(cpu.E); } + { static const char label[] = { f, NUL }; ADD(cpu.F); } + { static const char label[] = { h, NUL }; ADD(cpu.H); } + { static const char label[] = { l, NUL }; ADD(cpu.L); } + { static const char label[] = { s,k,i,p, NUL }; ADD(cpu.skip); } + { static const char label[] = { h,a,l,t, NUL }; ADD(cpu.halted); } + { static const char label[] = { v,r,a,m, NUL }; ADDPTR(mem.vram); } + { static const char label[] = { s,r,a,m, NUL }; ADDPTR(mem.sram); } + { static const char label[] = { w,r,a,m, NUL }; ADDPTR(mem.wram); } + { static const char label[] = { h,r,a,m, NUL }; ADDPTR(mem.ioamhram); } + { static const char label[] = { l,d,i,v,u,p, NUL }; ADD(mem.div_lastUpdate); } + { static const char label[] = { l,t,i,m,a,u,p, NUL }; ADD(mem.tima_lastUpdate); } + { static const char label[] = { t,m,a,t,i,m,e, NUL }; ADD(mem.tmatime); } + { static const char label[] = { s,e,r,i,a,l,t, NUL }; ADD(mem.next_serialtime); } + { static const char label[] = { l,o,d,m,a,u,p, NUL }; ADD(mem.lastOamDmaUpdate); } + { static const char label[] = { m,i,n,i,n,t,t, NUL }; ADD(mem.minIntTime); } + { static const char label[] = { r,o,m,b,a,n,k, NUL }; ADD(mem.rombank); } + { static const char label[] = { d,m,a,s,r,c, NUL }; ADD(mem.dmaSource); } + { static const char label[] = { d,m,a,d,s,t, NUL }; ADD(mem.dmaDestination); } + { static const char label[] = { r,a,m,b,a,n,k, NUL }; ADD(mem.rambank); } + { static const char label[] = { o,d,m,a,p,o,s, NUL }; ADD(mem.oamDmaPos); } + { static const char label[] = { i,m,e, NUL }; ADD(mem.IME); } + { static const char label[] = { s,r,a,m,o,n, NUL }; ADD(mem.enable_ram); } + { static const char label[] = { r,a,m,b,m,o,d, NUL }; ADD(mem.rambank_mode); } + { static const char label[] = { h,d,m,a, NUL }; ADD(mem.hdma_transfer); } + { static const char label[] = { b,g,p, NUL }; ADDPTR(ppu.bgpData); } + { static const char label[] = { o,b,j,p, NUL }; ADDPTR(ppu.objpData); } + { static const char label[] = { s,p,o,s,b,u,f, NUL }; ADDPTR(ppu.oamReaderBuf); } + { static const char label[] = { s,p,s,z,b,u,f, NUL }; ADDPTR(ppu.oamReaderSzbuf); } + { static const char label[] = { v,c,y,c,l,e,s, NUL }; ADD(ppu.videoCycles); } + { static const char label[] = { e,d,M,NO0,t,i,m, NUL }; ADD(ppu.enableDisplayM0Time); } + { static const char label[] = { w,i,n,y,p,o,s, NUL }; ADD(ppu.winYPos); } + { static const char label[] = { d,r,a,w,c,y,c, NUL }; ADD(ppu.drawStartCycle); } + { static const char label[] = { s,c,r,d,c,y,c, NUL }; ADD(ppu.scReadOffset); } + { static const char label[] = { l,c,d,c, NUL }; ADD(ppu.lcdc); } + { static const char label[] = { s,c,x,NO0, NUL }; ADD(ppu.scx[0]); } + { static const char label[] = { s,c,x,NO1, NUL }; ADD(ppu.scx[1]); } + { static const char label[] = { s,c,y,NO0, NUL }; ADD(ppu.scy[0]); } + { static const char label[] = { s,c,y,NO1, NUL }; ADD(ppu.scy[1]); } + { static const char label[] = { s,c,x,AMP,NO7, NUL }; ADD(ppu.scxAnd7); } + { static const char label[] = { w,e,m,a,s,t,r, NUL }; ADD(ppu.weMaster); } + { static const char label[] = { w,x, NUL }; ADD(ppu.wx); } + { static const char label[] = { w,y, NUL }; ADD(ppu.wy); } + { static const char label[] = { l,y,c,s,k,i,p, NUL }; ADD(ppu.lycIrqSkip); } + { static const char label[] = { s,p,u,c,n,t,r, NUL }; ADD(spu.cycleCounter); } + { static const char label[] = { s,w,p,c,n,t,r, NUL }; ADD(spu.ch1.sweep.counter); } + { static const char label[] = { s,w,p,s,h,d,w, NUL }; ADD(spu.ch1.sweep.shadow); } + { static const char label[] = { s,w,p,n,e,g, NUL }; ADD(spu.ch1.sweep.negging); } + { static const char label[] = { d,u,t,NO1,c,t,r, NUL }; ADD(spu.ch1.duty.nextPosUpdate); } + { static const char label[] = { d,u,t,NO1,p,o,s, NUL }; ADD(spu.ch1.duty.pos); } + { static const char label[] = { e,n,v,NO1,c,t,r, NUL }; ADD(spu.ch1.env.counter); } + { static const char label[] = { e,n,v,NO1,v,o,l, NUL }; ADD(spu.ch1.env.volume); } + { static const char label[] = { l,e,n,NO1,c,t,r, NUL }; ADD(spu.ch1.lcounter.counter); } + { static const char label[] = { l,e,n,NO1,v,a,l, NUL }; ADD(spu.ch1.lcounter.lengthCounter); } + { static const char label[] = { n,r,NO1,NO0, NUL }; ADD(spu.ch1.sweep.nr0); } + { static const char label[] = { n,r,NO1,NO3, NUL }; ADD(spu.ch1.duty.nr3); } + { static const char label[] = { n,r,NO1,NO4, NUL }; ADD(spu.ch1.nr4); } + { static const char label[] = { c,NO1,m,a,s,t,r, NUL }; ADD(spu.ch1.master); } + { static const char label[] = { d,u,t,NO2,c,t,r, NUL }; ADD(spu.ch2.duty.nextPosUpdate); } + { static const char label[] = { d,u,t,NO2,p,o,s, NUL }; ADD(spu.ch2.duty.pos); } + { static const char label[] = { e,n,v,NO2,c,t,r, NUL }; ADD(spu.ch2.env.counter); } + { static const char label[] = { e,n,v,NO2,v,o,l, NUL }; ADD(spu.ch2.env.volume); } + { static const char label[] = { l,e,n,NO2,c,t,r, NUL }; ADD(spu.ch2.lcounter.counter); } + { static const char label[] = { l,e,n,NO2,v,a,l, NUL }; ADD(spu.ch2.lcounter.lengthCounter); } + { static const char label[] = { n,r,NO2,NO3, NUL }; ADD(spu.ch2.duty.nr3); } + { static const char label[] = { n,r,NO2,NO4, NUL }; ADD(spu.ch2.nr4); } + { static const char label[] = { c,NO2,m,a,s,t,r, NUL }; ADD(spu.ch2.master); } + { static const char label[] = { w,a,v,e,r,a,m, NUL }; ADDPTR(spu.ch3.waveRam); } + { static const char label[] = { l,e,n,NO3,c,t,r, NUL }; ADD(spu.ch3.lcounter.counter); } + { static const char label[] = { l,e,n,NO3,v,a,l, NUL }; ADD(spu.ch3.lcounter.lengthCounter); } + { static const char label[] = { w,a,v,e,c,t,r, NUL }; ADD(spu.ch3.waveCounter); } + { static const char label[] = { l,w,a,v,r,d,t, NUL }; ADD(spu.ch3.lastReadTime); } + { static const char label[] = { w,a,v,e,p,o,s, NUL }; ADD(spu.ch3.wavePos); } + { static const char label[] = { w,a,v,s,m,p,l, NUL }; ADD(spu.ch3.sampleBuf); } + { static const char label[] = { n,r,NO3,NO3, NUL }; ADD(spu.ch3.nr3); } + { static const char label[] = { n,r,NO3,NO4, NUL }; ADD(spu.ch3.nr4); } + { static const char label[] = { c,NO3,m,a,s,t,r, NUL }; ADD(spu.ch3.master); } + { static const char label[] = { l,f,s,r,c,t,r, NUL }; ADD(spu.ch4.lfsr.counter); } + { static const char label[] = { l,f,s,r,r,e,g, NUL }; ADD(spu.ch4.lfsr.reg); } + { static const char label[] = { e,n,v,NO4,c,t,r, NUL }; ADD(spu.ch4.env.counter); } + { static const char label[] = { e,n,v,NO4,v,o,l, NUL }; ADD(spu.ch4.env.volume); } + { static const char label[] = { l,e,n,NO4,c,t,r, NUL }; ADD(spu.ch4.lcounter.counter); } + { static const char label[] = { l,e,n,NO4,v,a,l, NUL }; ADD(spu.ch4.lcounter.lengthCounter); } + { static const char label[] = { n,r,NO4,NO4, NUL }; ADD(spu.ch4.nr4); } + { static const char label[] = { c,NO4,m,a,s,t,r, NUL }; ADD(spu.ch4.master); } + { static const char label[] = { r,t,c,b,a,s,e, NUL }; ADD(rtc.baseTime); } + { static const char label[] = { r,t,c,h,a,l,t, NUL }; ADD(rtc.haltTime); } + { static const char label[] = { r,t,c,i,n,d,x, NUL }; ADD(rtc.index); } + { static const char label[] = { r,t,c,d,h, NUL }; ADD(rtc.dataDh); } + { static const char label[] = { r,t,c,d,l, NUL }; ADD(rtc.dataDl); } + { static const char label[] = { r,t,c,h, NUL }; ADD(rtc.dataH); } + { static const char label[] = { r,t,c,m, NUL }; ADD(rtc.dataM); } + { static const char label[] = { r,t,c,s, NUL }; ADD(rtc.dataS); } + { static const char label[] = { r,t,c,l,l,d, NUL }; ADD(rtc.lastLatchData); } + +#undef ADD +#undef ADDPTR +#undef ADDTIME + + list.resize(list.size()); + std::sort(list.begin(), list.end()); + + maxLabelsize_ = 0; + + for (std::size_t i = 0; i < list.size(); ++i) { + if (list[i].labelsize > maxLabelsize_) + maxLabelsize_ = list[i].labelsize; + } +} + +static void writeSnapShot(std::ofstream &file, const Gambatte::uint_least32_t *pixels, const unsigned pitch) { + put24(file, pixels ? StateSaver::SS_WIDTH * StateSaver::SS_HEIGHT * sizeof(Gambatte::uint_least32_t) : 0); + + if (pixels) { + Gambatte::uint_least32_t buf[StateSaver::SS_WIDTH]; + + for (unsigned h = StateSaver::SS_HEIGHT; h--;) { + for (unsigned x = 0; x < StateSaver::SS_WIDTH; ++x) { + unsigned long rb = 0; + unsigned long g = 0; + + static const unsigned w[StateSaver::SS_DIV] = { 3, 5, 5, 3 }; + + for (unsigned y = 0; y < StateSaver::SS_DIV; ++y) + for (unsigned xx = 0; xx < StateSaver::SS_DIV; ++xx) { + rb += (pixels[x * StateSaver::SS_DIV + y * pitch + xx] & 0xFF00FF) * w[y] * w[xx]; + g += (pixels[x * StateSaver::SS_DIV + y * pitch + xx] & 0x00FF00) * w[y] * w[xx]; + } + + buf[x] = (rb >> 8 & 0xFF00FF) | (g >> 8 & 0x00FF00); + } + + file.write(reinterpret_cast(buf), sizeof(buf)); + pixels += pitch * StateSaver::SS_DIV; + } + } +} + +static SaverList list; + +void StateSaver::saveState(const SaveState &state, const char *filename) { + std::ofstream file(filename, std::ios_base::binary); + + if (file.fail()) + return; + + { static const char ver[] = { 0, 0 }; file.write(ver, sizeof(ver)); } + + writeSnapShot(file, state.ppu.drawBuffer.get(), state.ppu.drawBuffer.getSz() / 144); + + for (SaverList::const_iterator it = list.begin(); it != list.end(); ++it) { + file.write(it->label, it->labelsize); + (*it->save)(file, state); + } +} + +bool StateSaver::loadState(SaveState &state, const char *filename) { + std::ifstream file(filename, std::ios_base::binary); + + if (file.fail() || file.get() != 0) + return false; + + file.ignore(); + file.ignore(get24(file)); + + Array labelbuf(list.maxLabelsize()); + const Saver labelbufSaver = { label: labelbuf, save: 0, load: 0, labelsize: list.maxLabelsize() }; + + SaverList::const_iterator done = list.begin(); + + while (file.good() && done != list.end()) { + file.getline(labelbuf, list.maxLabelsize(), NUL); + + SaverList::const_iterator it = done; + + if (std::strcmp(labelbuf, it->label)) { + it = std::lower_bound(it + 1, list.end(), labelbufSaver); + + if (it == list.end() || std::strcmp(labelbuf, it->label)) { + file.ignore(get24(file)); + continue; + } + } else + ++done; + + (*it->load)(file, state); + } + + state.cpu.cycleCounter &= 0x7FFFFFFF; + state.spu.cycleCounter &= 0x7FFFFFFF; + + return true; +} diff --git a/supergameboy/libgambatte/src/statesaver.h b/supergameboy/libgambatte/src/statesaver.h new file mode 100644 index 00000000..ea9ce8b3 --- /dev/null +++ b/supergameboy/libgambatte/src/statesaver.h @@ -0,0 +1,37 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef STATESAVER_H +#define STATESAVER_H + +class SaveState; + +class StateSaver { + StateSaver(); + +public: + enum { SS_SHIFT = 2 }; + enum { SS_DIV = 1 << 2 }; + enum { SS_WIDTH = 160 >> SS_SHIFT }; + enum { SS_HEIGHT = 144 >> SS_SHIFT }; + + static void saveState(const SaveState &state, const char *filename); + static bool loadState(SaveState &state, const char *filename); +}; + +#endif diff --git a/supergameboy/libgambatte/src/video.cpp b/supergameboy/libgambatte/src/video.cpp new file mode 100644 index 00000000..875afa43 --- /dev/null +++ b/supergameboy/libgambatte/src/video.cpp @@ -0,0 +1,1474 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "video.h" +#include "videoblitter.h" +#include "video/filters/filter.h" +#include "video/filters/catrom2x.h" +#include "video/filters/catrom3x.h" +#include "video/filters/kreed2xsai.h" +#include "video/filters/maxsthq2x.h" +#include "video/filters/maxsthq3x.h" +#include "filterinfo.h" +#include "savestate.h" +#include "video/basic_add_event.h" +#include +#include + +static void addEventIfActivated(event_queue &q, VideoEvent *const e, const unsigned long newTime) { + e->setTime(newTime); + + if (newTime != VideoEvent::DISABLED_TIME) + q.push(e); +} + +void LCD::setDmgPalette(unsigned long *const palette, const unsigned long *const dmgColors, const unsigned data) { + palette[0] = dmgColors[data & 3]; + palette[1] = dmgColors[data >> 2 & 3]; + palette[2] = dmgColors[data >> 4 & 3]; + palette[3] = dmgColors[data >> 6 & 3]; +} + +unsigned long LCD::gbcToRgb32(const unsigned bgr15) { + const unsigned long r = bgr15 & 0x1F; + const unsigned long g = bgr15 >> 5 & 0x1F; + const unsigned long b = bgr15 >> 10 & 0x1F; + + return ((r * 13 + g * 2 + b) >> 1) << 16 | ((g * 3 + b) << 9) | ((r * 3 + g * 2 + b * 11) >> 1); +} + +unsigned long LCD::gbcToRgb16(const unsigned bgr15) { + const unsigned r = bgr15 & 0x1F; + const unsigned g = bgr15 >> 5 & 0x1F; + const unsigned b = bgr15 >> 10 & 0x1F; + + return (((r * 13 + g * 2 + b + 8) << 7) & 0xF800) | ((g * 3 + b + 1) >> 1) << 5 | ((r * 3 + g * 2 + b * 11 + 8) >> 4); +} + +unsigned long LCD::gbcToUyvy(const unsigned bgr15) { + const unsigned r5 = bgr15 & 0x1F; + const unsigned g5 = bgr15 >> 5 & 0x1F; + const unsigned b5 = bgr15 >> 10 & 0x1F; + + // y = (r5 * 926151 + g5 * 1723530 + b5 * 854319) / 510000 + 16; + // u = (b5 * 397544 - r5 * 68824 - g5 * 328720) / 225930 + 128; + // v = (r5 * 491176 - g5 * 328720 - b5 * 162456) / 178755 + 128; + + const unsigned long y = (r5 * 116 + g5 * 216 + b5 * 107 + 16 * 64 + 32) >> 6; + const unsigned long u = (b5 * 225 - r5 * 39 - g5 * 186 + 128 * 128 + 64) >> 7; + const unsigned long v = (r5 * 176 - g5 * 118 - b5 * 58 + 128 * 64 + 32) >> 6; + +#ifdef WORDS_BIGENDIAN + return u << 24 | y << 16 | v << 8 | y; +#else + return y << 24 | v << 16 | y << 8 | u; +#endif +} + +LCD::LCD(const unsigned char *const oamram, const unsigned char *const vram_in) : + vram(vram_in), + bgTileData(vram), + bgTileMap(vram + 0x1800), + wdTileMap(bgTileMap), + vBlitter(NULL), + filter(NULL), + dbuffer(NULL), + draw(NULL), + gbcToFormat(gbcToRgb32), + dmgColors(dmgColorsRgb32), + lastUpdate(0), + videoCycles(0), + dpitch(0), + winYPos(0), + m3EventQueue(11, VideoEventComparer()), + irqEventQueue(4, VideoEventComparer()), + vEventQueue(5, VideoEventComparer()), + win(m3EventQueue, lyCounter, m3ExtraCycles), + scxReader(m3EventQueue, /*wyReg.reader3(),*/ win.wxReader, win.we.enableChecker(), win.we.disableChecker(), m3ExtraCycles), + spriteMapper(m3ExtraCycles, lyCounter, oamram), + m3ExtraCycles(spriteMapper, scxReader, win), + breakEvent(drawStartCycle, scReadOffset), + mode3Event(m3EventQueue, vEventQueue, mode0Irq, irqEvent), + lycIrq(ifReg), + mode0Irq(lyCounter, lycIrq, m3ExtraCycles, ifReg), + mode1Irq(ifReg), + mode2Irq(lyCounter, lycIrq, ifReg), + irqEvent(irqEventQueue), + drawStartCycle(90), + scReadOffset(90), + ifReg(0), + tileIndexSign(0), + statReg(0), + doubleSpeed(false), + enabled(false), + cgb(false), + bgEnable(false), + spriteEnable(false) +{ + std::memset(bgpData, 0, sizeof(bgpData)); + std::memset(objpData, 0, sizeof(objpData)); + + for (unsigned i = 0; i < sizeof(dmgColorsRgb32) / sizeof(unsigned long); ++i) { + setDmgPaletteColor(i, (3 - (i & 3)) * 85 * 0x010101); + } + + filters.push_back(NULL); + filters.push_back(new Catrom2x); + filters.push_back(new Catrom3x); + filters.push_back(new Kreed_2xSaI); + filters.push_back(new MaxSt_Hq2x); + filters.push_back(new MaxSt_Hq3x); + + reset(oamram, false); + setDoubleSpeed(false); + + setVideoFilter(0); +} + +LCD::~LCD() { +// delete []filter_buffer; + for (std::size_t i = 0; i < filters.size(); ++i) + delete filters[i]; +} + +void LCD::reset(const unsigned char *const oamram, const bool cgb_in) { + cgb = cgb_in; + spriteMapper.reset(oamram, cgb_in); + setDBuffer(); +} + +void LCD::resetVideoState(const unsigned long cycleCounter) { + vEventQueue.clear(); + m3EventQueue.clear(); + irqEventQueue.clear(); + + lyCounter.reset(videoCycles, lastUpdate); + vEventQueue.push(&lyCounter); + + spriteMapper.resetVideoState(); + m3ExtraCycles.invalidateCache(); + + addEventIfActivated(m3EventQueue, &scxReader, ScxReader::schedule(lyCounter, cycleCounter)); + addEventIfActivated(m3EventQueue, &win.wxReader, WxReader::schedule(scxReader.scxAnd7(), lyCounter, win.wxReader, cycleCounter)); + addEventIfActivated(m3EventQueue, &win.wyReg.reader1(), Wy::WyReader1::schedule(lyCounter, cycleCounter)); + addEventIfActivated(m3EventQueue, &win.wyReg.reader2(), Wy::WyReader2::schedule(lyCounter, cycleCounter)); + addEventIfActivated(m3EventQueue, &win.wyReg.reader3(), Wy::WyReader3::schedule(win.wxReader.getSource(), scxReader, lyCounter, cycleCounter)); + addEventIfActivated(m3EventQueue, &win.wyReg.reader4(), Wy::WyReader4::schedule(lyCounter, cycleCounter)); + addEventIfActivated(m3EventQueue, &spriteMapper, SpriteMapper::schedule(lyCounter, cycleCounter)); + addEventIfActivated(m3EventQueue, &win.we.enableChecker(), We::WeEnableChecker::schedule(scxReader.scxAnd7(), win.wxReader.wx(), lyCounter, cycleCounter)); + addEventIfActivated(m3EventQueue, &win.we.disableChecker(), We::WeDisableChecker::schedule(scxReader.scxAnd7(), win.wxReader.wx(), lyCounter, cycleCounter)); + addEventIfActivated(m3EventQueue, &win.weMasterChecker, WeMasterChecker::schedule(win.wyReg.getSource(), win.we.getSource(), lyCounter, cycleCounter)); + + addEventIfActivated(irqEventQueue, &lycIrq, LycIrq::schedule(statReg, lycIrq.lycReg(), lyCounter, cycleCounter)); + addEventIfActivated(irqEventQueue, &mode0Irq, Mode0Irq::schedule(statReg, m3ExtraCycles, lyCounter, cycleCounter)); + addEventIfActivated(irqEventQueue, &mode1Irq, Mode1Irq::schedule(lyCounter, cycleCounter)); + addEventIfActivated(irqEventQueue, &mode2Irq, Mode2Irq::schedule(statReg, lyCounter, cycleCounter)); + + addEventIfActivated(vEventQueue, &mode3Event, Mode3Event::schedule(m3EventQueue)); + addEventIfActivated(vEventQueue, &irqEvent, IrqEvent::schedule(irqEventQueue)); + addEventIfActivated(vEventQueue, &scReader, ScReader::schedule(lastUpdate, videoCycles, scReadOffset, doubleSpeed)); + addEventIfActivated(vEventQueue, &breakEvent, BreakEvent::schedule(lyCounter)); +} + +void LCD::setDoubleSpeed(const bool ds) { + doubleSpeed = ds; + lyCounter.setDoubleSpeed(doubleSpeed); + scxReader.setDoubleSpeed(doubleSpeed); + win.wxReader.setDoubleSpeed(doubleSpeed); + scReader.setDoubleSpeed(doubleSpeed); + breakEvent.setDoubleSpeed(doubleSpeed); + lycIrq.setDoubleSpeed(doubleSpeed); + mode1Irq.setDoubleSpeed(doubleSpeed); +} + +void LCD::setStatePtrs(SaveState &state) { + state.ppu.drawBuffer.set(static_cast(dbuffer), dpitch * 144); + state.ppu.bgpData.set(bgpData, sizeof bgpData); + state.ppu.objpData.set(objpData, sizeof objpData); + spriteMapper.setStatePtrs(state); +} + +void LCD::saveState(SaveState &state) const { + state.ppu.videoCycles = videoCycles; + state.ppu.winYPos = winYPos; + state.ppu.drawStartCycle = drawStartCycle; + state.ppu.scReadOffset = scReadOffset; + state.ppu.lcdc = enabled << 7 | ((wdTileMap - vram - 0x1800) >> 4) | (tileIndexSign ^ 0x80) >> 3 | ((bgTileMap - vram - 0x1800) >> 7) | spriteEnable << 1 | bgEnable; + state.ppu.lycIrqSkip = lycIrq.skips(); + + spriteMapper.saveState(state); + scReader.saveState(state); + scxReader.saveState(state); + win.weMasterChecker.saveState(state); + win.wxReader.saveState(state); + win.wyReg.saveState(state); + win.we.saveState(state); +} + +void LCD::loadState(const SaveState &state, const unsigned char *oamram) { + statReg = state.mem.ioamhram.get()[0x141]; + ifReg = 0; + + setDoubleSpeed(cgb & state.mem.ioamhram.get()[0x14D] >> 7); + + lastUpdate = state.cpu.cycleCounter; + videoCycles = std::min(state.ppu.videoCycles, 70223ul); + winYPos = state.ppu.winYPos > 143 ? 0xFF : state.ppu.winYPos; + drawStartCycle = state.ppu.drawStartCycle; + scReadOffset = state.ppu.scReadOffset; + enabled = state.ppu.lcdc >> 7 & 1; + wdTileMap = vram + 0x1800 + (state.ppu.lcdc >> 6 & 1) * 0x400; + tileIndexSign = ((state.ppu.lcdc >> 4 & 1) ^ 1) * 0x80; + bgTileData = vram + ((state.ppu.lcdc >> 4 & 1) ^ 1) * 0x1000; + bgTileMap = vram + 0x1800 + (state.ppu.lcdc >> 3 & 1) * 0x400; + spriteEnable = state.ppu.lcdc >> 1 & 1; + bgEnable = state.ppu.lcdc & 1; + + lycIrq.setM2IrqEnabled(statReg >> 5 & 1); + lycIrq.setLycReg(state.mem.ioamhram.get()[0x145]); + lycIrq.setSkip(state.ppu.lycIrqSkip); + mode1Irq.setM1StatIrqEnabled(statReg >> 4 & 1); + + win.we.setSource(state.mem.ioamhram.get()[0x140] >> 5 & 1); + spriteMapper.setLargeSpritesSource(state.mem.ioamhram.get()[0x140] >> 2 & 1); + scReader.setScySource(state.mem.ioamhram.get()[0x142]); + scxReader.setSource(state.mem.ioamhram.get()[0x143]); + breakEvent.setScxSource(state.mem.ioamhram.get()[0x143]); + scReader.setScxSource(state.mem.ioamhram.get()[0x143]); + win.wyReg.setSource(state.mem.ioamhram.get()[0x14A]); + win.wxReader.setSource(state.mem.ioamhram.get()[0x14B]); + + spriteMapper.loadState(state); + scReader.loadState(state); + scxReader.loadState(state); + win.weMasterChecker.loadState(state); + win.wxReader.loadState(state); + win.wyReg.loadState(state); + win.we.loadState(state); + + resetVideoState(lastUpdate); + spriteMapper.oamChange(oamram, lastUpdate); + refreshPalettes(); +} + +void LCD::refreshPalettes() { + if (cgb) { + for (unsigned i = 0; i < 8 * 8; i += 2) { + bgPalette[i >> 1] = (*gbcToFormat)(bgpData[i] | bgpData[i + 1] << 8); + spPalette[i >> 1] = (*gbcToFormat)(objpData[i] | objpData[i + 1] << 8); + } + } else { + setDmgPalette(bgPalette, dmgColors, bgpData[0]); + setDmgPalette(spPalette, dmgColors + 4, objpData[0]); + setDmgPalette(spPalette + 4, dmgColors + 8, objpData[1]); + } +} + +void LCD::setVideoBlitter(Gambatte::VideoBlitter *vb) { + vBlitter = vb; + + if (vBlitter) { + vBlitter->setBufferDimensions(videoWidth(), videoHeight()); + pb = vBlitter->inBuffer(); + } + + setDBuffer(); +} + +void LCD::videoBufferChange() { + if (vBlitter) { + pb = vBlitter->inBuffer(); + setDBuffer(); + } +} + +void LCD::setVideoFilter(const unsigned n) { + const unsigned oldw = videoWidth(); + const unsigned oldh = videoHeight(); + + if (filter) + filter->outit(); + + filter = filters.at(n < filters.size() ? n : 0); + + if (filter) { + filter->init(); + } + + if (vBlitter && (oldw != videoWidth() || oldh != videoHeight())) { + vBlitter->setBufferDimensions(videoWidth(), videoHeight()); + pb = vBlitter->inBuffer(); + } + + setDBuffer(); +} + +std::vector LCD::filterInfo() const { + std::vector v; + + static Gambatte::FilterInfo noInfo = { "None", 160, 144 }; + v.push_back(&noInfo); + + for (std::size_t i = 1; i < filters.size(); ++i) + v.push_back(&filters[i]->info()); + + return v; +} + +unsigned int LCD::videoWidth() const { + return filter ? filter->info().outWidth : 160; +} + +unsigned int LCD::videoHeight() const { + return filter ? filter->info().outHeight : 144; +} + +template +static void blitOsdElement(Gambatte::uint_least32_t *d, const Gambatte::uint_least32_t *s, const unsigned width, unsigned h, const unsigned dpitch, Blend blend) { + while (h--) { + for (unsigned w = width; w--;) { + if (*s != 0xFFFFFFFF) + *d = blend(*s, *d); + + ++d; + ++s; + } + + d += dpitch - width; + } +} + +template +struct Blend { + enum { SW = weight - 1 }; + enum { LOWMASK = SW * 0x010101ul }; + Gambatte::uint_least32_t operator()(const Gambatte::uint_least32_t s, const Gambatte::uint_least32_t d) const { + return (s * SW + d - (((s & LOWMASK) * SW + (d & LOWMASK)) & LOWMASK)) / weight; + } +}; + +void LCD::updateScreen(const unsigned long cycleCounter) { + update(cycleCounter); + + if (pb.pixels) { + if (dbuffer && osdElement.get()) { + const Gambatte::uint_least32_t *s = osdElement->update(); + + if (s) { + Gambatte::uint_least32_t *d = static_cast(dbuffer) + osdElement->y() * dpitch + osdElement->x(); + + switch (osdElement->opacity()) { + case OsdElement::SEVEN_EIGHTHS: blitOsdElement(d, s, osdElement->w(), osdElement->h(), dpitch, Blend<8>()); break; + case OsdElement::THREE_FOURTHS: blitOsdElement(d, s, osdElement->w(), osdElement->h(), dpitch, Blend<4>()); break; + } + } else + osdElement.reset(); + } + + if (filter) { + filter->filter(static_cast(tmpbuf ? tmpbuf : pb.pixels), (tmpbuf ? videoWidth() : pb.pitch)); + } + + if (tmpbuf) { + switch (pb.format) { + case Gambatte::PixelBuffer::RGB16: + rgb32ToRgb16(tmpbuf, static_cast(pb.pixels), videoWidth(), videoHeight(), pb.pitch); + break; + case Gambatte::PixelBuffer::UYVY: + rgb32ToUyvy(tmpbuf, static_cast(pb.pixels), videoWidth(), videoHeight(), pb.pitch); + break; + default: break; + } + } + + if (vBlitter) + vBlitter->blit(); + } +} + +template +static void clear(T *buf, const unsigned long color, const unsigned dpitch) { + unsigned lines = 144; + + while (lines--) { + std::fill_n(buf, 160, color); + buf += dpitch; + } +} + +void LCD::enableChange(const unsigned long cycleCounter) { + update(cycleCounter); + enabled = !enabled; + + if (enabled) { + lycIrq.setSkip(false); + videoCycles = 0; + lastUpdate = cycleCounter; + winYPos = 0xFF; + win.weMasterChecker.unset(); + spriteMapper.enableDisplay(cycleCounter); + resetVideoState(cycleCounter); + } + + if (!enabled && dbuffer) { + const unsigned long color = cgb ? (*gbcToFormat)(0xFFFF) : dmgColors[0]; + + clear(static_cast(dbuffer), color, dpitch); + +// updateScreen(cycleCounter); + } +} + +//FIXME: needs testing +void LCD::lyWrite(const unsigned long cycleCounter) { + update(cycleCounter); + lycIrq.setSkip(false); + videoCycles = 0; + lastUpdate = cycleCounter; + winYPos = 0xFF; + win.weMasterChecker.unset(); + resetVideoState(cycleCounter); + +// if ((statReg & 0x40) && lycIrq.lycReg() == 0) +// ifReg |= 2; +} + +void LCD::preResetCounter(const unsigned long cycleCounter) { + preSpeedChange(cycleCounter); +} + +void LCD::postResetCounter(const unsigned long oldCC, const unsigned long cycleCounter) { + lastUpdate = cycleCounter - (oldCC - lastUpdate); + spriteMapper.resetCycleCounter(oldCC, cycleCounter); + resetVideoState(cycleCounter); +} + +void LCD::preSpeedChange(const unsigned long cycleCounter) { + update(cycleCounter); + spriteMapper.preCounterChange(cycleCounter); +} + +void LCD::postSpeedChange(const unsigned long cycleCounter) { + setDoubleSpeed(!doubleSpeed); + + resetVideoState(cycleCounter); +} + +bool LCD::isMode0IrqPeriod(const unsigned long cycleCounter) { + if (cycleCounter >= vEventQueue.top()->time()) + update(cycleCounter); + + const unsigned timeToNextLy = lyCounter.time() - cycleCounter; + + return /*memory.enable_display && */lyCounter.ly() < 144 && timeToNextLy <= (456U - (169 + doubleSpeed * 3U + 80 + m3ExtraCycles(lyCounter.ly()) + 1 - doubleSpeed)) << doubleSpeed && timeToNextLy > 4; +} + +bool LCD::isMode2IrqPeriod(const unsigned long cycleCounter) { + if (cycleCounter >= lyCounter.time()) + update(cycleCounter); + + const unsigned nextLy = lyCounter.time() - cycleCounter; + + return /*memory.enable_display && */lyCounter.ly() < 143 && nextLy <= 4; +} + +bool LCD::isLycIrqPeriod(const unsigned lycReg, const unsigned endCycles, const unsigned long cycleCounter) { + if (cycleCounter >= lyCounter.time()) + update(cycleCounter); + + const unsigned timeToNextLy = lyCounter.time() - cycleCounter; + + return (lyCounter.ly() == lycReg && timeToNextLy > endCycles) || (lycReg == 0 && lyCounter.ly() == 153 && timeToNextLy <= (456U - 8U) << doubleSpeed); +} + +bool LCD::isMode1IrqPeriod(const unsigned long cycleCounter) { + if (cycleCounter >= lyCounter.time()) + update(cycleCounter); + + const unsigned timeToNextLy = lyCounter.time() - cycleCounter; + + return lyCounter.ly() > 143 && (lyCounter.ly() < 153 || timeToNextLy > 4U - doubleSpeed * 4U); +} + +bool LCD::isHdmaPeriod(const unsigned long cycleCounter) { + if (cycleCounter >= vEventQueue.top()->time()) + update(cycleCounter); + + const unsigned timeToNextLy = lyCounter.time() - cycleCounter; + + return /*memory.enable_display && */lyCounter.ly() < 144 && timeToNextLy <= ((456U - (169U + doubleSpeed * 3U + 80U + m3ExtraCycles(lyCounter.ly()) + 2 - doubleSpeed)) << doubleSpeed) && timeToNextLy > 4; +} + +unsigned long LCD::nextHdmaTime(const unsigned long cycleCounter) { + if (cycleCounter >= vEventQueue.top()->time()) + update(cycleCounter); + + unsigned line = lyCounter.ly(); + int next = static_cast(169 + doubleSpeed * 3U + 80 + 2 - doubleSpeed) - static_cast(lyCounter.lineCycles(cycleCounter)); + + if (line < 144 && next + static_cast(m3ExtraCycles(line)) <= 0) { + next += 456; + ++line; + } + + if (line > 143) { + next += (154 - line) * 456; + line = 0; + } + + next += m3ExtraCycles(line); + + return cycleCounter + (static_cast(next) << doubleSpeed); +} + +bool LCD::vramAccessible(const unsigned long cycleCounter) { + if (cycleCounter >= vEventQueue.top()->time()) + update(cycleCounter); + + bool accessible = true; + + if (enabled && lyCounter.ly() < 144) { + const unsigned lineCycles = lyCounter.lineCycles(cycleCounter); + + if (lineCycles > 79 && lineCycles < 80 + 169 + doubleSpeed * 3U + m3ExtraCycles(lyCounter.ly())) + accessible = false; + } + + return accessible; +} + +bool LCD::cgbpAccessible(const unsigned long cycleCounter) { + if (cycleCounter >= vEventQueue.top()->time()) + update(cycleCounter); + + bool accessible = true; + + if (enabled && lyCounter.ly() < 144) { + const unsigned lineCycles = lyCounter.lineCycles(cycleCounter); + + if (lineCycles > 79U + doubleSpeed && lineCycles < 80U + 169U + doubleSpeed * 3U + m3ExtraCycles(lyCounter.ly()) + 4U - doubleSpeed * 2U) + accessible = false; + } + + return accessible; +} + +bool LCD::oamAccessible(const unsigned long cycleCounter) { + bool accessible = true; + + if (enabled) { + if (cycleCounter >= vEventQueue.top()->time()) + update(cycleCounter); + + accessible = spriteMapper.oamAccessible(cycleCounter); + } + + return accessible; +} + +void LCD::weChange(const bool newValue, const unsigned long cycleCounter) { + if (cycleCounter >= vEventQueue.top()->time()) + update(cycleCounter); + + win.we.setSource(newValue); + addFixedtimeEvent(m3EventQueue, &win.weMasterChecker, WeMasterChecker::schedule(win.wyReg.getSource(), newValue, lyCounter, cycleCounter)); + addFixedtimeEvent(m3EventQueue, &win.we.disableChecker(), We::WeDisableChecker::schedule(scxReader.scxAnd7(), win.wxReader.wx(), lyCounter, cycleCounter)); + addFixedtimeEvent(m3EventQueue, &win.we.enableChecker(), We::WeEnableChecker::schedule(scxReader.scxAnd7(), win.wxReader.wx(), lyCounter, cycleCounter)); + addUnconditionalEvent(vEventQueue, &mode3Event, Mode3Event::schedule(m3EventQueue)); +} + +void LCD::wxChange(const unsigned newValue, const unsigned long cycleCounter) { + if (cycleCounter >= vEventQueue.top()->time()) + update(cycleCounter); + + win.wxReader.setSource(newValue); + addEvent(m3EventQueue, &win.wxReader, WxReader::schedule(scxReader.scxAnd7(), lyCounter, win.wxReader, cycleCounter)); + + if (win.wyReg.reader3().time() != VideoEvent::DISABLED_TIME) + addEvent(m3EventQueue, &win.wyReg.reader3(), Wy::WyReader3::schedule(win.wxReader.getSource(), scxReader, lyCounter, cycleCounter)); + + addUnconditionalEvent(vEventQueue, &mode3Event, Mode3Event::schedule(m3EventQueue)); +} + +void LCD::wyChange(const unsigned newValue, const unsigned long cycleCounter) { + if (cycleCounter >= vEventQueue.top()->time()) + update(cycleCounter); + + win.wyReg.setSource(newValue); + addFixedtimeEvent(m3EventQueue, &win.wyReg.reader1(), Wy::WyReader1::schedule(lyCounter, cycleCounter)); + addFixedtimeEvent(m3EventQueue, &win.wyReg.reader2(), Wy::WyReader2::schedule(lyCounter, cycleCounter)); + addFixedtimeEvent(m3EventQueue, &win.wyReg.reader3(), Wy::WyReader3::schedule(win.wxReader.getSource(), scxReader, lyCounter, cycleCounter)); + addFixedtimeEvent(m3EventQueue, &win.wyReg.reader4(), Wy::WyReader4::schedule(lyCounter, cycleCounter)); + addEvent(m3EventQueue, &win.weMasterChecker, WeMasterChecker::schedule(win.wyReg.getSource(), win.we.getSource(), lyCounter, cycleCounter)); + addUnconditionalEvent(vEventQueue, &mode3Event, Mode3Event::schedule(m3EventQueue)); +} + +void LCD::scxChange(const unsigned newScx, const unsigned long cycleCounter) { + update(cycleCounter); + + scxReader.setSource(newScx); + breakEvent.setScxSource(newScx); + scReader.setScxSource(newScx); + + addFixedtimeEvent(m3EventQueue, &scxReader, ScxReader::schedule(lyCounter, cycleCounter)); + + if (win.wyReg.reader3().time() != VideoEvent::DISABLED_TIME) + addEvent(m3EventQueue, &win.wyReg.reader3(), Wy::WyReader3::schedule(win.wxReader.getSource(), scxReader, lyCounter, cycleCounter)); + + addUnconditionalEvent(vEventQueue, &mode3Event, Mode3Event::schedule(m3EventQueue)); + + const unsigned lineCycles = lyCounter.lineCycles(cycleCounter); + + if (lineCycles < 82U + doubleSpeed * 4U) + drawStartCycle = 90 + doubleSpeed * 4U + (newScx & 7); + else + addFixedtimeEvent(vEventQueue, &breakEvent, BreakEvent::schedule(lyCounter)); + + if (lineCycles < 86U + doubleSpeed * 2U) + scReadOffset = std::max(drawStartCycle - (newScx & 7), 90U + doubleSpeed * 4U); + + addEvent(vEventQueue, &scReader, ScReader::schedule(lastUpdate, videoCycles, scReadOffset, doubleSpeed)); +} + +void LCD::scyChange(const unsigned newValue, const unsigned long cycleCounter) { + update(cycleCounter); + + scReader.setScySource(newValue); + addFixedtimeEvent(vEventQueue, &scReader, ScReader::schedule(lastUpdate, videoCycles, scReadOffset, doubleSpeed)); +} + +void LCD::spriteSizeChange(const bool newLarge, const unsigned long cycleCounter) { + update(cycleCounter); + + spriteMapper.oamChange(cycleCounter); + spriteMapper.setLargeSpritesSource(newLarge); + addFixedtimeEvent(m3EventQueue, &spriteMapper, SpriteMapper::schedule(lyCounter, cycleCounter)); + addUnconditionalEvent(vEventQueue, &mode3Event, Mode3Event::schedule(m3EventQueue)); +} + +void LCD::oamChange(const unsigned long cycleCounter) { + update(cycleCounter); + + spriteMapper.oamChange(cycleCounter); + addFixedtimeEvent(m3EventQueue, &spriteMapper, SpriteMapper::schedule(lyCounter, cycleCounter)); + addUnconditionalEvent(vEventQueue, &mode3Event, Mode3Event::schedule(m3EventQueue)); +} + +void LCD::oamChange(const unsigned char *const oamram, const unsigned long cycleCounter) { + update(cycleCounter); + + spriteMapper.oamChange(oamram, cycleCounter); + addFixedtimeEvent(m3EventQueue, &spriteMapper, SpriteMapper::schedule(lyCounter, cycleCounter)); + addUnconditionalEvent(vEventQueue, &mode3Event, Mode3Event::schedule(m3EventQueue)); +} + +void LCD::wdTileMapSelectChange(const bool newValue, const unsigned long cycleCounter) { + update(cycleCounter); + + wdTileMap = vram + 0x1800 + newValue * 0x400; +} + +void LCD::bgTileMapSelectChange(const bool newValue, const unsigned long cycleCounter) { + update(cycleCounter); + + bgTileMap = vram + 0x1800 + newValue * 0x400; +} + +void LCD::bgTileDataSelectChange(const bool newValue, const unsigned long cycleCounter) { + update(cycleCounter); + + tileIndexSign = (newValue ^ 1) * 0x80; + bgTileData = vram + (newValue ^ 1) * 0x1000; +} + +void LCD::spriteEnableChange(const bool newValue, const unsigned long cycleCounter) { + update(cycleCounter); + + spriteEnable = newValue; +} + +void LCD::bgEnableChange(const bool newValue, const unsigned long cycleCounter) { + update(cycleCounter); + + bgEnable = newValue; +} + +void LCD::lcdstatChange(const unsigned data, const unsigned long cycleCounter) { + if (cycleCounter >= vEventQueue.top()->time()) + update(cycleCounter); + + const unsigned old = statReg; + statReg = data; + mode1Irq.setM1StatIrqEnabled(data & 0x10); + lycIrq.setM2IrqEnabled(data & 0x20); + + if (!enabled) + return; + + const bool lycIrqPeriod = isLycIrqPeriod(lycIrq.lycReg(), lycIrq.lycReg() == 153 ? lyCounter.lineTime() - (4 << (doubleSpeed*2)) : 4 - doubleSpeed * 4U, cycleCounter); + + if (lycIrq.lycReg() < 154 && ((data ^ old) & 0x40)) { + if (data & 0x40) { + if (lycIrqPeriod) + ifReg |= 2; + } else { + if (!doubleSpeed && lycIrq.time() - cycleCounter < 5 && (!(old & 0x20) || lycIrq.lycReg() > 143 || lycIrq.lycReg() == 0)) + ifReg |= 2; + } + + addFixedtimeEvent(irqEventQueue, &lycIrq, LycIrq::schedule(data, lycIrq.lycReg(), lyCounter, cycleCounter)); + } + + if ((((data & 0x10) && !(old & 0x10)) || !cgb) && !((old & 0x40) && lycIrqPeriod) && isMode1IrqPeriod(cycleCounter)) + ifReg |= 2; + + if ((data ^ old) & 0x08) { + if (data & 0x08) { + if (!((old & 0x40) && lycIrqPeriod) && isMode0IrqPeriod(cycleCounter)) + ifReg |= 2; + } else { + if (mode0Irq.time() - cycleCounter < 3 && (lycIrq.time() == VideoEvent::DISABLED_TIME || lyCounter.ly() != lycIrq.lycReg())) + ifReg |= 2; + } + + addFixedtimeEvent(irqEventQueue, &mode0Irq, Mode0Irq::schedule(data, m3ExtraCycles, lyCounter, cycleCounter)); + } + + if ((data & 0x28) == 0x20 && (old & 0x28) != 0x20 && isMode2IrqPeriod(cycleCounter)) { + ifReg |= 2; + } + + addFixedtimeEvent(irqEventQueue, &mode2Irq, Mode2Irq::schedule(data, lyCounter, cycleCounter)); + + addEvent(vEventQueue, &irqEvent, IrqEvent::schedule(irqEventQueue)); +} + +void LCD::lycRegChange(const unsigned data, const unsigned long cycleCounter) { + if (data == lycIrq.lycReg()) + return; + + if (cycleCounter >= vEventQueue.top()->time()) + update(cycleCounter); + + const unsigned old = lycIrq.lycReg(); + lycIrq.setLycReg(data); + + if (!(enabled && (statReg & 0x40))) + return; + + if (!doubleSpeed && lycIrq.time() - cycleCounter < 5 && (!(statReg & 0x20) || old > 143 || old == 0)) + ifReg |= 2; + + addEvent(irqEventQueue, &lycIrq, LycIrq::schedule(statReg, lycIrq.lycReg(), lyCounter, cycleCounter)); + + if (data < 154) { + if (isLycIrqPeriod(data, data == 153 ? lyCounter.lineTime() - doubleSpeed * 8U : 8, cycleCounter)) + ifReg |= 2; + + if (lycIrq.isSkipPeriod(cycleCounter, doubleSpeed)) + lycIrq.setSkip(true); + } + + addEvent(vEventQueue, &irqEvent, IrqEvent::schedule(irqEventQueue)); +} + +unsigned long LCD::nextIrqEvent() const { + if (!enabled) + return VideoEvent::DISABLED_TIME; + + if (mode0Irq.time() != VideoEvent::DISABLED_TIME && mode3Event.time() < irqEvent.time()) + return mode3Event.time(); + + return irqEvent.time(); +} + +unsigned LCD::getIfReg(const unsigned long cycleCounter) { + if (cycleCounter >= vEventQueue.top()->time()) + update(cycleCounter); + + return ifReg; +} + +void LCD::setIfReg(const unsigned ifReg_in, const unsigned long cycleCounter) { + if (cycleCounter >= vEventQueue.top()->time()) + update(cycleCounter); + + ifReg = ifReg_in; +} + +unsigned LCD::get_stat(const unsigned lycReg, const unsigned long cycleCounter) { + unsigned stat = 0; + + if (enabled) { + if (cycleCounter >= vEventQueue.top()->time()) + update(cycleCounter); + + const unsigned timeToNextLy = lyCounter.time() - cycleCounter; + + if (lyCounter.ly() > 143) { + if (lyCounter.ly() < 153 || timeToNextLy > 4 - doubleSpeed * 4U) + stat = 1; + } else { + const unsigned lineCycles = 456 - (timeToNextLy >> doubleSpeed); + + if (lineCycles < 80) { + if (!spriteMapper.inactivePeriodAfterDisplayEnable(cycleCounter)) + stat = 2; + } else if (lineCycles < 80 + 169 + doubleSpeed * 3U + m3ExtraCycles(lyCounter.ly())) + stat = 3; + } + + if ((lyCounter.ly() == lycReg && timeToNextLy > 4 - doubleSpeed * 4U) || + (lycReg == 0 && lyCounter.ly() == 153 && timeToNextLy >> doubleSpeed <= 456 - 8)) { + stat |= 4; + } + } + + return stat; +} + +void LCD::do_update(unsigned cycles) { + if (lyCounter.ly() < 144) { + const unsigned lineCycles = lyCounter.lineCycles(lastUpdate); + const unsigned xpos = lineCycles < drawStartCycle ? 0 : lineCycles - drawStartCycle; + + const unsigned endLineCycles = lineCycles + cycles; + unsigned endX = endLineCycles < drawStartCycle ? 0 : endLineCycles - drawStartCycle; + + if (endX > 160) + endX = 160; + + if (xpos < endX) + (this->*draw)(xpos, lyCounter.ly(), endX); + } else if (lyCounter.ly() == 144) { + winYPos = 0xFF; + //scy[0] = scy[1] = memory.fastread(0xFF42); + //scx[0] = scx[1] = memory.fastread(0xFF43); + win.weMasterChecker.unset(); + } + + videoCycles += cycles; + + if (videoCycles >= 70224U) + videoCycles -= 70224U; +} + +inline void LCD::event() { + vEventQueue.top()->doEvent(); + + if (vEventQueue.top()->time() == VideoEvent::DISABLED_TIME) + vEventQueue.pop(); + else + vEventQueue.modify_root(vEventQueue.top()); +} + +void LCD::update(const unsigned long cycleCounter) { + if (!enabled) + return; + + for (;;) { + const unsigned cycles = (std::max(std::min(cycleCounter, static_cast(vEventQueue.top()->time())), lastUpdate) - lastUpdate) >> doubleSpeed; + do_update(cycles); + lastUpdate += cycles << doubleSpeed; + + if (cycleCounter >= vEventQueue.top()->time()) + event(); + else + break; + } +} + +void LCD::setDBuffer() { + tmpbuf.reset(pb.format == Gambatte::PixelBuffer::RGB32 ? 0 : videoWidth() * videoHeight()); + + if (cgb) + draw = &LCD::cgb_draw; + else + draw = &LCD::dmg_draw; + + gbcToFormat = &gbcToRgb32; + dmgColors = dmgColorsRgb32; + + if (filter) { + dbuffer = filter->inBuffer(); + dpitch = filter->inPitch(); + } else if (pb.format == Gambatte::PixelBuffer::RGB32) { + dbuffer = pb.pixels; + dpitch = pb.pitch; + } else { + dbuffer = tmpbuf; + dpitch = 160; + } + + if (dbuffer == NULL) + draw = &LCD::null_draw; + + refreshPalettes(); +} + +void LCD::setDmgPaletteColor(const unsigned index, const unsigned long rgb32) { + dmgColorsRgb32[index] = rgb32; + dmgColorsRgb16[index] = rgb32ToRgb16(rgb32); + dmgColorsUyvy[index] = ::rgb32ToUyvy(rgb32); +} + +void LCD::setDmgPaletteColor(const unsigned palNum, const unsigned colorNum, const unsigned long rgb32) { + if (palNum > 2 || colorNum > 3) + return; + + setDmgPaletteColor((palNum * 4) | colorNum, rgb32); + refreshPalettes(); +} + +void LCD::null_draw(unsigned /*xpos*/, const unsigned ypos, const unsigned endX) { + const bool enableWindow = win.enabled(ypos); + + if (enableWindow && winYPos == 0xFF) + winYPos = /*ypos - wyReg.value()*/ 0; + + if (endX == 160) { + if (enableWindow) + ++winYPos; + } +} + +template +void LCD::cgb_draw(unsigned xpos, const unsigned ypos, const unsigned endX) { + const unsigned effectiveScx = scReader.scx(); + + const bool enableWindow = win.enabled(ypos); + + if (enableWindow && winYPos == 0xFF) + winYPos = /*ypos - wyReg.value()*/ 0; + + T *const bufLine = static_cast(dbuffer) + ypos * static_cast(dpitch); + + if (!(enableWindow && win.wxReader.wx() <= xpos + 7)) { + const unsigned fby = scReader.scy() + ypos /*& 0xFF*/; + const unsigned end = std::min(enableWindow ? win.wxReader.wx() - 7 : 160U, endX); + + cgb_bg_drawPixels(bufLine, xpos, end, scxReader.scxAnd7(), ((xpos + effectiveScx) & ~7) + ((xpos + drawStartCycle - scReadOffset) & 7), + bgTileMap + (fby & 0xF8) * 4, bgTileData, fby & 7); + } + + if (enableWindow && endX + 7 > win.wxReader.wx()) { + const unsigned start = std::max(win.wxReader.wx() < 7 ? 0U : (win.wxReader.wx() - 7), xpos); + + cgb_bg_drawPixels(bufLine, start, endX, 7u - win.wxReader.wx(), start + (7u - win.wxReader.wx()), + wdTileMap + (winYPos & 0xF8) * 4, bgTileData, winYPos & 7); + } + + if (endX == 160) { + if (spriteEnable) + cgb_drawSprites(bufLine, ypos); + + if (enableWindow) + ++winYPos; + } +} + +template +void LCD::dmg_draw(unsigned xpos, const unsigned ypos, const unsigned endX) { + const unsigned effectiveScx = scReader.scx(); + + const bool enableWindow = win.enabled(ypos); + + if (enableWindow && winYPos == 0xFF) + winYPos = /*ypos - wyReg.value()*/ 0; + + T *const bufLine = static_cast(dbuffer) + ypos * static_cast(dpitch); + + if (bgEnable) { + if (!(enableWindow && win.wxReader.wx() <= xpos + 7)) { + const unsigned fby = scReader.scy() + ypos /*& 0xFF*/; + const unsigned end = std::min(enableWindow ? win.wxReader.wx() - 7 : 160U, endX); + + bg_drawPixels(bufLine, xpos, end, scxReader.scxAnd7(), ((xpos + effectiveScx) & ~7) + ((xpos + drawStartCycle - scReadOffset) & 7), + bgTileMap + (fby & 0xF8) * 4, bgTileData + (fby & 7) * 2); + } + + if (enableWindow && endX + 7 > win.wxReader.wx()) { + const unsigned start = std::max(win.wxReader.wx() < 7 ? 0U : (win.wxReader.wx() - 7), xpos); + + bg_drawPixels(bufLine, start, endX, 7u - win.wxReader.wx(), start + (7u - win.wxReader.wx()), + wdTileMap + (winYPos & 0xF8) * 4, bgTileData + (winYPos & 7) * 2); + } + } else + std::fill_n(bufLine + xpos, endX - xpos, bgPalette[0]); + + if (endX == 160) { + if (spriteEnable) + drawSprites(bufLine, ypos); + + if (enableWindow) + ++winYPos; + } +} + +#define FLIP(u8) ( (((u8) & 0x01) << 7) | (((u8) & 0x02) << 5) | (((u8) & 0x04) << 3) | (((u8) & 0x08) << 1) | \ +(((u8) & 0x10) >> 1) | (((u8) & 0x20) >> 3) | (((u8) & 0x40) >> 5) | (((u8) & 0x80) >> 7) ) + +#define FLIP_ROW(n) FLIP((n)|0x0), FLIP((n)|0x1), FLIP((n)|0x2), FLIP((n)|0x3), FLIP((n)|0x4), FLIP((n)|0x5), FLIP((n)|0x6), FLIP((n)|0x7), \ +FLIP((n)|0x8), FLIP((n)|0x9), FLIP((n)|0xA), FLIP((n)|0xB), FLIP((n)|0xC), FLIP((n)|0xD), FLIP((n)|0xE), FLIP((n)|0xF) + +static const unsigned char xflipt[0x100] = { + FLIP_ROW(0x00), FLIP_ROW(0x10), FLIP_ROW(0x20), FLIP_ROW(0x30), + FLIP_ROW(0x40), FLIP_ROW(0x50), FLIP_ROW(0x60), FLIP_ROW(0x70), + FLIP_ROW(0x80), FLIP_ROW(0x90), FLIP_ROW(0xA0), FLIP_ROW(0xB0), + FLIP_ROW(0xC0), FLIP_ROW(0xD0), FLIP_ROW(0xE0), FLIP_ROW(0xF0) +}; + +#undef FLIP_ROW +#undef FLIP + +#define PREP(u8) (u8) + +#define EXPAND(u8) ((PREP(u8) << 7 & 0x4000) | (PREP(u8) << 6 & 0x1000) | (PREP(u8) << 5 & 0x0400) | (PREP(u8) << 4 & 0x0100) | \ + (PREP(u8) << 3 & 0x0040) | (PREP(u8) << 2 & 0x0010) | (PREP(u8) << 1 & 0x0004) | (PREP(u8) & 0x0001)) + +#define EXPAND_ROW(n) EXPAND((n)|0x0), EXPAND((n)|0x1), EXPAND((n)|0x2), EXPAND((n)|0x3), \ + EXPAND((n)|0x4), EXPAND((n)|0x5), EXPAND((n)|0x6), EXPAND((n)|0x7), \ + EXPAND((n)|0x8), EXPAND((n)|0x9), EXPAND((n)|0xA), EXPAND((n)|0xB), \ + EXPAND((n)|0xC), EXPAND((n)|0xD), EXPAND((n)|0xE), EXPAND((n)|0xF) + +#define EXPAND_TABLE EXPAND_ROW(0x00), EXPAND_ROW(0x10), EXPAND_ROW(0x20), EXPAND_ROW(0x30), \ + EXPAND_ROW(0x40), EXPAND_ROW(0x50), EXPAND_ROW(0x60), EXPAND_ROW(0x70), \ + EXPAND_ROW(0x80), EXPAND_ROW(0x90), EXPAND_ROW(0xA0), EXPAND_ROW(0xB0), \ + EXPAND_ROW(0xC0), EXPAND_ROW(0xD0), EXPAND_ROW(0xE0), EXPAND_ROW(0xF0) + +static const unsigned short expand_lut[0x200] = { + EXPAND_TABLE, + +#undef PREP +#define PREP(u8) (((u8) << 7 & 0x80) | ((u8) << 5 & 0x40) | ((u8) << 3 & 0x20) | ((u8) << 1 & 0x10) | \ + ((u8) >> 1 & 0x08) | ((u8) >> 3 & 0x04) | ((u8) >> 5 & 0x02) | ((u8) >> 7 & 0x01)) + + EXPAND_TABLE +}; + +#undef EXPAND_TABLE +#undef EXPAND_ROW +#undef EXPAND +#undef PREP + +//shoud work for the window too, if -wx is passed as scx. +//tilemap and tiledata must point to the areas in the first vram bank +//the second vram bank has to be placed immediately after the first one in memory (0x4000 continous bytes that cover both). +//tilemap needs to be offset to the right line +template +void LCD::cgb_bg_drawPixels(T * const buffer_line, unsigned xpos, const unsigned end, const unsigned scx, unsigned tilemappos, + const unsigned char *const tilemap, const unsigned char *const tiledata, const unsigned tileline) +{ + const unsigned sign = tileIndexSign; + unsigned shift = (7 - ((scx + xpos) & 7)) * 2; + T *buf = buffer_line + xpos; + T *const bufend = buffer_line + end; + + while (buf < bufend) { + if ((tilemappos & 7) || bufend - buf < 8) { + const unsigned char *const maptmp = tilemap + (tilemappos >> 3 & 0x1F); + const unsigned attributes = maptmp[0x2000]; + const unsigned char *const dataptr = tiledata + (attributes << 10 & 0x2000) + + maptmp[0] * 16 - (maptmp[0] & sign) * 32 + ((attributes & 0x40) ? 7 - tileline : tileline) * 2; + const unsigned short *const exp_lut = expand_lut + (attributes << 3 & 0x100); + + const unsigned data = exp_lut[dataptr[0]] + exp_lut[dataptr[1]] * 2; + const unsigned long *const palette = bgPalette + (attributes & 7) * 4; + + do { + *buf++ = palette[data >> shift & 3]; + shift = (shift - 2) & 15; + } while ((++tilemappos & 7) && buf < bufend); + } + + while (bufend - buf > 7) { + const unsigned char *const maptmp = tilemap + (tilemappos >> 3 & 0x1F); + const unsigned attributes = maptmp[0x2000]; + const unsigned char *const dataptr = tiledata + (attributes << 10 & 0x2000) + + maptmp[0] * 16 - (maptmp[0] & sign) * 32 + ((attributes & 0x40) ? 7 - tileline : tileline) * 2; + const unsigned short *const exp_lut = expand_lut + (attributes << 3 & 0x100); + + const unsigned data = exp_lut[dataptr[0]] + exp_lut[dataptr[1]] * 2; + const unsigned long *const palette = bgPalette + (attributes & 7) * 4; + + buf[0] = palette[data >> shift & 3]; + buf[1] = palette[data >> ((shift - 2) & 15) & 3]; + buf[2] = palette[data >> ((shift - 4) & 15) & 3]; + buf[3] = palette[data >> ((shift - 6) & 15) & 3]; + buf[4] = palette[data >> ((shift - 8) & 15) & 3]; + buf[5] = palette[data >> ((shift - 10) & 15) & 3]; + buf[6] = palette[data >> ((shift - 12) & 15) & 3]; + buf[7] = palette[data >> ((shift - 14) & 15) & 3]; + + buf += 8; + tilemappos += 8; + } + } +} + +static unsigned cgb_prioritizedBG_mask(const unsigned spx, const unsigned bgStart, const unsigned bgEnd, const unsigned scx, + const unsigned char *const tilemap, const unsigned char *const tiledata, const unsigned tileline, const unsigned sign) { + const unsigned spStart = spx < bgStart + 8 ? bgStart + 8 - spx : 0; + + unsigned bgbyte; + + { + const unsigned pos = scx + spx - 8 + spStart; + const unsigned char *maptmp = tilemap + (pos >> 3 & 0x1F); + unsigned tile = maptmp[0]; + unsigned attributes = maptmp[0x2000]; + + const unsigned char *const data = tiledata + (attributes << 10 & 0x2000) + + tile * 16 - (tile & sign) * 32 + ((attributes & 0x40) ? 7 - tileline : tileline) * 2; + + bgbyte = (attributes & 0x20) ? xflipt[data[0] | data[1]] : (data[0] | data[1]); + + const unsigned offset = pos & 7; + + if (offset) { + bgbyte <<= offset; + maptmp = tilemap + (((pos >> 3) + 1) & 0x1F); + tile = maptmp[0]; + attributes = maptmp[0x2000]; + + const unsigned char *const data = tiledata + (attributes << 10 & 0x2000) + + tile * 16 - (tile & sign) * 32 + ((attributes & 0x40) ? 7 - tileline : tileline) * 2; + + bgbyte |= ((attributes & 0x20) ? xflipt[data[0] | data[1]] : (data[0] | data[1])) >> (8 - offset); + } + } + + bgbyte >>= spStart; + const unsigned spEnd = spx > bgEnd ? bgEnd + 8 - spx : 8; + const unsigned mask = ~bgbyte | 0xFF >> spEnd; + + return mask; +} + +static unsigned cgb_toplayerBG_mask(const unsigned spx, const unsigned bgStart, const unsigned bgEnd, const unsigned scx, + const unsigned char *const tilemap, const unsigned char *const tiledata, const unsigned tileline, const unsigned sign) { + const unsigned spStart = spx < bgStart + 8 ? bgStart + 8 - spx : 0; + + unsigned bgbyte = 0; + + { + const unsigned pos = scx + spx - 8 + spStart; + const unsigned char *maptmp = tilemap + (pos >> 3 & 0x1F); + unsigned attributes = maptmp[0x2000]; + + if (attributes & 0x80) { + const unsigned tile = maptmp[0]; + + const unsigned char *const data = tiledata + (attributes << 10 & 0x2000) + + tile * 16 - (tile & sign) * 32 + ((attributes & 0x40) ? 7 - tileline : tileline) * 2; + + bgbyte = (attributes & 0x20) ? xflipt[data[0] | data[1]] : (data[0] | data[1]); + } + + const unsigned offset = pos & 7; + + if (offset) { + bgbyte <<= offset; + maptmp = tilemap + (((pos >> 3) + 1) & 0x1F); + attributes = maptmp[0x2000]; + + if (attributes & 0x80) { + const unsigned tile = maptmp[0]; + + const unsigned char *const data = tiledata + (attributes << 10 & 0x2000) + + tile * 16 - (tile & sign) * 32 + ((attributes & 0x40) ? 7 - tileline : tileline) * 2; + + bgbyte |= ((attributes & 0x20) ? xflipt[data[0] | data[1]] : (data[0] | data[1])) >> (8 - offset); + } + } + } + + bgbyte >>= spStart; + const unsigned spEnd = spx > bgEnd ? bgEnd + 8 - spx : 8; + const unsigned mask = ~bgbyte | 0xFF >> spEnd; + + return mask; +} + +template +void LCD::cgb_drawSprites(T * const buffer_line, const unsigned ypos) { + const unsigned scy = scReader.scy() + ypos /*& 0xFF*/; + const unsigned wx = win.wxReader.wx() < 7 ? 0 : win.wxReader.wx() - 7; + const bool enableWindow = win.enabled(ypos); + const unsigned char *const spriteMapLine = spriteMapper.sprites(ypos); + + for (int i = spriteMapper.numSprites(ypos) - 1; i >= 0; --i) { + const unsigned spNrX2 = spriteMapLine[i]; + const unsigned spx = spriteMapper.posbuf()[spNrX2 + 1]; + + if (spx < 168 && spx) { + unsigned spLine = ypos + 16 - spriteMapper.posbuf()[spNrX2]; + unsigned spTile = spriteMapper.oamram()[spNrX2 * 2 + 2]; + const unsigned attributes = spriteMapper.oamram()[spNrX2 * 2 + 3]; + + if (spriteMapper.largeSprites(spNrX2 >> 1)) { + if (attributes & 0x40) //yflip + spLine = 15 - spLine; + + if (spLine < 8) + spTile &= 0xFE; + else { + spLine -= 8; + spTile |= 0x01; + } + } else { + if (attributes & 0x40) //yflip + spLine = 7 - spLine; + } + + const unsigned char *const data = vram + ((attributes * 0x400) & 0x2000) + spTile * 16 + spLine * 2; + + unsigned byte1 = data[0]; + unsigned byte2 = data[1]; + + if (attributes & 0x20) { + byte1 = xflipt[byte1]; + byte2 = xflipt[byte2]; + } + + //(Sprites with priority-bit are still allowed to cover other sprites according to GBdev-faq.) + if (bgEnable) { + unsigned mask = 0xFF; + + if (attributes & 0x80) { + if (!(enableWindow && (wx == 0 || spx >= wx + 8u))) + mask = cgb_prioritizedBG_mask(spx, 0, enableWindow ? wx : 160, scReader.scx(), + bgTileMap + ((scy & 0xF8) << 2), bgTileData, scy & 7, tileIndexSign); + if (enableWindow && spx > wx) + mask &= cgb_prioritizedBG_mask(spx, wx, 160, 0u - wx, wdTileMap + ((winYPos & 0xF8) << 2), bgTileData, winYPos & 7, tileIndexSign); + } else { + if (!(enableWindow && (wx == 0 || spx >= wx + 8u))) + mask = cgb_toplayerBG_mask(spx, 0, enableWindow ? wx : 160, scReader.scx(), + bgTileMap + ((scy & 0xF8) << 2), bgTileData, scy & 7, tileIndexSign); + if (enableWindow && spx > wx) + mask &= cgb_toplayerBG_mask(spx, wx, 160, 0u - wx, wdTileMap + ((winYPos & 0xF8) << 2), bgTileData, winYPos & 7, tileIndexSign); + } + + byte1 &= mask; + byte2 &= mask; + } + + const unsigned bytes = expand_lut[byte1] + expand_lut[byte2] * 2; + const unsigned long *const palette = spPalette + (attributes & 7) * 4; + + if (spx > 7 && spx < 161) { + T * const buf = buffer_line + spx - 8; + unsigned color; + + if ((color = bytes >> 14 )) + buf[0] = palette[color]; + if ((color = bytes >> 12 & 3)) + buf[1] = palette[color]; + if ((color = bytes >> 10 & 3)) + buf[2] = palette[color]; + if ((color = bytes >> 8 & 3)) + buf[3] = palette[color]; + if ((color = bytes >> 6 & 3)) + buf[4] = palette[color]; + if ((color = bytes >> 4 & 3)) + buf[5] = palette[color]; + if ((color = bytes >> 2 & 3)) + buf[6] = palette[color]; + if ((color = bytes & 3)) + buf[7] = palette[color]; + } else { + const unsigned end = spx >= 160 ? 160 : spx; + unsigned xpos = spx <= 8 ? 0 : (spx - 8); + unsigned shift = (7 - (xpos + 8 - spx)) * 2; + + while (xpos < end) { + if (const unsigned color = bytes >> shift & 3) + buffer_line[xpos] = palette[color]; + + shift -= 2; + ++xpos; + } + } + } + } +} + + +//shoud work for the window too, if -wx is passed as scx. +//tilemap and tiledata need to be offset to the right line +template +void LCD::bg_drawPixels(T * const buffer_line, unsigned xpos, const unsigned end, const unsigned scx, unsigned tilemappos, + const unsigned char *const tilemap, const unsigned char *const tiledata) +{ + const unsigned sign = tileIndexSign; + unsigned shift = (7 - ((scx + xpos) & 7)) * 2; + T *buf = buffer_line + xpos; + T *const bufend = buffer_line + end; + + while (buf < bufend) { + if ((tilemappos & 7) || bufend - buf < 8) { + const unsigned tile = tilemap[tilemappos >> 3 & 0x1F]; + const unsigned char *const dataptr = tiledata + tile * 16 - (tile & sign) * 32; + const unsigned data = expand_lut[dataptr[0]] + expand_lut[dataptr[1]] * 2; + + do { + *buf++ = bgPalette[data >> shift & 3]; + shift = (shift - 2) & 15; + } while ((++tilemappos & 7) && buf < bufend); + } + + while (bufend - buf > 7) { + const unsigned tile = tilemap[tilemappos >> 3 & 0x1F]; + const unsigned char *const dataptr = tiledata + tile * 16 - (tile & sign) * 32; + const unsigned data = expand_lut[dataptr[0]] + expand_lut[dataptr[1]] * 2; + buf[0] = bgPalette[data >> shift & 3]; + buf[1] = bgPalette[data >> ((shift - 2) & 15) & 3]; + buf[2] = bgPalette[data >> ((shift - 4) & 15) & 3]; + buf[3] = bgPalette[data >> ((shift - 6) & 15) & 3]; + buf[4] = bgPalette[data >> ((shift - 8) & 15) & 3]; + buf[5] = bgPalette[data >> ((shift - 10) & 15) & 3]; + buf[6] = bgPalette[data >> ((shift - 12) & 15) & 3]; + buf[7] = bgPalette[data >> ((shift - 14) & 15) & 3]; + buf += 8; + tilemappos += 8; + } + } +} + +static unsigned prioritizedBG_mask(const unsigned spx, const unsigned bgStart, const unsigned bgEnd, const unsigned scx, + const unsigned char *const tilemap, const unsigned char *const tiledata, const unsigned sign) { + const unsigned spStart = spx < bgStart + 8 ? bgStart + 8 - spx : 0; + + unsigned bgbyte; + + { + const unsigned pos = scx + spx - 8 + spStart; + unsigned tile = tilemap[pos >> 3 & 0x1F]; + const unsigned char *data = tiledata + tile * 16 - (tile & sign) * 32; + bgbyte = data[0] | data[1]; + const unsigned offset = pos & 7; + + if (offset) { + bgbyte <<= offset; + tile = tilemap[((pos >> 3) + 1) & 0x1F]; + data = tiledata + tile * 16 - (tile & sign) * 32; + bgbyte |= (data[0] | data[1]) >> (8 - offset); + } + } + + bgbyte >>= spStart; + const unsigned spEnd = spx > bgEnd ? bgEnd + 8 - spx : 8; + const unsigned mask = ~bgbyte | 0xFF >> spEnd; + + return mask; +} + +template +void LCD::drawSprites(T * const buffer_line, const unsigned ypos) { + const unsigned scy = scReader.scy() + ypos /*& 0xFF*/; + const unsigned wx = win.wxReader.wx() < 7 ? 0 : win.wxReader.wx() - 7; + const bool enableWindow = win.enabled(ypos); + const unsigned char *const spriteMapLine = spriteMapper.sprites(ypos); + + for (int i = spriteMapper.numSprites(ypos) - 1; i >= 0; --i) { + const unsigned spNrX2 = spriteMapLine[i]; + const unsigned spx = spriteMapper.posbuf()[spNrX2 + 1]; + + if (spx < 168 && spx) { + unsigned spLine = ypos + 16 - spriteMapper.posbuf()[spNrX2]; + unsigned spTile = spriteMapper.oamram()[spNrX2 * 2 + 2]; + const unsigned attributes = spriteMapper.oamram()[spNrX2 * 2 + 3]; + + if (spriteMapper.largeSprites(spNrX2 >> 1)) { + if (attributes & 0x40) //yflip + spLine = 15 - spLine; + + if (spLine < 8) + spTile &= 0xFE; + else { + spLine -= 8; + spTile |= 0x01; + } + } else { + if (attributes & 0x40) //yflip + spLine = 7 - spLine; + } + + const unsigned char *const data = vram + spTile * 16 + spLine * 2; + + unsigned byte1 = data[0]; + unsigned byte2 = data[1]; + + if (attributes & 0x20) { + byte1 = xflipt[byte1]; + byte2 = xflipt[byte2]; + } + + //(Sprites with priority-bit are still allowed to cover other sprites according to GBdev-faq.) + if (attributes & 0x80) { + unsigned mask = 0xFF; + + if (bgEnable && !(enableWindow && (wx == 0 || spx >= wx + 8u))) + mask = prioritizedBG_mask(spx, 0, enableWindow ? wx : 160, scReader.scx(), + bgTileMap + ((scy & 0xF8) << 2), bgTileData + ((scy & 7) << 1), tileIndexSign); + if (enableWindow && spx > wx) + mask &= prioritizedBG_mask(spx, wx, 160, 0u - wx, wdTileMap + ((winYPos & 0xF8) << 2), bgTileData + ((winYPos & 7) << 1), tileIndexSign); + + byte1 &= mask; + byte2 &= mask; + } + + const unsigned bytes = expand_lut[byte1] + expand_lut[byte2] * 2; + const unsigned long *const palette = spPalette + ((attributes >> 2) & 4); + + if (spx > 7 && spx < 161) { + T * const buf = buffer_line + spx - 8; + unsigned color; + + if ((color = bytes >> 14 )) + buf[0] = palette[color]; + if ((color = bytes >> 12 & 3)) + buf[1] = palette[color]; + if ((color = bytes >> 10 & 3)) + buf[2] = palette[color]; + if ((color = bytes >> 8 & 3)) + buf[3] = palette[color]; + if ((color = bytes >> 6 & 3)) + buf[4] = palette[color]; + if ((color = bytes >> 4 & 3)) + buf[5] = palette[color]; + if ((color = bytes >> 2 & 3)) + buf[6] = palette[color]; + if ((color = bytes & 3)) + buf[7] = palette[color]; + } else { + const unsigned end = spx >= 160 ? 160 : spx; + unsigned xpos = spx <= 8 ? 0 : (spx - 8); + unsigned shift = (7 - (xpos + 8 - spx)) * 2; + + while (xpos < end) { + if (const unsigned color = bytes >> shift & 3) + buffer_line[xpos] = palette[color]; + + shift -= 2; + ++xpos; + } + } + } + } +} diff --git a/supergameboy/libgambatte/src/video.h b/supergameboy/libgambatte/src/video.h new file mode 100644 index 00000000..7271d1b1 --- /dev/null +++ b/supergameboy/libgambatte/src/video.h @@ -0,0 +1,293 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef VIDEO_H +#define VIDEO_H + +namespace Gambatte { +class VideoBlitter; +struct FilterInfo; +} + +class Filter; +class SaveState; + +#include +#include +#include "event_queue.h" +#include "videoblitter.h" +#include "array.h" +#include "int.h" +#include "colorconversion.h" +#include "osd_element.h" + +#include "video/video_event_comparer.h" +#include "video/ly_counter.h" +#include "video/window.h" +#include "video/scx_reader.h" +#include "video/sprite_mapper.h" +#include "video/sc_reader.h" +#include "video/break_event.h" +#include "video/mode3_event.h" + +#include "video/lyc_irq.h" +#include "video/mode0_irq.h" +#include "video/mode1_irq.h" +#include "video/mode2_irq.h" +#include "video/irq_event.h" +#include "video/m3_extra_cycles.h" + +class LCD { + //static const uint8_t xflipt[0x100]; + unsigned long dmgColorsRgb32[3 * 4]; + unsigned long dmgColorsRgb16[3 * 4]; + unsigned long dmgColorsUyvy[3 * 4]; + + unsigned long bgPalette[8 * 4]; + unsigned long spPalette[8 * 4]; + + unsigned char bgpData[8 * 8]; + unsigned char objpData[8 * 8]; + + const unsigned char *const vram; + const unsigned char *bgTileData; + const unsigned char *bgTileMap; + const unsigned char *wdTileMap; + + Gambatte::VideoBlitter *vBlitter; + Filter *filter; + + void *dbuffer; + void (LCD::*draw)(unsigned xpos, unsigned ypos, unsigned endX); + unsigned long (*gbcToFormat)(unsigned bgr15); + const unsigned long *dmgColors; + + unsigned long lastUpdate; + unsigned long videoCycles; + + unsigned dpitch; + unsigned winYPos; + + event_queue m3EventQueue; + event_queue irqEventQueue; + event_queue vEventQueue; + + LyCounter lyCounter; + Window win; + ScxReader scxReader; + SpriteMapper spriteMapper; + M3ExtraCycles m3ExtraCycles; + ScReader scReader; + BreakEvent breakEvent; + Mode3Event mode3Event; + + LycIrq lycIrq; + Mode0Irq mode0Irq; + Mode1Irq mode1Irq; + Mode2Irq mode2Irq; + IrqEvent irqEvent; + + Gambatte::PixelBuffer pb; + Array tmpbuf; + Rgb32ToUyvy rgb32ToUyvy; + std::auto_ptr osdElement; + + std::vector filters; + + unsigned char drawStartCycle; + unsigned char scReadOffset; + unsigned char ifReg; + unsigned char tileIndexSign; + unsigned char statReg; + + bool doubleSpeed; + bool enabled; + bool cgb; + bool bgEnable; + bool spriteEnable; + + static void setDmgPalette(unsigned long *palette, const unsigned long *dmgColors, unsigned data); + void setDmgPaletteColor(unsigned index, unsigned long rgb32); + static unsigned long gbcToRgb32(unsigned bgr15); + static unsigned long gbcToRgb16(unsigned bgr15); + static unsigned long gbcToUyvy(unsigned bgr15); + + void refreshPalettes(); + void setDBuffer(); + void resetVideoState(unsigned long cycleCounter); + + void setDoubleSpeed(bool enabled); + + void event(); + + bool cgbpAccessible(unsigned long cycleCounter); + bool isMode0IrqPeriod(unsigned long cycleCounter); + bool isMode2IrqPeriod(unsigned long cycleCounter); + bool isLycIrqPeriod(unsigned lycReg, unsigned endCycles, unsigned long cycleCounter); + bool isMode1IrqPeriod(unsigned long cycleCounter); + + template void bg_drawPixels(T *buffer_line, unsigned xpos, unsigned end, unsigned scx, unsigned tilemappos, + const unsigned char *tilemap, const unsigned char *tiledata); + template void drawSprites(T *buffer_line, unsigned ypos); + + template void cgb_bg_drawPixels(T *buffer_line, unsigned xpos, unsigned end, unsigned scx, unsigned tilemappos, + const unsigned char *tilemap, const unsigned char *tiledata, unsigned tileline); + template void cgb_drawSprites(T *buffer_line, unsigned ypos); + + void null_draw(unsigned xpos, unsigned ypos, unsigned endX); + template void dmg_draw(unsigned xpos, unsigned ypos, unsigned endX); + template void cgb_draw(unsigned xpos, unsigned ypos, unsigned endX); + + void do_update(unsigned cycles); + +public: + void update(unsigned long cycleCounter); + + LCD(const unsigned char *oamram, const unsigned char *vram_in); + ~LCD(); + void reset(const unsigned char *oamram, bool cgb); + void setStatePtrs(SaveState &state); + void saveState(SaveState &state) const; + void loadState(const SaveState &state, const unsigned char *oamram); + void setVideoBlitter(Gambatte::VideoBlitter *vb); + void videoBufferChange(); + void setVideoFilter(unsigned n); + std::vector filterInfo() const; + unsigned videoWidth() const; + unsigned videoHeight() const; + void setDmgPaletteColor(unsigned palNum, unsigned colorNum, unsigned long rgb32); + + void setOsdElement(std::auto_ptr osdElement) { + this->osdElement = osdElement; + } + + void wdTileMapSelectChange(bool newValue, unsigned long cycleCounter); + void bgTileMapSelectChange(bool newValue, unsigned long cycleCounter); + void bgTileDataSelectChange(bool newValue, unsigned long cycleCounter); + void bgEnableChange(bool newValue, unsigned long cycleCounter); + void spriteEnableChange(bool newValue, unsigned long cycleCounter); + + void dmgBgPaletteChange(const unsigned data, const unsigned long cycleCounter) { + update(cycleCounter); + bgpData[0] = data; + setDmgPalette(bgPalette, dmgColors, data); + } + + void dmgSpPalette1Change(const unsigned data, const unsigned long cycleCounter) { + update(cycleCounter); + objpData[0] = data; + setDmgPalette(spPalette, dmgColors + 4, data); + } + + void dmgSpPalette2Change(const unsigned data, const unsigned long cycleCounter) { + update(cycleCounter); + objpData[1] = data; + setDmgPalette(spPalette + 4, dmgColors + 8, data); + } + + void cgbBgColorChange(unsigned index, const unsigned data, const unsigned long cycleCounter) { + if (bgpData[index] != data && cgbpAccessible(cycleCounter)) { + update(cycleCounter); + bgpData[index] = data; + index >>= 1; + bgPalette[index] = (*gbcToFormat)(bgpData[index << 1] | bgpData[(index << 1) + 1] << 8); + } + } + + void cgbSpColorChange(unsigned index, const unsigned data, const unsigned long cycleCounter) { + if (objpData[index] != data && cgbpAccessible(cycleCounter)) { + update(cycleCounter); + objpData[index] = data; + index >>= 1; + spPalette[index] = (*gbcToFormat)(objpData[index << 1] | objpData[(index << 1) + 1] << 8); + } + } + + unsigned cgbBgColorRead(const unsigned index, const unsigned long cycleCounter) { + return cgb & cgbpAccessible(cycleCounter) ? bgpData[index] : 0xFF; + } + + unsigned cgbSpColorRead(const unsigned index, const unsigned long cycleCounter) { + return cgb & cgbpAccessible(cycleCounter) ? objpData[index] : 0xFF; + } + + void updateScreen(unsigned long cc); + void enableChange(unsigned long cycleCounter); + void preResetCounter(unsigned long cycleCounter); + void postResetCounter(unsigned long oldCC, unsigned long cycleCounter); + void preSpeedChange(unsigned long cycleCounter); + void postSpeedChange(unsigned long cycleCounter); +// unsigned get_mode(unsigned cycleCounter) /*const*/; + bool vramAccessible(unsigned long cycleCounter); + bool oamAccessible(unsigned long cycleCounter); + void weChange(bool newValue, unsigned long cycleCounter); + void wxChange(unsigned newValue, unsigned long cycleCounter); + void wyChange(unsigned newValue, unsigned long cycleCounter); + void oamChange(unsigned long cycleCounter); + void oamChange(const unsigned char *oamram, unsigned long cycleCounter); + void scxChange(unsigned newScx, unsigned long cycleCounter); + void scyChange(unsigned newValue, unsigned long cycleCounter); + void spriteSizeChange(bool newLarge, unsigned long cycleCounter); + + void vramChange(const unsigned long cycleCounter) { + update(cycleCounter); + } + + unsigned get_stat(unsigned lycReg, unsigned long cycleCounter); + + unsigned getLyReg(const unsigned long cycleCounter) { + unsigned lyReg = 0; + + if (enabled) { + if (cycleCounter >= lyCounter.time()) + update(cycleCounter); + + lyReg = lyCounter.ly(); + + if (lyCounter.time() - cycleCounter <= 4) { + if (lyReg == 153) + lyReg = 0; + else + ++lyReg; + } else if (lyReg == 153) + lyReg = 0; + } + + return lyReg; + } + + unsigned long nextMode1IrqTime() const { + return mode1Irq.time(); + } + + void lyWrite(unsigned long cycleCounter); + void lcdstatChange(unsigned data, unsigned long cycleCounter); + void lycRegChange(unsigned data, unsigned long cycleCounter); + unsigned long nextIrqEvent() const; + unsigned getIfReg(unsigned long cycleCounter); + void setIfReg(unsigned ifReg_in, unsigned long cycleCounter); + + unsigned long nextHdmaTime(unsigned long cycleCounter); + bool isHdmaPeriod(unsigned long cycleCounter); + + unsigned long nextHdmaTimeInvalid() const { + return mode3Event.time(); + } +}; + +#endif diff --git a/supergameboy/libgambatte/src/video/basic_add_event.cpp b/supergameboy/libgambatte/src/video/basic_add_event.cpp new file mode 100644 index 00000000..4bc57a09 --- /dev/null +++ b/supergameboy/libgambatte/src/video/basic_add_event.cpp @@ -0,0 +1,75 @@ +/*************************************************************************** + * Copyright (C) 2008 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "basic_add_event.h" +#include "../event_queue.h" + +void addEvent(event_queue &q, VideoEvent *const e, const unsigned long newTime) { + const unsigned long oldTime = e->time(); + + if (oldTime != newTime) { + e->setTime(newTime); + + if (newTime < oldTime) { + if (oldTime == VideoEvent::DISABLED_TIME) + q.push(e); + else + q.dec(e, e); + } else { + if (newTime == VideoEvent::DISABLED_TIME) + q.remove(e); + else + q.inc(e, e); + } + } +} + +void addUnconditionalEvent(event_queue &q, VideoEvent *const e, const unsigned long newTime) { + const unsigned long oldTime = e->time(); + + e->setTime(newTime); + + if (newTime < oldTime) { + if (oldTime == VideoEvent::DISABLED_TIME) + q.push(e); + else + q.dec(e, e); + } else if (oldTime != newTime) { + q.inc(e, e); + } +} + +void addFixedtimeEvent(event_queue &q, VideoEvent *const e, const unsigned long newTime) { + const unsigned long oldTime = e->time(); + + if (oldTime != newTime) { + e->setTime(newTime); + + if (oldTime == VideoEvent::DISABLED_TIME) + q.push(e); + else + q.remove(e); + } +} + +void addUnconditionalFixedtimeEvent(event_queue &q, VideoEvent *const e, const unsigned long newTime) { + if (e->time() == VideoEvent::DISABLED_TIME) { + e->setTime(newTime); + q.push(e); + } +} diff --git a/supergameboy/libgambatte/src/video/basic_add_event.h b/supergameboy/libgambatte/src/video/basic_add_event.h new file mode 100644 index 00000000..780d7191 --- /dev/null +++ b/supergameboy/libgambatte/src/video/basic_add_event.h @@ -0,0 +1,56 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef BASIC_ADD_EVENT_H +#define BASIC_ADD_EVENT_H + +template class event_queue; + +#include "video_event.h" +#include "video_event_comparer.h" + +/*template +static inline void addEvent(T &event, const LyCounter &lyCounter, const unsigned long cycleCounter, event_queue &queue) { + if (event.time() == VideoEvent::DISABLED_TIME) { + event.schedule(lyCounter, cycleCounter); + queue.push(&event); + } +} + +template +static inline void addEvent(T &event, const unsigned data, const LyCounter &lyCounter, const unsigned long cycleCounter, event_queue &queue) { + if (event.time() == VideoEvent::DISABLED_TIME) { + event.schedule(data, lyCounter, cycleCounter); + queue.push(&event); + } +} + +template +static inline void addEvent(T &event, const unsigned data1, const unsigned data2, const LyCounter &lyCounter, const unsigned long cycleCounter, event_queue &queue) { + if (event.time() == VideoEvent::DISABLED_TIME) { + event.schedule(data1, data2, lyCounter, cycleCounter); + queue.push(&event); + } +}*/ + +void addEvent(event_queue &q, VideoEvent *e, unsigned long newTime); +void addUnconditionalEvent(event_queue &q, VideoEvent *e, unsigned long newTime); +void addFixedtimeEvent(event_queue &q, VideoEvent *e, unsigned long newTime); +void addUnconditionalFixedtimeEvent(event_queue &q, VideoEvent *e, unsigned long newTime); + +#endif diff --git a/supergameboy/libgambatte/src/video/break_event.cpp b/supergameboy/libgambatte/src/video/break_event.cpp new file mode 100644 index 00000000..e6e7ffbf --- /dev/null +++ b/supergameboy/libgambatte/src/video/break_event.cpp @@ -0,0 +1,35 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "break_event.h" + +BreakEvent::BreakEvent(unsigned char &drawStartCycle_in, unsigned char &scReadOffset_in) : + VideoEvent(3), + drawStartCycle(drawStartCycle_in), + scReadOffset(scReadOffset_in) +{ + setDoubleSpeed(false); + setScxSource(0); +} + +void BreakEvent::doEvent() { + scReadOffset = baseCycle; + drawStartCycle = baseCycle + (scxSrc & 7); + + setTime(DISABLED_TIME); +} diff --git a/supergameboy/libgambatte/src/video/break_event.h b/supergameboy/libgambatte/src/video/break_event.h new file mode 100644 index 00000000..9e7dcb82 --- /dev/null +++ b/supergameboy/libgambatte/src/video/break_event.h @@ -0,0 +1,59 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef BREAK_EVENT_H +#define BREAK_EVENT_H + +#include "video_event.h" +#include "ly_counter.h" +#include "basic_add_event.h" + +class BreakEvent : public VideoEvent { + unsigned char &drawStartCycle; + unsigned char &scReadOffset; + + unsigned char scxSrc; + unsigned char baseCycle; + +public: + BreakEvent(unsigned char &drawStartCycle_in, unsigned char &scReadOffset_in); + + void doEvent(); + + static unsigned long schedule(const LyCounter &lyCounter) { + return lyCounter.time(); + } + + void setDoubleSpeed(const bool dS) { + baseCycle = 90 + dS * 4; + } + + void setScxSource(const unsigned scxSrc_in) { + scxSrc = scxSrc_in; + } +}; + +static inline void addEvent(event_queue &q, BreakEvent *const e, const unsigned long newTime) { + addUnconditionalEvent(q, e, newTime); +} + +static inline void addFixedtimeEvent(event_queue &q, BreakEvent *const e, const unsigned long newTime) { + addUnconditionalFixedtimeEvent(q, e, newTime); +} + +#endif diff --git a/supergameboy/libgambatte/src/video/filters/catrom2x.cpp b/supergameboy/libgambatte/src/video/filters/catrom2x.cpp new file mode 100644 index 00000000..53a4c931 --- /dev/null +++ b/supergameboy/libgambatte/src/video/filters/catrom2x.cpp @@ -0,0 +1,194 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "catrom2x.h" +#include "filterinfo.h" +#include + +struct Colorsum { + Gambatte::uint_least32_t r, g, b; +}; + +static void merge_columns(Gambatte::uint_least32_t *dest, const Colorsum *sums) { + unsigned w = 160; + + while (w--) { + { + Gambatte::uint_least32_t rsum = sums[1].r; + Gambatte::uint_least32_t gsum = sums[1].g; + Gambatte::uint_least32_t bsum = sums[1].b; + + if (rsum & 0x80000000) rsum = 0; + if (gsum & 0x80000000) gsum = 0; + if (bsum & 0x80000000) bsum = 0; + + rsum <<= 12; + rsum += 0x008000; + gsum >>= 4; + gsum += 0x0080; + bsum += 0x0008; + bsum >>= 4; + + if (rsum > 0xFF0000) rsum = 0xFF0000; + if (gsum > 0x00FF00) gsum = 0x00FF00; + if (bsum > 0x0000FF) bsum = 0x0000FF; + + *dest++ = (rsum & 0xFF0000) | (gsum & 0x00FF00) | bsum; + } + + { + Gambatte::uint_least32_t rsum = sums[1].r * 9; + Gambatte::uint_least32_t gsum = sums[1].g * 9; + Gambatte::uint_least32_t bsum = sums[1].b * 9; + + rsum -= sums[0].r; + gsum -= sums[0].g; + bsum -= sums[0].b; + + rsum += sums[2].r * 9; + gsum += sums[2].g * 9; + bsum += sums[2].b * 9; + + rsum -= sums[3].r; + gsum -= sums[3].g; + bsum -= sums[3].b; + + if (rsum & 0x80000000) rsum = 0; + if (gsum & 0x80000000) gsum = 0; + if (bsum & 0x80000000) bsum = 0; + + rsum <<= 8; + rsum += 0x008000; + gsum >>= 8; + gsum += 0x000080; + bsum += 0x000080; + bsum >>= 8; + + if (rsum > 0xFF0000) rsum = 0xFF0000; + if (gsum > 0x00FF00) gsum = 0x00FF00; + if (bsum > 0x0000FF) bsum = 0x0000FF; + + *dest++ = (rsum & 0xFF0000) | (gsum & 0x00FF00) | bsum; + } + + ++sums; + } +} + +static void filter(Gambatte::uint_least32_t *dline, const unsigned pitch, const Gambatte::uint_least32_t *sline) { + Colorsum sums[163]; + + for (unsigned h = 144; h--;) { + { + const Gambatte::uint_least32_t *s = sline; + Colorsum *sum = sums; + unsigned n = 163; + + while (n--) { + unsigned long pixel = *s; + sum->r = pixel >> 12 & 0x000FF0 ; + pixel <<= 4; + sum->g = pixel & 0x0FF000; + sum->b = pixel & 0x000FF0; + + ++s; + ++sum; + } + } + + merge_columns(dline, sums); + dline += pitch; + + { + const Gambatte::uint_least32_t *s = sline; + Colorsum *sum = sums; + unsigned n = 163; + + while (n--) { + unsigned long pixel = *s; + unsigned long rsum = (pixel >> 16) * 9; + unsigned long gsum = (pixel & 0x00FF00) * 9; + unsigned long bsum = (pixel & 0x0000FF) * 9; + + pixel = s[-1*163]; + rsum -= pixel >> 16; + gsum -= pixel & 0x00FF00; + bsum -= pixel & 0x0000FF; + + pixel = s[1*163]; + rsum += (pixel >> 16) * 9; + gsum += (pixel & 0x00FF00) * 9; + bsum += (pixel & 0x0000FF) * 9; + + pixel = s[2*163]; + rsum -= pixel >> 16; + gsum -= pixel & 0x00FF00; + bsum -= pixel & 0x0000FF; + + sum->r = rsum; + sum->g = gsum; + sum->b = bsum; + + ++s; + ++sum; + } + } + + merge_columns(dline, sums); + dline += pitch; + sline += 163; + } +} + +Catrom2x::Catrom2x() { + buffer = NULL; +} + +Catrom2x::~Catrom2x() { + delete []buffer; +} + +void Catrom2x::init() { + delete []buffer; + + buffer = new Gambatte::uint_least32_t[147 * 163]; + std::memset(buffer, 0, 147ul * 163 * sizeof(Gambatte::uint_least32_t)); +} + +void Catrom2x::outit() { + delete []buffer; + buffer = NULL; +} + +const Gambatte::FilterInfo& Catrom2x::info() { + static Gambatte::FilterInfo fInfo = { "Bicubic Catmull-Rom Spline 2x", 160 * 2, 144 * 2 }; + + return fInfo; +} + +Gambatte::uint_least32_t* Catrom2x::inBuffer() { + return buffer + 164; +} + +unsigned Catrom2x::inPitch() { + return 163; +} + +void Catrom2x::filter(Gambatte::uint_least32_t *const dbuffer, const unsigned pitch) { + ::filter(dbuffer, pitch, buffer + 163); +} diff --git a/supergameboy/libgambatte/src/video/filters/catrom2x.h b/supergameboy/libgambatte/src/video/filters/catrom2x.h new file mode 100644 index 00000000..df657f04 --- /dev/null +++ b/supergameboy/libgambatte/src/video/filters/catrom2x.h @@ -0,0 +1,40 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef CATROM2X_H +#define CATROM2X_H + +#include "filter.h" + +struct FilterInfo; + +class Catrom2x : public Filter { + Gambatte::uint_least32_t *buffer; + +public: + Catrom2x(); + ~Catrom2x(); + void init(); + void outit(); + const Gambatte::FilterInfo& info(); + void filter(Gambatte::uint_least32_t *dbuffer, unsigned pitch); + Gambatte::uint_least32_t* inBuffer(); + unsigned inPitch(); +}; + +#endif diff --git a/supergameboy/libgambatte/src/video/filters/catrom3x.cpp b/supergameboy/libgambatte/src/video/filters/catrom3x.cpp new file mode 100644 index 00000000..09a03f6a --- /dev/null +++ b/supergameboy/libgambatte/src/video/filters/catrom3x.cpp @@ -0,0 +1,360 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "catrom3x.h" +#include "filterinfo.h" +#include + +struct Colorsum { + Gambatte::uint_least32_t r, g, b; +}; + +static void merge_columns(Gambatte::uint_least32_t *dest, const Colorsum *sums) { + unsigned w = 160; + + while (w--) { + { + Gambatte::uint_least32_t rsum = sums[1].r; + Gambatte::uint_least32_t gsum = sums[1].g; + Gambatte::uint_least32_t bsum = sums[1].b; + + if (rsum & 0x80000000) + rsum = 0; + else if (rsum > 6869) + rsum = 0xFF0000; + else { + rsum *= 607; + rsum <<= 2; + rsum += 0x008000; + rsum &= 0xFF0000; + } + + if (gsum & 0x80000000) + gsum = 0; + else if (gsum > 1758567) + gsum = 0xFF00; + else { + gsum *= 607; + gsum >>= 14; + gsum += 0x000080; + gsum &= 0x00FF00; + } + + if (bsum & 0x80000000) + bsum = 0; + else if (bsum > 6869) + bsum = 0xFF; + else { + bsum *= 607; + bsum += 8192; + bsum >>= 14; + } + + /*rsum/=27; + rsum<<=8; + gsum/=27; + gsum<<=5; + bsum<<=4; + bsum+=27; + bsum/=54; + rsum+=0x008000; + gsum+=0x000080; + + if(rsum>0xFF0000) rsum=0xFF0000; + if(gsum>0x00FF00) gsum=0x00FF00; + if(bsum>0x0000FF) bsum=0x0000FF;*/ + + *dest++ = rsum/*&0xFF0000*/ | gsum/*&0x00FF00*/ | bsum; + } + { + Gambatte::uint_least32_t rsum = sums[1].r * 21; + Gambatte::uint_least32_t gsum = sums[1].g * 21; + Gambatte::uint_least32_t bsum = sums[1].b * 21; + + rsum -= sums[0].r << 1; + gsum -= sums[0].g << 1; + bsum -= sums[0].b << 1; + + rsum += sums[2].r * 9; + gsum += sums[2].g * 9; + bsum += sums[2].b * 9; + + rsum -= sums[3].r; + gsum -= sums[3].g; + bsum -= sums[3].b; + + if (rsum & 0x80000000) + rsum = 0; + else if (rsum > 185578) + rsum = 0xFF0000; + else { + rsum *= 719; + rsum >>= 3; + rsum += 0x008000; + rsum &= 0xFF0000; + } + + if (gsum & 0x80000000) + gsum = 0; + else if (gsum > 47508223) + gsum = 0x00FF00; + else { + gsum >>= 8; + gsum *= 719; + gsum >>= 11; + gsum += 0x000080; + gsum &= 0x00FF00; + } + + if (bsum & 0x80000000) + bsum = 0; + else if (bsum > 185578) + bsum = 0x0000FF; + else { + bsum *= 719; + bsum += 0x040000; + bsum >>= 19; + } + + /*rsum/=729; + rsum<<=8; + gsum/=729; + gsum<<=5; + bsum<<=4; + bsum+=729; + bsum/=1458; + rsum+=0x008000; + gsum+=0x000080; + + if(rsum>0xFF0000) rsum=0xFF0000; + if(gsum>0x00FF00) gsum=0x00FF00; + if(bsum>0x0000FF) bsum=0x0000FF;*/ + + *dest++ = rsum/*&0xFF0000*/ | gsum/*&0x00FF00*/ | bsum; + } + { + Gambatte::uint_least32_t rsum = sums[1].r * 9; + Gambatte::uint_least32_t gsum = sums[1].g * 9; + Gambatte::uint_least32_t bsum = sums[1].b * 9; + + rsum -= sums[0].r; + gsum -= sums[0].g; + bsum -= sums[0].b; + + rsum += sums[2].r * 21; + gsum += sums[2].g * 21; + bsum += sums[2].b * 21; + + rsum -= sums[3].r << 1; + gsum -= sums[3].g << 1; + bsum -= sums[3].b << 1; + + if (rsum & 0x80000000) + rsum = 0; + else if (rsum > 185578) + rsum = 0xFF0000; + else { + rsum *= 719; + rsum >>= 3; + rsum += 0x008000; + rsum &= 0xFF0000; + } + + if (gsum & 0x80000000) + gsum = 0; + else if (gsum > 47508223) + gsum = 0xFF00; + else { + gsum >>= 8; + gsum *= 719; + gsum >>= 11; + gsum += 0x000080; + gsum &= 0x00FF00; + } + + if (bsum & 0x80000000) + bsum = 0; + else if (bsum > 185578) + bsum = 0x0000FF; + else { + bsum *= 719; + bsum += 0x040000; + bsum >>= 19; + } + + /*rsum/=729; + rsum<<=8; + gsum/=729; + gsum<<=5; + bsum<<=4; + bsum+=729; + bsum/=1458; + rsum+=0x008000; + gsum+=0x000080; + + if(rsum>0xFF0000) rsum=0xFF0000; + if(gsum>0x00FF00) gsum=0x00FF00; + if(bsum>0x0000FF) bsum=0x0000FF;*/ + + *dest++ = rsum/*&0xFF0000*/ | gsum/*&0x00FF00*/ | bsum; + } + ++sums; + } +} + +static void filter(Gambatte::uint_least32_t *dline, const unsigned pitch, const Gambatte::uint_least32_t *sline) { + Colorsum sums[163]; + + for (unsigned h = 144; h--;) { + { + const Gambatte::uint_least32_t *s = sline; + Colorsum *sum = sums; + unsigned n = 163; + + while (n--) { + const unsigned long pixel = *s; + sum->r = (pixel >> 16) * 27; + sum->g = (pixel & 0x00FF00) * 27; + sum->b = (pixel & 0x0000FF) * 27; + + ++s; + ++sum; + } + } + + merge_columns(dline, sums); + dline += pitch; + + { + const Gambatte::uint_least32_t *s = sline; + Colorsum *sum = sums; + unsigned n = 163; + + while (n--) { + unsigned long pixel = *s; + unsigned long rsum = (pixel >> 16) * 21; + unsigned long gsum = (pixel & 0x00FF00) * 21; + unsigned long bsum = (pixel & 0x0000FF) * 21; + + pixel = s[-1 * 163]; + rsum -= (pixel >> 16) << 1; + pixel <<= 1; + gsum -= pixel & 0x01FE00; + bsum -= pixel & 0x0001FE; + + pixel = s[1 * 163]; + rsum += (pixel >> 16) * 9; + gsum += (pixel & 0x00FF00) * 9; + bsum += (pixel & 0x0000FF) * 9; + + pixel = s[2 * 163]; + rsum -= pixel >> 16; + gsum -= pixel & 0x00FF00; + bsum -= pixel & 0x0000FF; + + sum->r = rsum; + sum->g = gsum; + sum->b = bsum; + + ++s; + ++sum; + } + } + + merge_columns(dline, sums); + dline += pitch; + + { + const Gambatte::uint_least32_t *s = sline; + Colorsum *sum = sums; + unsigned n = 163; + + while (n--) { + unsigned long pixel = *s; + unsigned long rsum = (pixel >> 16) * 9; + unsigned long gsum = (pixel & 0x00FF00) * 9; + unsigned long bsum = (pixel & 0x0000FF) * 9; + + pixel = s[-1 * 163]; + rsum -= pixel >> 16; + gsum -= pixel & 0x00FF00; + bsum -= pixel & 0x0000FF; + + pixel = s[1 * 163]; + rsum += (pixel >> 16) * 21; + gsum += (pixel & 0x00FF00) * 21; + bsum += (pixel & 0x0000FF) * 21; + + pixel = s[2 * 163]; + rsum -= (pixel >> 16) << 1; + pixel <<= 1; + gsum -= pixel & 0x01FE00; + bsum -= pixel & 0x0001FE; + + sum->r = rsum; + sum->g = gsum; + sum->b = bsum; + + ++s; + ++sum; + } + } + + merge_columns(dline, sums); + dline += pitch; + sline += 163; + } +} + +Catrom3x::Catrom3x() { + buffer = NULL; +} + +Catrom3x::~Catrom3x() { + delete []buffer; +} + +void Catrom3x::init() { + delete []buffer; + + buffer = new Gambatte::uint_least32_t[147 * 163]; + std::memset(buffer, 0, 147ul * 163 * sizeof(Gambatte::uint_least32_t)); +} + +void Catrom3x::outit() { + delete []buffer; + buffer = NULL; +} + +const Gambatte::FilterInfo& Catrom3x::info() { + static Gambatte::FilterInfo fInfo = { "Bicubic Catmull-Rom Spline 3x", 160 * 3, 144 * 3 }; + + return fInfo; +} + +Gambatte::uint_least32_t* Catrom3x::inBuffer() { + return buffer + 164; +} + +unsigned Catrom3x::inPitch() { + return 163; +} + +void Catrom3x::filter(Gambatte::uint_least32_t *const dbuffer, const unsigned pitch) { + ::filter(dbuffer, pitch, buffer + 163); +} diff --git a/supergameboy/libgambatte/src/video/filters/catrom3x.h b/supergameboy/libgambatte/src/video/filters/catrom3x.h new file mode 100644 index 00000000..64f47827 --- /dev/null +++ b/supergameboy/libgambatte/src/video/filters/catrom3x.h @@ -0,0 +1,40 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef CATROM3X_H +#define CATROM3X_H + +#include "filter.h" + +struct FilterInfo; + +class Catrom3x : public Filter { + Gambatte::uint_least32_t *buffer; + +public: + Catrom3x(); + ~Catrom3x(); + void init(); + void outit(); + const Gambatte::FilterInfo& info(); + void filter(Gambatte::uint_least32_t *dbuffer, unsigned pitch); + Gambatte::uint_least32_t* inBuffer(); + unsigned inPitch(); +}; + +#endif diff --git a/supergameboy/libgambatte/src/video/filters/filter.h b/supergameboy/libgambatte/src/video/filters/filter.h new file mode 100644 index 00000000..72e3bf7d --- /dev/null +++ b/supergameboy/libgambatte/src/video/filters/filter.h @@ -0,0 +1,39 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef FILTER_H +#define FILTER_H + +#include "int.h" + +namespace Gambatte { +struct FilterInfo; +} + +class Filter { +public: + virtual ~Filter() {} + virtual void init() {}; + virtual void outit() {}; + virtual const Gambatte::FilterInfo& info() = 0; + virtual void filter(Gambatte::uint_least32_t *dbuffer, unsigned pitch) = 0; + virtual Gambatte::uint_least32_t* inBuffer() = 0; + virtual unsigned inPitch() = 0; +}; + +#endif diff --git a/supergameboy/libgambatte/src/video/filters/kreed2xsai.cpp b/supergameboy/libgambatte/src/video/filters/kreed2xsai.cpp new file mode 100644 index 00000000..70c261b3 --- /dev/null +++ b/supergameboy/libgambatte/src/video/filters/kreed2xsai.cpp @@ -0,0 +1,243 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * Copyright (C) 1999 Derek Liauw Kie Fa (Kreed) * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "kreed2xsai.h" +#include "filterinfo.h" +#include + +static inline int getResult1(const unsigned long a, const unsigned long b, const unsigned long c, const unsigned long d) { + int x = 0; + int y = 0; + int r = 0; + + if (a == c) ++x; + else if (b == c) ++y; + + if (a == d) ++x; + else if (b == d) ++y; + + if (x <= 1) ++r; + + if (y <= 1) --r; + + return r; +} + +static inline int getResult2(const unsigned long a, const unsigned long b, const unsigned long c, const unsigned long d) { + int x = 0; + int y = 0; + int r = 0; + + if (a == c) ++x; + else if (b == c) ++y; + + if (a == d) ++x; + else if (b == d) ++y; + + if (x <= 1) --r; + + if (y <= 1) ++r; + + return r; +} + +static inline unsigned long interpolate(const unsigned long a, const unsigned long b) { + return (a + b - ((a ^ b) & 0x010101)) >> 1; +} + +static inline unsigned long qInterpolate(const unsigned long a, const unsigned long b, const unsigned long c, const unsigned long d) { + const unsigned long lowBits = ((a & 0x030303) + (b & 0x030303) + (c & 0x030303) + (d & 0x030303)) & 0x030303; + + return (a + b + c + d - lowBits) >> 2; +} + +static void filter(Gambatte::uint_least32_t *dstPtr, const unsigned dstPitch, + const Gambatte::uint_least32_t *srcPtr, const unsigned srcPitch, const unsigned width, unsigned height) +{ + while (height--) { + const Gambatte::uint_least32_t *bP = srcPtr; + Gambatte::uint_least32_t *dP = dstPtr; + + for (unsigned finish = width; finish--;) { + register unsigned long colorA, colorB; + unsigned long colorC, colorD, + colorE, colorF, colorG, colorH, + colorI, colorJ, colorK, colorL, + + colorM, colorN, colorO, colorP; + unsigned long product, product1, product2; + + //--------------------------------------- + // Map of the pixels: I|E F|J + // G|A B|K + // H|C D|L + // M|N O|P + colorI = *(bP - srcPitch - 1); + colorE = *(bP - srcPitch); + colorF = *(bP - srcPitch + 1); + colorJ = *(bP - srcPitch + 2); + + colorG = *(bP - 1); + colorA = *(bP); + colorB = *(bP + 1); + colorK = *(bP + 2); + + colorH = *(bP + srcPitch - 1); + colorC = *(bP + srcPitch); + colorD = *(bP + srcPitch + 1); + colorL = *(bP + srcPitch + 2); + + colorM = *(bP + srcPitch * 2 - 1); + colorN = *(bP + srcPitch * 2); + colorO = *(bP + srcPitch * 2 + 1); + colorP = *(bP + srcPitch * 2 + 2); + + if (colorA == colorD && colorB != colorC) { + if ((colorA == colorE && colorB == colorL) || + (colorA == colorC && colorA == colorF + && colorB != colorE && colorB == colorJ)) { + product = colorA; + } else { + product = interpolate(colorA, colorB); + } + + if ((colorA == colorG && colorC == colorO) || + (colorA == colorB && colorA == colorH + && colorG != colorC && colorC == colorM)) { + product1 = colorA; + } else { + product1 = interpolate(colorA, colorC); + } + product2 = colorA; + } else if (colorB == colorC && colorA != colorD) { + if ((colorB == colorF && colorA == colorH) || + (colorB == colorE && colorB == colorD + && colorA != colorF && colorA == colorI)) { + product = colorB; + } else { + product = interpolate(colorA, colorB); + } + + if ((colorC == colorH && colorA == colorF) || + (colorC == colorG && colorC == colorD + && colorA != colorH && colorA == colorI)) { + product1 = colorC; + } else { + product1 = interpolate(colorA, colorC); + } + product2 = colorB; + } else if (colorA == colorD && colorB == colorC) { + if (colorA == colorB) { + product = colorA; + product1 = colorA; + product2 = colorA; + } else { + register int r = 0; + + product1 = interpolate(colorA, colorC); + product = interpolate(colorA, colorB); + + r += getResult1(colorA, colorB, colorG, colorE); + r += getResult2(colorB, colorA, colorK, colorF); + r += getResult2(colorB, colorA, colorH, colorN); + r += getResult1(colorA, colorB, colorL, colorO); + + if (r > 0) + product2 = colorA; + else if (r < 0) + product2 = colorB; + else { + product2 = qInterpolate(colorA, colorB, colorC, colorD); + } + } + } else { + product2 = qInterpolate(colorA, colorB, colorC, colorD); + + if (colorA == colorC && colorA == colorF + && colorB != colorE && colorB == colorJ) { + product = colorA; + } else if (colorB == colorE && colorB == colorD + && colorA != colorF && colorA == colorI) { + product = colorB; + } else { + product = interpolate(colorA, colorB); + } + + if (colorA == colorB && colorA == colorH + && colorG != colorC && colorC == colorM) { + product1 = colorA; + } else if (colorC == colorG && colorC == colorD + && colorA != colorH && colorA == colorI) { + product1 = colorC; + } else { + product1 = interpolate(colorA, colorC); + } + } + *dP = colorA; + *(dP + 1) = product; + *(dP + dstPitch) = product1; + *(dP + dstPitch + 1) = product2; + + ++bP; + dP += 2; + } + + srcPtr += srcPitch; + dstPtr += dstPitch * 2; + } +} + +Kreed_2xSaI::Kreed_2xSaI() { + buffer = NULL; +} + +Kreed_2xSaI::~Kreed_2xSaI() { + delete []buffer; +} + +void Kreed_2xSaI::init() { + delete []buffer; + + buffer = new Gambatte::uint_least32_t[145 * 161]; + std::memset(buffer, 0, 145ul * 161 * sizeof(Gambatte::uint_least32_t)); +} + +void Kreed_2xSaI::outit() { + delete []buffer; + buffer = NULL; +} + +const Gambatte::FilterInfo& Kreed_2xSaI::info() { + static Gambatte::FilterInfo fInfo = { "Kreed's 2xSaI", 160 * 2, 144 * 2 }; + + return fInfo; +} + +Gambatte::uint_least32_t* Kreed_2xSaI::inBuffer() { + return buffer; +} + +unsigned Kreed_2xSaI::inPitch() { + return 161; +} + +void Kreed_2xSaI::filter(Gambatte::uint_least32_t *const dbuffer, const unsigned pitch) { + ::filter(dbuffer, pitch, buffer, 161, 160, 144); +} diff --git a/supergameboy/libgambatte/src/video/filters/kreed2xsai.h b/supergameboy/libgambatte/src/video/filters/kreed2xsai.h new file mode 100644 index 00000000..f2feffc0 --- /dev/null +++ b/supergameboy/libgambatte/src/video/filters/kreed2xsai.h @@ -0,0 +1,40 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef KREED2XSAI_H +#define KREED2XSAI_H + +#include "filter.h" + +struct FilterInfo; + +class Kreed_2xSaI : public Filter { + Gambatte::uint_least32_t *buffer; + +public: + Kreed_2xSaI(); + ~Kreed_2xSaI(); + void init(); + void outit(); + const Gambatte::FilterInfo& info(); + void filter(Gambatte::uint_least32_t *dbuffer, unsigned pitch); + Gambatte::uint_least32_t* inBuffer(); + unsigned inPitch(); +}; + +#endif diff --git a/supergameboy/libgambatte/src/video/filters/maxsthq2x.cpp b/supergameboy/libgambatte/src/video/filters/maxsthq2x.cpp new file mode 100644 index 00000000..a818d62a --- /dev/null +++ b/supergameboy/libgambatte/src/video/filters/maxsthq2x.cpp @@ -0,0 +1,2875 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * Copyright (C) 2003 MaxSt * + * maxst@hiend3d.com * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +***************************************************************************/ +#include "maxsthq2x.h" +#include "filterinfo.h" +#include + +static /*inline*/ unsigned long Interp1(const unsigned long c1, const unsigned long c2) { + const unsigned long lowbits = ((c1 & 0x030303) * 3 + (c2 & 0x030303)) & 0x030303; + + return (c1 * 3 + c2 - lowbits) >> 2; +} + +static /*inline*/ unsigned long Interp2(const unsigned long c1, const unsigned long c2, const unsigned long c3) { + const unsigned long lowbits = ((c1 * 2 & 0x020202) + (c2 & 0x030303) + (c3 & 0x030303)) & 0x030303; + + return (c1 * 2 + c2 + c3 - lowbits) >> 2; +} + +static /*inline*/ unsigned long Interp6(const unsigned long c1, const unsigned long c2, const unsigned long c3) { + const unsigned long lowbits = ((c1 & 0x070707) * 5 + (c2 * 2 & 0x060606) + (c3 & 0x070707)) & 0x070707; + + return ((c1 * 5 + c2 * 2 + c3) - lowbits) >> 3; +} + +static /*inline*/ unsigned long Interp7(const unsigned long c1, const unsigned long c2, const unsigned long c3) { + const unsigned long lowbits = ((c1 & 0x070707) * 6 + (c2 & 0x070707) + (c3 & 0x070707)) & 0x070707; + + return ((c1 * 6 + c2 + c3) - lowbits) >> 3; +} + +static /*inline*/ unsigned long Interp9(unsigned long c1, const unsigned long c2, const unsigned long c3) { + const unsigned lowbits = ((c1 * 2 & 0x070707) + ((c2 & 0x070707) + (c3 & 0x070707)) * 3) & 0x070707; + + return (c1 * 2 + (c2 + c3) * 3 - lowbits) >> 3; +} + +static /*inline*/ unsigned long Interp10(const unsigned long c1, const unsigned long c2, const unsigned long c3) { + const unsigned lowbits = ((c1 & 0x0F0F0F) * 14 + (c2 & 0x0F0F0F) + (c3 & 0x0F0F0F)) & 0x0F0F0F; + + return (c1 * 14 + c2 + c3 - lowbits) >> 4; +} + +#define PIXEL00_0 *pOut = w[5]; +#define PIXEL00_10 *pOut = Interp1(w[5], w[1]); +#define PIXEL00_11 *pOut = Interp1(w[5], w[4]); +#define PIXEL00_12 *pOut = Interp1(w[5], w[2]); +#define PIXEL00_20 *pOut = Interp2(w[5], w[4], w[2]); +#define PIXEL00_21 *pOut = Interp2(w[5], w[1], w[2]); +#define PIXEL00_22 *pOut = Interp2(w[5], w[1], w[4]); +#define PIXEL00_60 *pOut = Interp6(w[5], w[2], w[4]); +#define PIXEL00_61 *pOut = Interp6(w[5], w[4], w[2]); +#define PIXEL00_70 *pOut = Interp7(w[5], w[4], w[2]); +#define PIXEL00_90 *pOut = Interp9(w[5], w[4], w[2]); +#define PIXEL00_100 *pOut = Interp10(w[5], w[4], w[2]); +#define PIXEL01_0 *(pOut+1) = w[5]; +#define PIXEL01_10 *(pOut+1) = Interp1(w[5], w[3]); +#define PIXEL01_11 *(pOut+1) = Interp1(w[5], w[2]); +#define PIXEL01_12 *(pOut+1) = Interp1(w[5], w[6]); +#define PIXEL01_20 *(pOut+1) = Interp2(w[5], w[2], w[6]); +#define PIXEL01_21 *(pOut+1) = Interp2(w[5], w[3], w[6]); +#define PIXEL01_22 *(pOut+1) = Interp2(w[5], w[3], w[2]); +#define PIXEL01_60 *(pOut+1) = Interp6(w[5], w[6], w[2]); +#define PIXEL01_61 *(pOut+1) = Interp6(w[5], w[2], w[6]); +#define PIXEL01_70 *(pOut+1) = Interp7(w[5], w[2], w[6]); +#define PIXEL01_90 *(pOut+1) = Interp9(w[5], w[2], w[6]); +#define PIXEL01_100 *(pOut+1) = Interp10(w[5], w[2], w[6]); +#define PIXEL10_0 *(pOut+dstPitch) = w[5]; +#define PIXEL10_10 *(pOut+dstPitch) = Interp1(w[5], w[7]); +#define PIXEL10_11 *(pOut+dstPitch) = Interp1(w[5], w[8]); +#define PIXEL10_12 *(pOut+dstPitch) = Interp1(w[5], w[4]); +#define PIXEL10_20 *(pOut+dstPitch) = Interp2(w[5], w[8], w[4]); +#define PIXEL10_21 *(pOut+dstPitch) = Interp2(w[5], w[7], w[4]); +#define PIXEL10_22 *(pOut+dstPitch) = Interp2(w[5], w[7], w[8]); +#define PIXEL10_60 *(pOut+dstPitch) = Interp6(w[5], w[4], w[8]); +#define PIXEL10_61 *(pOut+dstPitch) = Interp6(w[5], w[8], w[4]); +#define PIXEL10_70 *(pOut+dstPitch) = Interp7(w[5], w[8], w[4]); +#define PIXEL10_90 *(pOut+dstPitch) = Interp9(w[5], w[8], w[4]); +#define PIXEL10_100 *(pOut+dstPitch) = Interp10(w[5], w[8], w[4]); +#define PIXEL11_0 *(pOut+dstPitch+1) = w[5]; +#define PIXEL11_10 *(pOut+dstPitch+1) = Interp1(w[5], w[9]); +#define PIXEL11_11 *(pOut+dstPitch+1) = Interp1(w[5], w[6]); +#define PIXEL11_12 *(pOut+dstPitch+1) = Interp1(w[5], w[8]); +#define PIXEL11_20 *(pOut+dstPitch+1) = Interp2(w[5], w[6], w[8]); +#define PIXEL11_21 *(pOut+dstPitch+1) = Interp2(w[5], w[9], w[8]); +#define PIXEL11_22 *(pOut+dstPitch+1) = Interp2(w[5], w[9], w[6]); +#define PIXEL11_60 *(pOut+dstPitch+1) = Interp6(w[5], w[8], w[6]); +#define PIXEL11_61 *(pOut+dstPitch+1) = Interp6(w[5], w[6], w[8]); +#define PIXEL11_70 *(pOut+dstPitch+1) = Interp7(w[5], w[6], w[8]); +#define PIXEL11_90 *(pOut+dstPitch+1) = Interp9(w[5], w[6], w[8]); +#define PIXEL11_100 *(pOut+dstPitch+1) = Interp10(w[5], w[6], w[8]); + +static /*inline*/ bool Diff(const unsigned long w1, const unsigned long w2) { + const unsigned rdiff = (w1 >> 16) - (w2 >> 16); + const unsigned gdiff = (w1 >> 8 & 0xFF) - (w2 >> 8 & 0xFF); + const unsigned bdiff = (w1 & 0xFF) - (w2 & 0xFF); + + return rdiff + gdiff + bdiff + 0xC0U > 0xC0U * 2 || + rdiff - bdiff + 0x1CU > 0x1CU * 2 || + gdiff * 2 - rdiff - bdiff + 0x30U > 0x30U * 2; +} + +static void filter(Gambatte::uint_least32_t *pOut, const unsigned dstPitch, + const Gambatte::uint_least32_t *pIn, const unsigned Xres, const unsigned Yres) +{ + unsigned long w[10]; + + // +----+----+----+ + // | | | | + // | w1 | w2 | w3 | + // +----+----+----+ + // | | | | + // | w4 | w5 | w6 | + // +----+----+----+ + // | | | | + // | w7 | w8 | w9 | + // +----+----+----+ + + for (unsigned j = 0; j < Yres; j++) { + const unsigned prevline = j > 0 ? Xres : 0; + const unsigned nextline = j < Yres - 1 ? Xres : 0; + + for (unsigned i = 0; i < Xres; i++) { + w[2] = *(pIn - prevline); + w[5] = *(pIn); + w[8] = *(pIn + nextline); + + if (i > 0) { + w[1] = *(pIn - prevline - 1); + w[4] = *(pIn - 1); + w[7] = *(pIn + nextline - 1); + } else { + w[1] = w[2]; + w[4] = w[5]; + w[7] = w[8]; + } + + if (i < Xres - 1) { + w[3] = *(pIn - prevline + 1); + w[6] = *(pIn + 1); + w[9] = *(pIn + nextline + 1); + } else { + w[3] = w[2]; + w[6] = w[5]; + w[9] = w[8]; + } + + unsigned pattern = 0; + + { + unsigned flag = 1; + + const unsigned r1 = w[5] >> 16; + const unsigned g1 = w[5] >> 8 & 0xFF; + const unsigned b1 = w[5] & 0xFF; + + for (unsigned k = 1; k < 10; ++k) { + if (k == 5) continue; + + if (w[k] != w[5]) { + const unsigned rdiff = r1 - (w[k] >> 16); + const unsigned gdiff = g1 - (w[k] >> 8 & 0xFF); + const unsigned bdiff = b1 - (w[k] & 0xFF); + + if (rdiff + gdiff + bdiff + 0xC0U > 0xC0U * 2 || + rdiff - bdiff + 0x1CU > 0x1CU * 2 || + gdiff * 2 - rdiff - bdiff + 0x30U > 0x30U * 2) + pattern |= flag; + } + + flag <<= 1; + } + } + + switch (pattern) + { + case 0: + case 1: + case 4: + case 32: + case 128: + case 5: + case 132: + case 160: + case 33: + case 129: + case 36: + case 133: + case 164: + case 161: + case 37: + case 165: + { + PIXEL00_20 + PIXEL01_20 + PIXEL10_20 + PIXEL11_20 + break; + } + case 2: + case 34: + case 130: + case 162: + { + PIXEL00_22 + PIXEL01_21 + PIXEL10_20 + PIXEL11_20 + break; + } + case 16: + case 17: + case 48: + case 49: + { + PIXEL00_20 + PIXEL01_22 + PIXEL10_20 + PIXEL11_21 + break; + } + case 64: + case 65: + case 68: + case 69: + { + PIXEL00_20 + PIXEL01_20 + PIXEL10_21 + PIXEL11_22 + break; + } + case 8: + case 12: + case 136: + case 140: + { + PIXEL00_21 + PIXEL01_20 + PIXEL10_22 + PIXEL11_20 + break; + } + case 3: + case 35: + case 131: + case 163: + { + PIXEL00_11 + PIXEL01_21 + PIXEL10_20 + PIXEL11_20 + break; + } + case 6: + case 38: + case 134: + case 166: + { + PIXEL00_22 + PIXEL01_12 + PIXEL10_20 + PIXEL11_20 + break; + } + case 20: + case 21: + case 52: + case 53: + { + PIXEL00_20 + PIXEL01_11 + PIXEL10_20 + PIXEL11_21 + break; + } + case 144: + case 145: + case 176: + case 177: + { + PIXEL00_20 + PIXEL01_22 + PIXEL10_20 + PIXEL11_12 + break; + } + case 192: + case 193: + case 196: + case 197: + { + PIXEL00_20 + PIXEL01_20 + PIXEL10_21 + PIXEL11_11 + break; + } + case 96: + case 97: + case 100: + case 101: + { + PIXEL00_20 + PIXEL01_20 + PIXEL10_12 + PIXEL11_22 + break; + } + case 40: + case 44: + case 168: + case 172: + { + PIXEL00_21 + PIXEL01_20 + PIXEL10_11 + PIXEL11_20 + break; + } + case 9: + case 13: + case 137: + case 141: + { + PIXEL00_12 + PIXEL01_20 + PIXEL10_22 + PIXEL11_20 + break; + } + case 18: + case 50: + { + PIXEL00_22 + if (Diff(w[2], w[6])) + { + PIXEL01_10 + } + else + { + PIXEL01_20 + } + PIXEL10_20 + PIXEL11_21 + break; + } + case 80: + case 81: + { + PIXEL00_20 + PIXEL01_22 + PIXEL10_21 + if (Diff(w[6], w[8])) + { + PIXEL11_10 + } + else + { + PIXEL11_20 + } + break; + } + case 72: + case 76: + { + PIXEL00_21 + PIXEL01_20 + if (Diff(w[8], w[4])) + { + PIXEL10_10 + } + else + { + PIXEL10_20 + } + PIXEL11_22 + break; + } + case 10: + case 138: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + } + else + { + PIXEL00_20 + } + PIXEL01_21 + PIXEL10_22 + PIXEL11_20 + break; + } + case 66: + { + PIXEL00_22 + PIXEL01_21 + PIXEL10_21 + PIXEL11_22 + break; + } + case 24: + { + PIXEL00_21 + PIXEL01_22 + PIXEL10_22 + PIXEL11_21 + break; + } + case 7: + case 39: + case 135: + { + PIXEL00_11 + PIXEL01_12 + PIXEL10_20 + PIXEL11_20 + break; + } + case 148: + case 149: + case 180: + { + PIXEL00_20 + PIXEL01_11 + PIXEL10_20 + PIXEL11_12 + break; + } + case 224: + case 228: + case 225: + { + PIXEL00_20 + PIXEL01_20 + PIXEL10_12 + PIXEL11_11 + break; + } + case 41: + case 169: + case 45: + { + PIXEL00_12 + PIXEL01_20 + PIXEL10_11 + PIXEL11_20 + break; + } + case 22: + case 54: + { + PIXEL00_22 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + PIXEL10_20 + PIXEL11_21 + break; + } + case 208: + case 209: + { + PIXEL00_20 + PIXEL01_22 + PIXEL10_21 + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 104: + case 108: + { + PIXEL00_21 + PIXEL01_20 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + PIXEL11_22 + break; + } + case 11: + case 139: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + PIXEL01_21 + PIXEL10_22 + PIXEL11_20 + break; + } + case 19: + case 51: + { + if (Diff(w[2], w[6])) + { + PIXEL00_11 + PIXEL01_10 + } + else + { + PIXEL00_60 + PIXEL01_90 + } + PIXEL10_20 + PIXEL11_21 + break; + } + case 146: + case 178: + { + PIXEL00_22 + if (Diff(w[2], w[6])) + { + PIXEL01_10 + PIXEL11_12 + } + else + { + PIXEL01_90 + PIXEL11_61 + } + PIXEL10_20 + break; + } + case 84: + case 85: + { + PIXEL00_20 + if (Diff(w[6], w[8])) + { + PIXEL01_11 + PIXEL11_10 + } + else + { + PIXEL01_60 + PIXEL11_90 + } + PIXEL10_21 + break; + } + case 112: + case 113: + { + PIXEL00_20 + PIXEL01_22 + if (Diff(w[6], w[8])) + { + PIXEL10_12 + PIXEL11_10 + } + else + { + PIXEL10_61 + PIXEL11_90 + } + break; + } + case 200: + case 204: + { + PIXEL00_21 + PIXEL01_20 + if (Diff(w[8], w[4])) + { + PIXEL10_10 + PIXEL11_11 + } + else + { + PIXEL10_90 + PIXEL11_60 + } + break; + } + case 73: + case 77: + { + if (Diff(w[8], w[4])) + { + PIXEL00_12 + PIXEL10_10 + } + else + { + PIXEL00_61 + PIXEL10_90 + } + PIXEL01_20 + PIXEL11_22 + break; + } + case 42: + case 170: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + PIXEL10_11 + } + else + { + PIXEL00_90 + PIXEL10_60 + } + PIXEL01_21 + PIXEL11_20 + break; + } + case 14: + case 142: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + PIXEL01_12 + } + else + { + PIXEL00_90 + PIXEL01_61 + } + PIXEL10_22 + PIXEL11_20 + break; + } + case 67: + { + PIXEL00_11 + PIXEL01_21 + PIXEL10_21 + PIXEL11_22 + break; + } + case 70: + { + PIXEL00_22 + PIXEL01_12 + PIXEL10_21 + PIXEL11_22 + break; + } + case 28: + { + PIXEL00_21 + PIXEL01_11 + PIXEL10_22 + PIXEL11_21 + break; + } + case 152: + { + PIXEL00_21 + PIXEL01_22 + PIXEL10_22 + PIXEL11_12 + break; + } + case 194: + { + PIXEL00_22 + PIXEL01_21 + PIXEL10_21 + PIXEL11_11 + break; + } + case 98: + { + PIXEL00_22 + PIXEL01_21 + PIXEL10_12 + PIXEL11_22 + break; + } + case 56: + { + PIXEL00_21 + PIXEL01_22 + PIXEL10_11 + PIXEL11_21 + break; + } + case 25: + { + PIXEL00_12 + PIXEL01_22 + PIXEL10_22 + PIXEL11_21 + break; + } + case 26: + case 31: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + PIXEL10_22 + PIXEL11_21 + break; + } + case 82: + case 214: + { + PIXEL00_22 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + PIXEL10_21 + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 88: + case 248: + { + PIXEL00_21 + PIXEL01_22 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 74: + case 107: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + PIXEL01_21 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + PIXEL11_22 + break; + } + case 27: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + PIXEL01_10 + PIXEL10_22 + PIXEL11_21 + break; + } + case 86: + { + PIXEL00_22 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + PIXEL10_21 + PIXEL11_10 + break; + } + case 216: + { + PIXEL00_21 + PIXEL01_22 + PIXEL10_10 + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 106: + { + PIXEL00_10 + PIXEL01_21 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + PIXEL11_22 + break; + } + case 30: + { + PIXEL00_10 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + PIXEL10_22 + PIXEL11_21 + break; + } + case 210: + { + PIXEL00_22 + PIXEL01_10 + PIXEL10_21 + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 120: + { + PIXEL00_21 + PIXEL01_22 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + PIXEL11_10 + break; + } + case 75: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + PIXEL01_21 + PIXEL10_10 + PIXEL11_22 + break; + } + case 29: + { + PIXEL00_12 + PIXEL01_11 + PIXEL10_22 + PIXEL11_21 + break; + } + case 198: + { + PIXEL00_22 + PIXEL01_12 + PIXEL10_21 + PIXEL11_11 + break; + } + case 184: + { + PIXEL00_21 + PIXEL01_22 + PIXEL10_11 + PIXEL11_12 + break; + } + case 99: + { + PIXEL00_11 + PIXEL01_21 + PIXEL10_12 + PIXEL11_22 + break; + } + case 57: + { + PIXEL00_12 + PIXEL01_22 + PIXEL10_11 + PIXEL11_21 + break; + } + case 71: + { + PIXEL00_11 + PIXEL01_12 + PIXEL10_21 + PIXEL11_22 + break; + } + case 156: + { + PIXEL00_21 + PIXEL01_11 + PIXEL10_22 + PIXEL11_12 + break; + } + case 226: + { + PIXEL00_22 + PIXEL01_21 + PIXEL10_12 + PIXEL11_11 + break; + } + case 60: + { + PIXEL00_21 + PIXEL01_11 + PIXEL10_11 + PIXEL11_21 + break; + } + case 195: + { + PIXEL00_11 + PIXEL01_21 + PIXEL10_21 + PIXEL11_11 + break; + } + case 102: + { + PIXEL00_22 + PIXEL01_12 + PIXEL10_12 + PIXEL11_22 + break; + } + case 153: + { + PIXEL00_12 + PIXEL01_22 + PIXEL10_22 + PIXEL11_12 + break; + } + case 58: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + } + else + { + PIXEL00_70 + } + if (Diff(w[2], w[6])) + { + PIXEL01_10 + } + else + { + PIXEL01_70 + } + PIXEL10_11 + PIXEL11_21 + break; + } + case 83: + { + PIXEL00_11 + if (Diff(w[2], w[6])) + { + PIXEL01_10 + } + else + { + PIXEL01_70 + } + PIXEL10_21 + if (Diff(w[6], w[8])) + { + PIXEL11_10 + } + else + { + PIXEL11_70 + } + break; + } + case 92: + { + PIXEL00_21 + PIXEL01_11 + if (Diff(w[8], w[4])) + { + PIXEL10_10 + } + else + { + PIXEL10_70 + } + if (Diff(w[6], w[8])) + { + PIXEL11_10 + } + else + { + PIXEL11_70 + } + break; + } + case 202: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + } + else + { + PIXEL00_70 + } + PIXEL01_21 + if (Diff(w[8], w[4])) + { + PIXEL10_10 + } + else + { + PIXEL10_70 + } + PIXEL11_11 + break; + } + case 78: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + } + else + { + PIXEL00_70 + } + PIXEL01_12 + if (Diff(w[8], w[4])) + { + PIXEL10_10 + } + else + { + PIXEL10_70 + } + PIXEL11_22 + break; + } + case 154: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + } + else + { + PIXEL00_70 + } + if (Diff(w[2], w[6])) + { + PIXEL01_10 + } + else + { + PIXEL01_70 + } + PIXEL10_22 + PIXEL11_12 + break; + } + case 114: + { + PIXEL00_22 + if (Diff(w[2], w[6])) + { + PIXEL01_10 + } + else + { + PIXEL01_70 + } + PIXEL10_12 + if (Diff(w[6], w[8])) + { + PIXEL11_10 + } + else + { + PIXEL11_70 + } + break; + } + case 89: + { + PIXEL00_12 + PIXEL01_22 + if (Diff(w[8], w[4])) + { + PIXEL10_10 + } + else + { + PIXEL10_70 + } + if (Diff(w[6], w[8])) + { + PIXEL11_10 + } + else + { + PIXEL11_70 + } + break; + } + case 90: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + } + else + { + PIXEL00_70 + } + if (Diff(w[2], w[6])) + { + PIXEL01_10 + } + else + { + PIXEL01_70 + } + if (Diff(w[8], w[4])) + { + PIXEL10_10 + } + else + { + PIXEL10_70 + } + if (Diff(w[6], w[8])) + { + PIXEL11_10 + } + else + { + PIXEL11_70 + } + break; + } + case 55: + case 23: + { + if (Diff(w[2], w[6])) + { + PIXEL00_11 + PIXEL01_0 + } + else + { + PIXEL00_60 + PIXEL01_90 + } + PIXEL10_20 + PIXEL11_21 + break; + } + case 182: + case 150: + { + PIXEL00_22 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + PIXEL11_12 + } + else + { + PIXEL01_90 + PIXEL11_61 + } + PIXEL10_20 + break; + } + case 213: + case 212: + { + PIXEL00_20 + if (Diff(w[6], w[8])) + { + PIXEL01_11 + PIXEL11_0 + } + else + { + PIXEL01_60 + PIXEL11_90 + } + PIXEL10_21 + break; + } + case 241: + case 240: + { + PIXEL00_20 + PIXEL01_22 + if (Diff(w[6], w[8])) + { + PIXEL10_12 + PIXEL11_0 + } + else + { + PIXEL10_61 + PIXEL11_90 + } + break; + } + case 236: + case 232: + { + PIXEL00_21 + PIXEL01_20 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + PIXEL11_11 + } + else + { + PIXEL10_90 + PIXEL11_60 + } + break; + } + case 109: + case 105: + { + if (Diff(w[8], w[4])) + { + PIXEL00_12 + PIXEL10_0 + } + else + { + PIXEL00_61 + PIXEL10_90 + } + PIXEL01_20 + PIXEL11_22 + break; + } + case 171: + case 43: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + PIXEL10_11 + } + else + { + PIXEL00_90 + PIXEL10_60 + } + PIXEL01_21 + PIXEL11_20 + break; + } + case 143: + case 15: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + PIXEL01_12 + } + else + { + PIXEL00_90 + PIXEL01_61 + } + PIXEL10_22 + PIXEL11_20 + break; + } + case 124: + { + PIXEL00_21 + PIXEL01_11 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + PIXEL11_10 + break; + } + case 203: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + PIXEL01_21 + PIXEL10_10 + PIXEL11_11 + break; + } + case 62: + { + PIXEL00_10 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + PIXEL10_11 + PIXEL11_21 + break; + } + case 211: + { + PIXEL00_11 + PIXEL01_10 + PIXEL10_21 + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 118: + { + PIXEL00_22 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + PIXEL10_12 + PIXEL11_10 + break; + } + case 217: + { + PIXEL00_12 + PIXEL01_22 + PIXEL10_10 + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 110: + { + PIXEL00_10 + PIXEL01_12 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + PIXEL11_22 + break; + } + case 155: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + PIXEL01_10 + PIXEL10_22 + PIXEL11_12 + break; + } + case 188: + { + PIXEL00_21 + PIXEL01_11 + PIXEL10_11 + PIXEL11_12 + break; + } + case 185: + { + PIXEL00_12 + PIXEL01_22 + PIXEL10_11 + PIXEL11_12 + break; + } + case 61: + { + PIXEL00_12 + PIXEL01_11 + PIXEL10_11 + PIXEL11_21 + break; + } + case 157: + { + PIXEL00_12 + PIXEL01_11 + PIXEL10_22 + PIXEL11_12 + break; + } + case 103: + { + PIXEL00_11 + PIXEL01_12 + PIXEL10_12 + PIXEL11_22 + break; + } + case 227: + { + PIXEL00_11 + PIXEL01_21 + PIXEL10_12 + PIXEL11_11 + break; + } + case 230: + { + PIXEL00_22 + PIXEL01_12 + PIXEL10_12 + PIXEL11_11 + break; + } + case 199: + { + PIXEL00_11 + PIXEL01_12 + PIXEL10_21 + PIXEL11_11 + break; + } + case 220: + { + PIXEL00_21 + PIXEL01_11 + if (Diff(w[8], w[4])) + { + PIXEL10_10 + } + else + { + PIXEL10_70 + } + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 158: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + } + else + { + PIXEL00_70 + } + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + PIXEL10_22 + PIXEL11_12 + break; + } + case 234: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + } + else + { + PIXEL00_70 + } + PIXEL01_21 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + PIXEL11_11 + break; + } + case 242: + { + PIXEL00_22 + if (Diff(w[2], w[6])) + { + PIXEL01_10 + } + else + { + PIXEL01_70 + } + PIXEL10_12 + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 59: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + if (Diff(w[2], w[6])) + { + PIXEL01_10 + } + else + { + PIXEL01_70 + } + PIXEL10_11 + PIXEL11_21 + break; + } + case 121: + { + PIXEL00_12 + PIXEL01_22 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + if (Diff(w[6], w[8])) + { + PIXEL11_10 + } + else + { + PIXEL11_70 + } + break; + } + case 87: + { + PIXEL00_11 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + PIXEL10_21 + if (Diff(w[6], w[8])) + { + PIXEL11_10 + } + else + { + PIXEL11_70 + } + break; + } + case 79: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + PIXEL01_12 + if (Diff(w[8], w[4])) + { + PIXEL10_10 + } + else + { + PIXEL10_70 + } + PIXEL11_22 + break; + } + case 122: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + } + else + { + PIXEL00_70 + } + if (Diff(w[2], w[6])) + { + PIXEL01_10 + } + else + { + PIXEL01_70 + } + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + if (Diff(w[6], w[8])) + { + PIXEL11_10 + } + else + { + PIXEL11_70 + } + break; + } + case 94: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + } + else + { + PIXEL00_70 + } + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + if (Diff(w[8], w[4])) + { + PIXEL10_10 + } + else + { + PIXEL10_70 + } + if (Diff(w[6], w[8])) + { + PIXEL11_10 + } + else + { + PIXEL11_70 + } + break; + } + case 218: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + } + else + { + PIXEL00_70 + } + if (Diff(w[2], w[6])) + { + PIXEL01_10 + } + else + { + PIXEL01_70 + } + if (Diff(w[8], w[4])) + { + PIXEL10_10 + } + else + { + PIXEL10_70 + } + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 91: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + if (Diff(w[2], w[6])) + { + PIXEL01_10 + } + else + { + PIXEL01_70 + } + if (Diff(w[8], w[4])) + { + PIXEL10_10 + } + else + { + PIXEL10_70 + } + if (Diff(w[6], w[8])) + { + PIXEL11_10 + } + else + { + PIXEL11_70 + } + break; + } + case 229: + { + PIXEL00_20 + PIXEL01_20 + PIXEL10_12 + PIXEL11_11 + break; + } + case 167: + { + PIXEL00_11 + PIXEL01_12 + PIXEL10_20 + PIXEL11_20 + break; + } + case 173: + { + PIXEL00_12 + PIXEL01_20 + PIXEL10_11 + PIXEL11_20 + break; + } + case 181: + { + PIXEL00_20 + PIXEL01_11 + PIXEL10_20 + PIXEL11_12 + break; + } + case 186: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + } + else + { + PIXEL00_70 + } + if (Diff(w[2], w[6])) + { + PIXEL01_10 + } + else + { + PIXEL01_70 + } + PIXEL10_11 + PIXEL11_12 + break; + } + case 115: + { + PIXEL00_11 + if (Diff(w[2], w[6])) + { + PIXEL01_10 + } + else + { + PIXEL01_70 + } + PIXEL10_12 + if (Diff(w[6], w[8])) + { + PIXEL11_10 + } + else + { + PIXEL11_70 + } + break; + } + case 93: + { + PIXEL00_12 + PIXEL01_11 + if (Diff(w[8], w[4])) + { + PIXEL10_10 + } + else + { + PIXEL10_70 + } + if (Diff(w[6], w[8])) + { + PIXEL11_10 + } + else + { + PIXEL11_70 + } + break; + } + case 206: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + } + else + { + PIXEL00_70 + } + PIXEL01_12 + if (Diff(w[8], w[4])) + { + PIXEL10_10 + } + else + { + PIXEL10_70 + } + PIXEL11_11 + break; + } + case 205: + case 201: + { + PIXEL00_12 + PIXEL01_20 + if (Diff(w[8], w[4])) + { + PIXEL10_10 + } + else + { + PIXEL10_70 + } + PIXEL11_11 + break; + } + case 174: + case 46: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + } + else + { + PIXEL00_70 + } + PIXEL01_12 + PIXEL10_11 + PIXEL11_20 + break; + } + case 179: + case 147: + { + PIXEL00_11 + if (Diff(w[2], w[6])) + { + PIXEL01_10 + } + else + { + PIXEL01_70 + } + PIXEL10_20 + PIXEL11_12 + break; + } + case 117: + case 116: + { + PIXEL00_20 + PIXEL01_11 + PIXEL10_12 + if (Diff(w[6], w[8])) + { + PIXEL11_10 + } + else + { + PIXEL11_70 + } + break; + } + case 189: + { + PIXEL00_12 + PIXEL01_11 + PIXEL10_11 + PIXEL11_12 + break; + } + case 231: + { + PIXEL00_11 + PIXEL01_12 + PIXEL10_12 + PIXEL11_11 + break; + } + case 126: + { + PIXEL00_10 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + PIXEL11_10 + break; + } + case 219: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + PIXEL01_10 + PIXEL10_10 + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 125: + { + if (Diff(w[8], w[4])) + { + PIXEL00_12 + PIXEL10_0 + } + else + { + PIXEL00_61 + PIXEL10_90 + } + PIXEL01_11 + PIXEL11_10 + break; + } + case 221: + { + PIXEL00_12 + if (Diff(w[6], w[8])) + { + PIXEL01_11 + PIXEL11_0 + } + else + { + PIXEL01_60 + PIXEL11_90 + } + PIXEL10_10 + break; + } + case 207: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + PIXEL01_12 + } + else + { + PIXEL00_90 + PIXEL01_61 + } + PIXEL10_10 + PIXEL11_11 + break; + } + case 238: + { + PIXEL00_10 + PIXEL01_12 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + PIXEL11_11 + } + else + { + PIXEL10_90 + PIXEL11_60 + } + break; + } + case 190: + { + PIXEL00_10 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + PIXEL11_12 + } + else + { + PIXEL01_90 + PIXEL11_61 + } + PIXEL10_11 + break; + } + case 187: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + PIXEL10_11 + } + else + { + PIXEL00_90 + PIXEL10_60 + } + PIXEL01_10 + PIXEL11_12 + break; + } + case 243: + { + PIXEL00_11 + PIXEL01_10 + if (Diff(w[6], w[8])) + { + PIXEL10_12 + PIXEL11_0 + } + else + { + PIXEL10_61 + PIXEL11_90 + } + break; + } + case 119: + { + if (Diff(w[2], w[6])) + { + PIXEL00_11 + PIXEL01_0 + } + else + { + PIXEL00_60 + PIXEL01_90 + } + PIXEL10_12 + PIXEL11_10 + break; + } + case 237: + case 233: + { + PIXEL00_12 + PIXEL01_20 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_100 + } + PIXEL11_11 + break; + } + case 175: + case 47: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_100 + } + PIXEL01_12 + PIXEL10_11 + PIXEL11_20 + break; + } + case 183: + case 151: + { + PIXEL00_11 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_100 + } + PIXEL10_20 + PIXEL11_12 + break; + } + case 245: + case 244: + { + PIXEL00_20 + PIXEL01_11 + PIXEL10_12 + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_100 + } + break; + } + case 250: + { + PIXEL00_10 + PIXEL01_10 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 123: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + PIXEL01_10 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + PIXEL11_10 + break; + } + case 95: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + PIXEL10_10 + PIXEL11_10 + break; + } + case 222: + { + PIXEL00_10 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + PIXEL10_10 + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 252: + { + PIXEL00_21 + PIXEL01_11 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_100 + } + break; + } + case 249: + { + PIXEL00_12 + PIXEL01_22 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_100 + } + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 235: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + PIXEL01_21 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_100 + } + PIXEL11_11 + break; + } + case 111: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_100 + } + PIXEL01_12 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + PIXEL11_22 + break; + } + case 63: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_100 + } + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + PIXEL10_11 + PIXEL11_21 + break; + } + case 159: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_100 + } + PIXEL10_22 + PIXEL11_12 + break; + } + case 215: + { + PIXEL00_11 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_100 + } + PIXEL10_21 + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 246: + { + PIXEL00_22 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + PIXEL10_12 + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_100 + } + break; + } + case 254: + { + PIXEL00_10 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_100 + } + break; + } + case 253: + { + PIXEL00_12 + PIXEL01_11 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_100 + } + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_100 + } + break; + } + case 251: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + PIXEL01_10 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_100 + } + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 239: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_100 + } + PIXEL01_12 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_100 + } + PIXEL11_11 + break; + } + case 127: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_100 + } + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + PIXEL11_10 + break; + } + case 191: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_100 + } + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_100 + } + PIXEL10_11 + PIXEL11_12 + break; + } + case 223: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_100 + } + PIXEL10_10 + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 247: + { + PIXEL00_11 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_100 + } + PIXEL10_12 + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_100 + } + break; + } + case 255: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_100 + } + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_100 + } + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_100 + } + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_100 + } + break; + } + } + ++pIn; + pOut += 2; + } + pOut += dstPitch * 2 - Xres * 2; + } +} + +MaxSt_Hq2x::MaxSt_Hq2x() { + buffer = NULL; +} + +MaxSt_Hq2x::~MaxSt_Hq2x() { + outit(); +} + +void MaxSt_Hq2x::init() { + delete []buffer; + buffer = new Gambatte::uint_least32_t[144 * 160]; +} + +void MaxSt_Hq2x::outit() { + delete []buffer; + buffer = NULL; +} + +const Gambatte::FilterInfo& MaxSt_Hq2x::info() { + static const Gambatte::FilterInfo fInfo = { "MaxSt's Hq2x", 160 * 2, 144 * 2 }; + return fInfo; +} + +Gambatte::uint_least32_t* MaxSt_Hq2x::inBuffer() { + return buffer; +} + +unsigned MaxSt_Hq2x::inPitch() { + return 160; +} + +void MaxSt_Hq2x::filter(Gambatte::uint_least32_t *const dbuffer, const unsigned pitch) { + ::filter(dbuffer, pitch, buffer, 160, 144); +} diff --git a/supergameboy/libgambatte/src/video/filters/maxsthq2x.h b/supergameboy/libgambatte/src/video/filters/maxsthq2x.h new file mode 100644 index 00000000..ca2cf411 --- /dev/null +++ b/supergameboy/libgambatte/src/video/filters/maxsthq2x.h @@ -0,0 +1,41 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef MAXSTHQ2X_H +#define MAXSTHQ2X_H + +#include "filter.h" + +struct FilterInfo; + +class MaxSt_Hq2x : public Filter { + Gambatte::uint_least32_t *buffer; + +public: + MaxSt_Hq2x(); + ~MaxSt_Hq2x(); + void init(); + void outit(); + const Gambatte::FilterInfo& info(); + void filter(Gambatte::uint_least32_t *dbuffer, unsigned pitch); + Gambatte::uint_least32_t* inBuffer(); + unsigned inPitch(); +}; + + +#endif diff --git a/supergameboy/libgambatte/src/video/filters/maxsthq3x.cpp b/supergameboy/libgambatte/src/video/filters/maxsthq3x.cpp new file mode 100644 index 00000000..996a221e --- /dev/null +++ b/supergameboy/libgambatte/src/video/filters/maxsthq3x.cpp @@ -0,0 +1,3845 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre AamÃ¥s * + * aamas@stud.ntnu.no * + * * + * Copyright (C) 2003 MaxSt * + * maxst@hiend3d.com * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "maxsthq3x.h" +#include "filterinfo.h" +#include + +static /*inline*/ unsigned long Interp1(const unsigned long c1, const unsigned long c2) { + const unsigned long lowbits = ((c1 & 0x030303) * 3 + (c2 & 0x030303)) & 0x030303; + + return (c1 * 3 + c2 - lowbits) >> 2; +} + +static /*inline*/ unsigned long Interp2(const unsigned long c1, const unsigned long c2, const unsigned long c3) { + const unsigned long lowbits = ((c1 * 2 & 0x020202) + (c2 & 0x030303) + (c3 & 0x030303)) & 0x030303; + + return (c1 * 2 + c2 + c3 - lowbits) >> 2; +} + +static /*inline*/ unsigned long Interp3(const unsigned long c1, const unsigned long c2) { + const unsigned long lowbits = ((c1 & 0x070707) * 7 + (c2 & 0x070707)) & 0x070707; + + return (c1 * 7 + c2 - lowbits) >> 3; +} + +static /*inline*/ unsigned long Interp4(const unsigned long c1, const unsigned long c2, const unsigned long c3) { + const unsigned long lowbits = ((c1 * 2 & 0x0E0E0E) + ((c2 & 0x0F0F0F) + (c3 & 0x0F0F0F)) * 7) & 0x0F0F0F; + + return (c1 * 2 + (c2 + c3) * 7 - lowbits) >> 4; +} + +static /*inline*/ unsigned long Interp5(const unsigned long c1, const unsigned long c2) { + return (c1 + c2 - ((c1 ^ c2) & 0x010101)) >> 1; +} + +#define PIXEL00_1M *pOut = Interp1(w[5], w[1]); +#define PIXEL00_1U *pOut = Interp1(w[5], w[2]); +#define PIXEL00_1L *pOut = Interp1(w[5], w[4]); +#define PIXEL00_2 *pOut = Interp2(w[5], w[4], w[2]); +#define PIXEL00_4 *pOut = Interp4(w[5], w[4], w[2]); +#define PIXEL00_5 *pOut = Interp5(w[4], w[2]); +#define PIXEL00_C *pOut = w[5]; + +#define PIXEL01_1 *(pOut+1) = Interp1(w[5], w[2]); +#define PIXEL01_3 *(pOut+1) = Interp3(w[5], w[2]); +#define PIXEL01_6 *(pOut+1) = Interp1(w[2], w[5]); +#define PIXEL01_C *(pOut+1) = w[5]; + +#define PIXEL02_1M *(pOut+2) = Interp1(w[5], w[3]); +#define PIXEL02_1U *(pOut+2) = Interp1(w[5], w[2]); +#define PIXEL02_1R *(pOut+2) = Interp1(w[5], w[6]); +#define PIXEL02_2 *(pOut+2) = Interp2(w[5], w[2], w[6]); +#define PIXEL02_4 *(pOut+2) = Interp4(w[5], w[2], w[6]); +#define PIXEL02_5 *(pOut+2) = Interp5(w[2], w[6]); +#define PIXEL02_C *(pOut+2) = w[5]; + +#define PIXEL10_1 *(pOut+dstPitch) = Interp1(w[5], w[4]); +#define PIXEL10_3 *(pOut+dstPitch) = Interp3(w[5], w[4]); +#define PIXEL10_6 *(pOut+dstPitch) = Interp1(w[4], w[5]); +#define PIXEL10_C *(pOut+dstPitch) = w[5]; + +#define PIXEL11 *(pOut+dstPitch+1) = w[5]; + +#define PIXEL12_1 *(pOut+dstPitch+2) = Interp1(w[5], w[6]); +#define PIXEL12_3 *(pOut+dstPitch+2) = Interp3(w[5], w[6]); +#define PIXEL12_6 *(pOut+dstPitch+2) = Interp1(w[6], w[5]); +#define PIXEL12_C *(pOut+dstPitch+2) = w[5]; + +#define PIXEL20_1M *(pOut+dstPitch*2) = Interp1(w[5], w[7]); +#define PIXEL20_1D *(pOut+dstPitch*2) = Interp1(w[5], w[8]); +#define PIXEL20_1L *(pOut+dstPitch*2) = Interp1(w[5], w[4]); +#define PIXEL20_2 *(pOut+dstPitch*2) = Interp2(w[5], w[8], w[4]); +#define PIXEL20_4 *(pOut+dstPitch*2) = Interp4(w[5], w[8], w[4]); +#define PIXEL20_5 *(pOut+dstPitch*2) = Interp5(w[8], w[4]); +#define PIXEL20_C *(pOut+dstPitch*2) = w[5]; + +#define PIXEL21_1 *(pOut+dstPitch*2+1) = Interp1(w[5], w[8]); +#define PIXEL21_3 *(pOut+dstPitch*2+1) = Interp3(w[5], w[8]); +#define PIXEL21_6 *(pOut+dstPitch*2+1) = Interp1(w[8], w[5]); +#define PIXEL21_C *(pOut+dstPitch*2+1) = w[5]; + +#define PIXEL22_1M *(pOut+dstPitch*2+2) = Interp1(w[5], w[9]); +#define PIXEL22_1D *(pOut+dstPitch*2+2) = Interp1(w[5], w[8]); +#define PIXEL22_1R *(pOut+dstPitch*2+2) = Interp1(w[5], w[6]); +#define PIXEL22_2 *(pOut+dstPitch*2+2) = Interp2(w[5], w[6], w[8]); +#define PIXEL22_4 *(pOut+dstPitch*2+2) = Interp4(w[5], w[6], w[8]); +#define PIXEL22_5 *(pOut+dstPitch*2+2) = Interp5(w[6], w[8]); +#define PIXEL22_C *(pOut+dstPitch*2+2) = w[5]; + +static /*inline*/ bool Diff(const unsigned long w1, const unsigned long w2) { + const unsigned rdiff = (w1 >> 16) - (w2 >> 16); + const unsigned gdiff = (w1 >> 8 & 0xFF) - (w2 >> 8 & 0xFF); + const unsigned bdiff = (w1 & 0xFF) - (w2 & 0xFF); + + return rdiff + gdiff + bdiff + 0xC0U > 0xC0U * 2 || + rdiff - bdiff + 0x1CU > 0x1CU * 2 || + gdiff * 2 - rdiff - bdiff + 0x30U > 0x30U * 2; +} + +static void filter(Gambatte::uint_least32_t *pOut, const unsigned dstPitch, + const Gambatte::uint_least32_t *pIn, const unsigned Xres, const unsigned Yres) +{ + unsigned long w[10]; + + // +----+----+----+ + // | | | | + // | w1 | w2 | w3 | + // +----+----+----+ + // | | | | + // | w4 | w5 | w6 | + // +----+----+----+ + // | | | | + // | w7 | w8 | w9 | + // +----+----+----+ + + for (unsigned j = 0; j < Yres; j++) { + const unsigned prevline = j > 0 ? Xres : 0; + const unsigned nextline = j < Yres - 1 ? Xres : 0; + + for (unsigned i = 0; i < Xres; i++) { + w[2] = *(pIn - prevline); + w[5] = *(pIn); + w[8] = *(pIn + nextline); + + if (i > 0) { + w[1] = *(pIn - prevline - 1); + w[4] = *(pIn - 1); + w[7] = *(pIn + nextline - 1); + } else { + w[1] = w[2]; + w[4] = w[5]; + w[7] = w[8]; + } + + if (i < Xres - 1) { + w[3] = *(pIn - prevline + 1); + w[6] = *(pIn + 1); + w[9] = *(pIn + nextline + 1); + } else { + w[3] = w[2]; + w[6] = w[5]; + w[9] = w[8]; + } + + unsigned pattern = 0; + + { + unsigned flag = 1; + + const unsigned r1 = w[5] >> 16; + const unsigned g1 = w[5] >> 8 & 0xFF; + const unsigned b1 = w[5] & 0xFF; + + for (unsigned k = 1; k < 10; ++k) { + if (k == 5) continue; + + if (w[k] != w[5]) { + const unsigned rdiff = r1 - (w[k] >> 16); + const unsigned gdiff = g1 - (w[k] >> 8 & 0xFF); + const unsigned bdiff = b1 - (w[k] & 0xFF); + + if (rdiff + gdiff + bdiff + 0xC0U > 0xC0U * 2 || + rdiff - bdiff + 0x1CU > 0x1CU * 2 || + gdiff * 2 - rdiff - bdiff + 0x30U > 0x30U * 2) + pattern |= flag; + } + + flag <<= 1; + } + } + + switch (pattern) + { + case 0: + case 1: + case 4: + case 32: + case 128: + case 5: + case 132: + case 160: + case 33: + case 129: + case 36: + case 133: + case 164: + case 161: + case 37: + case 165: + { + PIXEL00_2 + PIXEL01_1 + PIXEL02_2 + PIXEL10_1 + PIXEL11 + PIXEL12_1 + PIXEL20_2 + PIXEL21_1 + PIXEL22_2 + break; + } + case 2: + case 34: + case 130: + case 162: + { + PIXEL00_1M + PIXEL01_C + PIXEL02_1M + PIXEL10_1 + PIXEL11 + PIXEL12_1 + PIXEL20_2 + PIXEL21_1 + PIXEL22_2 + break; + } + case 16: + case 17: + case 48: + case 49: + { + PIXEL00_2 + PIXEL01_1 + PIXEL02_1M + PIXEL10_1 + PIXEL11 + PIXEL12_C + PIXEL20_2 + PIXEL21_1 + PIXEL22_1M + break; + } + case 64: + case 65: + case 68: + case 69: + { + PIXEL00_2 + PIXEL01_1 + PIXEL02_2 + PIXEL10_1 + PIXEL11 + PIXEL12_1 + PIXEL20_1M + PIXEL21_C + PIXEL22_1M + break; + } + case 8: + case 12: + case 136: + case 140: + { + PIXEL00_1M + PIXEL01_1 + PIXEL02_2 + PIXEL10_C + PIXEL11 + PIXEL12_1 + PIXEL20_1M + PIXEL21_1 + PIXEL22_2 + break; + } + case 3: + case 35: + case 131: + case 163: + { + PIXEL00_1L + PIXEL01_C + PIXEL02_1M + PIXEL10_1 + PIXEL11 + PIXEL12_1 + PIXEL20_2 + PIXEL21_1 + PIXEL22_2 + break; + } + case 6: + case 38: + case 134: + case 166: + { + PIXEL00_1M + PIXEL01_C + PIXEL02_1R + PIXEL10_1 + PIXEL11 + PIXEL12_1 + PIXEL20_2 + PIXEL21_1 + PIXEL22_2 + break; + } + case 20: + case 21: + case 52: + case 53: + { + PIXEL00_2 + PIXEL01_1 + PIXEL02_1U + PIXEL10_1 + PIXEL11 + PIXEL12_C + PIXEL20_2 + PIXEL21_1 + PIXEL22_1M + break; + } + case 144: + case 145: + case 176: + case 177: + { + PIXEL00_2 + PIXEL01_1 + PIXEL02_1M + PIXEL10_1 + PIXEL11 + PIXEL12_C + PIXEL20_2 + PIXEL21_1 + PIXEL22_1D + break; + } + case 192: + case 193: + case 196: + case 197: + { + PIXEL00_2 + PIXEL01_1 + PIXEL02_2 + PIXEL10_1 + PIXEL11 + PIXEL12_1 + PIXEL20_1M + PIXEL21_C + PIXEL22_1R + break; + } + case 96: + case 97: + case 100: + case 101: + { + PIXEL00_2 + PIXEL01_1 + PIXEL02_2 + PIXEL10_1 + PIXEL11 + PIXEL12_1 + PIXEL20_1L + PIXEL21_C + PIXEL22_1M + break; + } + case 40: + case 44: + case 168: + case 172: + { + PIXEL00_1M + PIXEL01_1 + PIXEL02_2 + PIXEL10_C + PIXEL11 + PIXEL12_1 + PIXEL20_1D + PIXEL21_1 + PIXEL22_2 + break; + } + case 9: + case 13: + case 137: + case 141: + { + PIXEL00_1U + PIXEL01_1 + PIXEL02_2 + PIXEL10_C + PIXEL11 + PIXEL12_1 + PIXEL20_1M + PIXEL21_1 + PIXEL22_2 + break; + } + case 18: + case 50: + { + PIXEL00_1M + if (Diff(w[2], w[6])) + { + PIXEL01_C + PIXEL02_1M + PIXEL12_C + } + else + { + PIXEL01_3 + PIXEL02_4 + PIXEL12_3 + } + PIXEL10_1 + PIXEL11 + PIXEL20_2 + PIXEL21_1 + PIXEL22_1M + break; + } + case 80: + case 81: + { + PIXEL00_2 + PIXEL01_1 + PIXEL02_1M + PIXEL10_1 + PIXEL11 + PIXEL20_1M + if (Diff(w[6], w[8])) + { + PIXEL12_C + PIXEL21_C + PIXEL22_1M + } + else + { + PIXEL12_3 + PIXEL21_3 + PIXEL22_4 + } + break; + } + case 72: + case 76: + { + PIXEL00_1M + PIXEL01_1 + PIXEL02_2 + PIXEL11 + PIXEL12_1 + if (Diff(w[8], w[4])) + { + PIXEL10_C + PIXEL20_1M + PIXEL21_C + } + else + { + PIXEL10_3 + PIXEL20_4 + PIXEL21_3 + } + PIXEL22_1M + break; + } + case 10: + case 138: + { + if (Diff(w[4], w[2])) + { + PIXEL00_1M + PIXEL01_C + PIXEL10_C + } + else + { + PIXEL00_4 + PIXEL01_3 + PIXEL10_3 + } + PIXEL02_1M + PIXEL11 + PIXEL12_1 + PIXEL20_1M + PIXEL21_1 + PIXEL22_2 + break; + } + case 66: + { + PIXEL00_1M + PIXEL01_C + PIXEL02_1M + PIXEL10_1 + PIXEL11 + PIXEL12_1 + PIXEL20_1M + PIXEL21_C + PIXEL22_1M + break; + } + case 24: + { + PIXEL00_1M + PIXEL01_1 + PIXEL02_1M + PIXEL10_C + PIXEL11 + PIXEL12_C + PIXEL20_1M + PIXEL21_1 + PIXEL22_1M + break; + } + case 7: + case 39: + case 135: + { + PIXEL00_1L + PIXEL01_C + PIXEL02_1R + PIXEL10_1 + PIXEL11 + PIXEL12_1 + PIXEL20_2 + PIXEL21_1 + PIXEL22_2 + break; + } + case 148: + case 149: + case 180: + { + PIXEL00_2 + PIXEL01_1 + PIXEL02_1U + PIXEL10_1 + PIXEL11 + PIXEL12_C + PIXEL20_2 + PIXEL21_1 + PIXEL22_1D + break; + } + case 224: + case 228: + case 225: + { + PIXEL00_2 + PIXEL01_1 + PIXEL02_2 + PIXEL10_1 + PIXEL11 + PIXEL12_1 + PIXEL20_1L + PIXEL21_C + PIXEL22_1R + break; + } + case 41: + case 169: + case 45: + { + PIXEL00_1U + PIXEL01_1 + PIXEL02_2 + PIXEL10_C + PIXEL11 + PIXEL12_1 + PIXEL20_1D + PIXEL21_1 + PIXEL22_2 + break; + } + case 22: + case 54: + { + PIXEL00_1M + if (Diff(w[2], w[6])) + { + PIXEL01_C + PIXEL02_C + PIXEL12_C + } + else + { + PIXEL01_3 + PIXEL02_4 + PIXEL12_3 + } + PIXEL10_1 + PIXEL11 + PIXEL20_2 + PIXEL21_1 + PIXEL22_1M + break; + } + case 208: + case 209: + { + PIXEL00_2 + PIXEL01_1 + PIXEL02_1M + PIXEL10_1 + PIXEL11 + PIXEL20_1M + if (Diff(w[6], w[8])) + { + PIXEL12_C + PIXEL21_C + PIXEL22_C + } + else + { + PIXEL12_3 + PIXEL21_3 + PIXEL22_4 + } + break; + } + case 104: + case 108: + { + PIXEL00_1M + PIXEL01_1 + PIXEL02_2 + PIXEL11 + PIXEL12_1 + if (Diff(w[8], w[4])) + { + PIXEL10_C + PIXEL20_C + PIXEL21_C + } + else + { + PIXEL10_3 + PIXEL20_4 + PIXEL21_3 + } + PIXEL22_1M + break; + } + case 11: + case 139: + { + if (Diff(w[4], w[2])) + { + PIXEL00_C + PIXEL01_C + PIXEL10_C + } + else + { + PIXEL00_4 + PIXEL01_3 + PIXEL10_3 + } + PIXEL02_1M + PIXEL11 + PIXEL12_1 + PIXEL20_1M + PIXEL21_1 + PIXEL22_2 + break; + } + case 19: + case 51: + { + if (Diff(w[2], w[6])) + { + PIXEL00_1L + PIXEL01_C + PIXEL02_1M + PIXEL12_C + } + else + { + PIXEL00_2 + PIXEL01_6 + PIXEL02_5 + PIXEL12_1 + } + PIXEL10_1 + PIXEL11 + PIXEL20_2 + PIXEL21_1 + PIXEL22_1M + break; + } + case 146: + case 178: + { + if (Diff(w[2], w[6])) + { + PIXEL01_C + PIXEL02_1M + PIXEL12_C + PIXEL22_1D + } + else + { + PIXEL01_1 + PIXEL02_5 + PIXEL12_6 + PIXEL22_2 + } + PIXEL00_1M + PIXEL10_1 + PIXEL11 + PIXEL20_2 + PIXEL21_1 + break; + } + case 84: + case 85: + { + if (Diff(w[6], w[8])) + { + PIXEL02_1U + PIXEL12_C + PIXEL21_C + PIXEL22_1M + } + else + { + PIXEL02_2 + PIXEL12_6 + PIXEL21_1 + PIXEL22_5 + } + PIXEL00_2 + PIXEL01_1 + PIXEL10_1 + PIXEL11 + PIXEL20_1M + break; + } + case 112: + case 113: + { + if (Diff(w[6], w[8])) + { + PIXEL12_C + PIXEL20_1L + PIXEL21_C + PIXEL22_1M + } + else + { + PIXEL12_1 + PIXEL20_2 + PIXEL21_6 + PIXEL22_5 + } + PIXEL00_2 + PIXEL01_1 + PIXEL02_1M + PIXEL10_1 + PIXEL11 + break; + } + case 200: + case 204: + { + if (Diff(w[8], w[4])) + { + PIXEL10_C + PIXEL20_1M + PIXEL21_C + PIXEL22_1R + } + else + { + PIXEL10_1 + PIXEL20_5 + PIXEL21_6 + PIXEL22_2 + } + PIXEL00_1M + PIXEL01_1 + PIXEL02_2 + PIXEL11 + PIXEL12_1 + break; + } + case 73: + case 77: + { + if (Diff(w[8], w[4])) + { + PIXEL00_1U + PIXEL10_C + PIXEL20_1M + PIXEL21_C + } + else + { + PIXEL00_2 + PIXEL10_6 + PIXEL20_5 + PIXEL21_1 + } + PIXEL01_1 + PIXEL02_2 + PIXEL11 + PIXEL12_1 + PIXEL22_1M + break; + } + case 42: + case 170: + { + if (Diff(w[4], w[2])) + { + PIXEL00_1M + PIXEL01_C + PIXEL10_C + PIXEL20_1D + } + else + { + PIXEL00_5 + PIXEL01_1 + PIXEL10_6 + PIXEL20_2 + } + PIXEL02_1M + PIXEL11 + PIXEL12_1 + PIXEL21_1 + PIXEL22_2 + break; + } + case 14: + case 142: + { + if (Diff(w[4], w[2])) + { + PIXEL00_1M + PIXEL01_C + PIXEL02_1R + PIXEL10_C + } + else + { + PIXEL00_5 + PIXEL01_6 + PIXEL02_2 + PIXEL10_1 + } + PIXEL11 + PIXEL12_1 + PIXEL20_1M + PIXEL21_1 + PIXEL22_2 + break; + } + case 67: + { + PIXEL00_1L + PIXEL01_C + PIXEL02_1M + PIXEL10_1 + PIXEL11 + PIXEL12_1 + PIXEL20_1M + PIXEL21_C + PIXEL22_1M + break; + } + case 70: + { + PIXEL00_1M + PIXEL01_C + PIXEL02_1R + PIXEL10_1 + PIXEL11 + PIXEL12_1 + PIXEL20_1M + PIXEL21_C + PIXEL22_1M + break; + } + case 28: + { + PIXEL00_1M + PIXEL01_1 + PIXEL02_1U + PIXEL10_C + PIXEL11 + PIXEL12_C + PIXEL20_1M + PIXEL21_1 + PIXEL22_1M + break; + } + case 152: + { + PIXEL00_1M + PIXEL01_1 + PIXEL02_1M + PIXEL10_C + PIXEL11 + PIXEL12_C + PIXEL20_1M + PIXEL21_1 + PIXEL22_1D + break; + } + case 194: + { + PIXEL00_1M + PIXEL01_C + PIXEL02_1M + PIXEL10_1 + PIXEL11 + PIXEL12_1 + PIXEL20_1M + PIXEL21_C + PIXEL22_1R + break; + } + case 98: + { + PIXEL00_1M + PIXEL01_C + PIXEL02_1M + PIXEL10_1 + PIXEL11 + PIXEL12_1 + PIXEL20_1L + PIXEL21_C + PIXEL22_1M + break; + } + case 56: + { + PIXEL00_1M + PIXEL01_1 + PIXEL02_1M + PIXEL10_C + PIXEL11 + PIXEL12_C + PIXEL20_1D + PIXEL21_1 + PIXEL22_1M + break; + } + case 25: + { + PIXEL00_1U + PIXEL01_1 + PIXEL02_1M + PIXEL10_C + PIXEL11 + PIXEL12_C + PIXEL20_1M + PIXEL21_1 + PIXEL22_1M + break; + } + case 26: + case 31: + { + if (Diff(w[4], w[2])) + { + PIXEL00_C + PIXEL10_C + } + else + { + PIXEL00_4 + PIXEL10_3 + } + PIXEL01_C + if (Diff(w[2], w[6])) + { + PIXEL02_C + PIXEL12_C + } + else + { + PIXEL02_4 + PIXEL12_3 + } + PIXEL11 + PIXEL20_1M + PIXEL21_1 + PIXEL22_1M + break; + } + case 82: + case 214: + { + PIXEL00_1M + if (Diff(w[2], w[6])) + { + PIXEL01_C + PIXEL02_C + } + else + { + PIXEL01_3 + PIXEL02_4 + } + PIXEL10_1 + PIXEL11 + PIXEL12_C + PIXEL20_1M + if (Diff(w[6], w[8])) + { + PIXEL21_C + PIXEL22_C + } + else + { + PIXEL21_3 + PIXEL22_4 + } + break; + } + case 88: + case 248: + { + PIXEL00_1M + PIXEL01_1 + PIXEL02_1M + PIXEL11 + if (Diff(w[8], w[4])) + { + PIXEL10_C + PIXEL20_C + } + else + { + PIXEL10_3 + PIXEL20_4 + } + PIXEL21_C + if (Diff(w[6], w[8])) + { + PIXEL12_C + PIXEL22_C + } + else + { + PIXEL12_3 + PIXEL22_4 + } + break; + } + case 74: + case 107: + { + if (Diff(w[4], w[2])) + { + PIXEL00_C + PIXEL01_C + } + else + { + PIXEL00_4 + PIXEL01_3 + } + PIXEL02_1M + PIXEL10_C + PIXEL11 + PIXEL12_1 + if (Diff(w[8], w[4])) + { + PIXEL20_C + PIXEL21_C + } + else + { + PIXEL20_4 + PIXEL21_3 + } + PIXEL22_1M + break; + } + case 27: + { + if (Diff(w[4], w[2])) + { + PIXEL00_C + PIXEL01_C + PIXEL10_C + } + else + { + PIXEL00_4 + PIXEL01_3 + PIXEL10_3 + } + PIXEL02_1M + PIXEL11 + PIXEL12_C + PIXEL20_1M + PIXEL21_1 + PIXEL22_1M + break; + } + case 86: + { + PIXEL00_1M + if (Diff(w[2], w[6])) + { + PIXEL01_C + PIXEL02_C + PIXEL12_C + } + else + { + PIXEL01_3 + PIXEL02_4 + PIXEL12_3 + } + PIXEL10_1 + PIXEL11 + PIXEL20_1M + PIXEL21_C + PIXEL22_1M + break; + } + case 216: + { + PIXEL00_1M + PIXEL01_1 + PIXEL02_1M + PIXEL10_C + PIXEL11 + PIXEL20_1M + if (Diff(w[6], w[8])) + { + PIXEL12_C + PIXEL21_C + PIXEL22_C + } + else + { + PIXEL12_3 + PIXEL21_3 + PIXEL22_4 + } + break; + } + case 106: + { + PIXEL00_1M + PIXEL01_C + PIXEL02_1M + PIXEL11 + PIXEL12_1 + if (Diff(w[8], w[4])) + { + PIXEL10_C + PIXEL20_C + PIXEL21_C + } + else + { + PIXEL10_3 + PIXEL20_4 + PIXEL21_3 + } + PIXEL22_1M + break; + } + case 30: + { + PIXEL00_1M + if (Diff(w[2], w[6])) + { + PIXEL01_C + PIXEL02_C + PIXEL12_C + } + else + { + PIXEL01_3 + PIXEL02_4 + PIXEL12_3 + } + PIXEL10_C + PIXEL11 + PIXEL20_1M + PIXEL21_1 + PIXEL22_1M + break; + } + case 210: + { + PIXEL00_1M + PIXEL01_C + PIXEL02_1M + PIXEL10_1 + PIXEL11 + PIXEL20_1M + if (Diff(w[6], w[8])) + { + PIXEL12_C + PIXEL21_C + PIXEL22_C + } + else + { + PIXEL12_3 + PIXEL21_3 + PIXEL22_4 + } + break; + } + case 120: + { + PIXEL00_1M + PIXEL01_1 + PIXEL02_1M + PIXEL11 + PIXEL12_C + if (Diff(w[8], w[4])) + { + PIXEL10_C + PIXEL20_C + PIXEL21_C + } + else + { + PIXEL10_3 + PIXEL20_4 + PIXEL21_3 + } + PIXEL22_1M + break; + } + case 75: + { + if (Diff(w[4], w[2])) + { + PIXEL00_C + PIXEL01_C + PIXEL10_C + } + else + { + PIXEL00_4 + PIXEL01_3 + PIXEL10_3 + } + PIXEL02_1M + PIXEL11 + PIXEL12_1 + PIXEL20_1M + PIXEL21_C + PIXEL22_1M + break; + } + case 29: + { + PIXEL00_1U + PIXEL01_1 + PIXEL02_1U + PIXEL10_C + PIXEL11 + PIXEL12_C + PIXEL20_1M + PIXEL21_1 + PIXEL22_1M + break; + } + case 198: + { + PIXEL00_1M + PIXEL01_C + PIXEL02_1R + PIXEL10_1 + PIXEL11 + PIXEL12_1 + PIXEL20_1M + PIXEL21_C + PIXEL22_1R + break; + } + case 184: + { + PIXEL00_1M + PIXEL01_1 + PIXEL02_1M + PIXEL10_C + PIXEL11 + PIXEL12_C + PIXEL20_1D + PIXEL21_1 + PIXEL22_1D + break; + } + case 99: + { + PIXEL00_1L + PIXEL01_C + PIXEL02_1M + PIXEL10_1 + PIXEL11 + PIXEL12_1 + PIXEL20_1L + PIXEL21_C + PIXEL22_1M + break; + } + case 57: + { + PIXEL00_1U + PIXEL01_1 + PIXEL02_1M + PIXEL10_C + PIXEL11 + PIXEL12_C + PIXEL20_1D + PIXEL21_1 + PIXEL22_1M + break; + } + case 71: + { + PIXEL00_1L + PIXEL01_C + PIXEL02_1R + PIXEL10_1 + PIXEL11 + PIXEL12_1 + PIXEL20_1M + PIXEL21_C + PIXEL22_1M + break; + } + case 156: + { + PIXEL00_1M + PIXEL01_1 + PIXEL02_1U + PIXEL10_C + PIXEL11 + PIXEL12_C + PIXEL20_1M + PIXEL21_1 + PIXEL22_1D + break; + } + case 226: + { + PIXEL00_1M + PIXEL01_C + PIXEL02_1M + PIXEL10_1 + PIXEL11 + PIXEL12_1 + PIXEL20_1L + PIXEL21_C + PIXEL22_1R + break; + } + case 60: + { + PIXEL00_1M + PIXEL01_1 + PIXEL02_1U + PIXEL10_C + PIXEL11 + PIXEL12_C + PIXEL20_1D + PIXEL21_1 + PIXEL22_1M + break; + } + case 195: + { + PIXEL00_1L + PIXEL01_C + PIXEL02_1M + PIXEL10_1 + PIXEL11 + PIXEL12_1 + PIXEL20_1M + PIXEL21_C + PIXEL22_1R + break; + } + case 102: + { + PIXEL00_1M + PIXEL01_C + PIXEL02_1R + PIXEL10_1 + PIXEL11 + PIXEL12_1 + PIXEL20_1L + PIXEL21_C + PIXEL22_1M + break; + } + case 153: + { + PIXEL00_1U + PIXEL01_1 + PIXEL02_1M + PIXEL10_C + PIXEL11 + PIXEL12_C + PIXEL20_1M + PIXEL21_1 + PIXEL22_1D + break; + } + case 58: + { + if (Diff(w[4], w[2])) + { + PIXEL00_1M + } + else + { + PIXEL00_2 + } + PIXEL01_C + if (Diff(w[2], w[6])) + { + PIXEL02_1M + } + else + { + PIXEL02_2 + } + PIXEL10_C + PIXEL11 + PIXEL12_C + PIXEL20_1D + PIXEL21_1 + PIXEL22_1M + break; + } + case 83: + { + PIXEL00_1L + PIXEL01_C + if (Diff(w[2], w[6])) + { + PIXEL02_1M + } + else + { + PIXEL02_2 + } + PIXEL10_1 + PIXEL11 + PIXEL12_C + PIXEL20_1M + PIXEL21_C + if (Diff(w[6], w[8])) + { + PIXEL22_1M + } + else + { + PIXEL22_2 + } + break; + } + case 92: + { + PIXEL00_1M + PIXEL01_1 + PIXEL02_1U + PIXEL10_C + PIXEL11 + PIXEL12_C + if (Diff(w[8], w[4])) + { + PIXEL20_1M + } + else + { + PIXEL20_2 + } + PIXEL21_C + if (Diff(w[6], w[8])) + { + PIXEL22_1M + } + else + { + PIXEL22_2 + } + break; + } + case 202: + { + if (Diff(w[4], w[2])) + { + PIXEL00_1M + } + else + { + PIXEL00_2 + } + PIXEL01_C + PIXEL02_1M + PIXEL10_C + PIXEL11 + PIXEL12_1 + if (Diff(w[8], w[4])) + { + PIXEL20_1M + } + else + { + PIXEL20_2 + } + PIXEL21_C + PIXEL22_1R + break; + } + case 78: + { + if (Diff(w[4], w[2])) + { + PIXEL00_1M + } + else + { + PIXEL00_2 + } + PIXEL01_C + PIXEL02_1R + PIXEL10_C + PIXEL11 + PIXEL12_1 + if (Diff(w[8], w[4])) + { + PIXEL20_1M + } + else + { + PIXEL20_2 + } + PIXEL21_C + PIXEL22_1M + break; + } + case 154: + { + if (Diff(w[4], w[2])) + { + PIXEL00_1M + } + else + { + PIXEL00_2 + } + PIXEL01_C + if (Diff(w[2], w[6])) + { + PIXEL02_1M + } + else + { + PIXEL02_2 + } + PIXEL10_C + PIXEL11 + PIXEL12_C + PIXEL20_1M + PIXEL21_1 + PIXEL22_1D + break; + } + case 114: + { + PIXEL00_1M + PIXEL01_C + if (Diff(w[2], w[6])) + { + PIXEL02_1M + } + else + { + PIXEL02_2 + } + PIXEL10_1 + PIXEL11 + PIXEL12_C + PIXEL20_1L + PIXEL21_C + if (Diff(w[6], w[8])) + { + PIXEL22_1M + } + else + { + PIXEL22_2 + } + break; + } + case 89: + { + PIXEL00_1U + PIXEL01_1 + PIXEL02_1M + PIXEL10_C + PIXEL11 + PIXEL12_C + if (Diff(w[8], w[4])) + { + PIXEL20_1M + } + else + { + PIXEL20_2 + } + PIXEL21_C + if (Diff(w[6], w[8])) + { + PIXEL22_1M + } + else + { + PIXEL22_2 + } + break; + } + case 90: + { + if (Diff(w[4], w[2])) + { + PIXEL00_1M + } + else + { + PIXEL00_2 + } + PIXEL01_C + if (Diff(w[2], w[6])) + { + PIXEL02_1M + } + else + { + PIXEL02_2 + } + PIXEL10_C + PIXEL11 + PIXEL12_C + if (Diff(w[8], w[4])) + { + PIXEL20_1M + } + else + { + PIXEL20_2 + } + PIXEL21_C + if (Diff(w[6], w[8])) + { + PIXEL22_1M + } + else + { + PIXEL22_2 + } + break; + } + case 55: + case 23: + { + if (Diff(w[2], w[6])) + { + PIXEL00_1L + PIXEL01_C + PIXEL02_C + PIXEL12_C + } + else + { + PIXEL00_2 + PIXEL01_6 + PIXEL02_5 + PIXEL12_1 + } + PIXEL10_1 + PIXEL11 + PIXEL20_2 + PIXEL21_1 + PIXEL22_1M + break; + } + case 182: + case 150: + { + if (Diff(w[2], w[6])) + { + PIXEL01_C + PIXEL02_C + PIXEL12_C + PIXEL22_1D + } + else + { + PIXEL01_1 + PIXEL02_5 + PIXEL12_6 + PIXEL22_2 + } + PIXEL00_1M + PIXEL10_1 + PIXEL11 + PIXEL20_2 + PIXEL21_1 + break; + } + case 213: + case 212: + { + if (Diff(w[6], w[8])) + { + PIXEL02_1U + PIXEL12_C + PIXEL21_C + PIXEL22_C + } + else + { + PIXEL02_2 + PIXEL12_6 + PIXEL21_1 + PIXEL22_5 + } + PIXEL00_2 + PIXEL01_1 + PIXEL10_1 + PIXEL11 + PIXEL20_1M + break; + } + case 241: + case 240: + { + if (Diff(w[6], w[8])) + { + PIXEL12_C + PIXEL20_1L + PIXEL21_C + PIXEL22_C + } + else + { + PIXEL12_1 + PIXEL20_2 + PIXEL21_6 + PIXEL22_5 + } + PIXEL00_2 + PIXEL01_1 + PIXEL02_1M + PIXEL10_1 + PIXEL11 + break; + } + case 236: + case 232: + { + if (Diff(w[8], w[4])) + { + PIXEL10_C + PIXEL20_C + PIXEL21_C + PIXEL22_1R + } + else + { + PIXEL10_1 + PIXEL20_5 + PIXEL21_6 + PIXEL22_2 + } + PIXEL00_1M + PIXEL01_1 + PIXEL02_2 + PIXEL11 + PIXEL12_1 + break; + } + case 109: + case 105: + { + if (Diff(w[8], w[4])) + { + PIXEL00_1U + PIXEL10_C + PIXEL20_C + PIXEL21_C + } + else + { + PIXEL00_2 + PIXEL10_6 + PIXEL20_5 + PIXEL21_1 + } + PIXEL01_1 + PIXEL02_2 + PIXEL11 + PIXEL12_1 + PIXEL22_1M + break; + } + case 171: + case 43: + { + if (Diff(w[4], w[2])) + { + PIXEL00_C + PIXEL01_C + PIXEL10_C + PIXEL20_1D + } + else + { + PIXEL00_5 + PIXEL01_1 + PIXEL10_6 + PIXEL20_2 + } + PIXEL02_1M + PIXEL11 + PIXEL12_1 + PIXEL21_1 + PIXEL22_2 + break; + } + case 143: + case 15: + { + if (Diff(w[4], w[2])) + { + PIXEL00_C + PIXEL01_C + PIXEL02_1R + PIXEL10_C + } + else + { + PIXEL00_5 + PIXEL01_6 + PIXEL02_2 + PIXEL10_1 + } + PIXEL11 + PIXEL12_1 + PIXEL20_1M + PIXEL21_1 + PIXEL22_2 + break; + } + case 124: + { + PIXEL00_1M + PIXEL01_1 + PIXEL02_1U + PIXEL11 + PIXEL12_C + if (Diff(w[8], w[4])) + { + PIXEL10_C + PIXEL20_C + PIXEL21_C + } + else + { + PIXEL10_3 + PIXEL20_4 + PIXEL21_3 + } + PIXEL22_1M + break; + } + case 203: + { + if (Diff(w[4], w[2])) + { + PIXEL00_C + PIXEL01_C + PIXEL10_C + } + else + { + PIXEL00_4 + PIXEL01_3 + PIXEL10_3 + } + PIXEL02_1M + PIXEL11 + PIXEL12_1 + PIXEL20_1M + PIXEL21_C + PIXEL22_1R + break; + } + case 62: + { + PIXEL00_1M + if (Diff(w[2], w[6])) + { + PIXEL01_C + PIXEL02_C + PIXEL12_C + } + else + { + PIXEL01_3 + PIXEL02_4 + PIXEL12_3 + } + PIXEL10_C + PIXEL11 + PIXEL20_1D + PIXEL21_1 + PIXEL22_1M + break; + } + case 211: + { + PIXEL00_1L + PIXEL01_C + PIXEL02_1M + PIXEL10_1 + PIXEL11 + PIXEL20_1M + if (Diff(w[6], w[8])) + { + PIXEL12_C + PIXEL21_C + PIXEL22_C + } + else + { + PIXEL12_3 + PIXEL21_3 + PIXEL22_4 + } + break; + } + case 118: + { + PIXEL00_1M + if (Diff(w[2], w[6])) + { + PIXEL01_C + PIXEL02_C + PIXEL12_C + } + else + { + PIXEL01_3 + PIXEL02_4 + PIXEL12_3 + } + PIXEL10_1 + PIXEL11 + PIXEL20_1L + PIXEL21_C + PIXEL22_1M + break; + } + case 217: + { + PIXEL00_1U + PIXEL01_1 + PIXEL02_1M + PIXEL10_C + PIXEL11 + PIXEL20_1M + if (Diff(w[6], w[8])) + { + PIXEL12_C + PIXEL21_C + PIXEL22_C + } + else + { + PIXEL12_3 + PIXEL21_3 + PIXEL22_4 + } + break; + } + case 110: + { + PIXEL00_1M + PIXEL01_C + PIXEL02_1R + PIXEL11 + PIXEL12_1 + if (Diff(w[8], w[4])) + { + PIXEL10_C + PIXEL20_C + PIXEL21_C + } + else + { + PIXEL10_3 + PIXEL20_4 + PIXEL21_3 + } + PIXEL22_1M + break; + } + case 155: + { + if (Diff(w[4], w[2])) + { + PIXEL00_C + PIXEL01_C + PIXEL10_C + } + else + { + PIXEL00_4 + PIXEL01_3 + PIXEL10_3 + } + PIXEL02_1M + PIXEL11 + PIXEL12_C + PIXEL20_1M + PIXEL21_1 + PIXEL22_1D + break; + } + case 188: + { + PIXEL00_1M + PIXEL01_1 + PIXEL02_1U + PIXEL10_C + PIXEL11 + PIXEL12_C + PIXEL20_1D + PIXEL21_1 + PIXEL22_1D + break; + } + case 185: + { + PIXEL00_1U + PIXEL01_1 + PIXEL02_1M + PIXEL10_C + PIXEL11 + PIXEL12_C + PIXEL20_1D + PIXEL21_1 + PIXEL22_1D + break; + } + case 61: + { + PIXEL00_1U + PIXEL01_1 + PIXEL02_1U + PIXEL10_C + PIXEL11 + PIXEL12_C + PIXEL20_1D + PIXEL21_1 + PIXEL22_1M + break; + } + case 157: + { + PIXEL00_1U + PIXEL01_1 + PIXEL02_1U + PIXEL10_C + PIXEL11 + PIXEL12_C + PIXEL20_1M + PIXEL21_1 + PIXEL22_1D + break; + } + case 103: + { + PIXEL00_1L + PIXEL01_C + PIXEL02_1R + PIXEL10_1 + PIXEL11 + PIXEL12_1 + PIXEL20_1L + PIXEL21_C + PIXEL22_1M + break; + } + case 227: + { + PIXEL00_1L + PIXEL01_C + PIXEL02_1M + PIXEL10_1 + PIXEL11 + PIXEL12_1 + PIXEL20_1L + PIXEL21_C + PIXEL22_1R + break; + } + case 230: + { + PIXEL00_1M + PIXEL01_C + PIXEL02_1R + PIXEL10_1 + PIXEL11 + PIXEL12_1 + PIXEL20_1L + PIXEL21_C + PIXEL22_1R + break; + } + case 199: + { + PIXEL00_1L + PIXEL01_C + PIXEL02_1R + PIXEL10_1 + PIXEL11 + PIXEL12_1 + PIXEL20_1M + PIXEL21_C + PIXEL22_1R + break; + } + case 220: + { + PIXEL00_1M + PIXEL01_1 + PIXEL02_1U + PIXEL10_C + PIXEL11 + if (Diff(w[8], w[4])) + { + PIXEL20_1M + } + else + { + PIXEL20_2 + } + if (Diff(w[6], w[8])) + { + PIXEL12_C + PIXEL21_C + PIXEL22_C + } + else + { + PIXEL12_3 + PIXEL21_3 + PIXEL22_4 + } + break; + } + case 158: + { + if (Diff(w[4], w[2])) + { + PIXEL00_1M + } + else + { + PIXEL00_2 + } + if (Diff(w[2], w[6])) + { + PIXEL01_C + PIXEL02_C + PIXEL12_C + } + else + { + PIXEL01_3 + PIXEL02_4 + PIXEL12_3 + } + PIXEL10_C + PIXEL11 + PIXEL20_1M + PIXEL21_1 + PIXEL22_1D + break; + } + case 234: + { + if (Diff(w[4], w[2])) + { + PIXEL00_1M + } + else + { + PIXEL00_2 + } + PIXEL01_C + PIXEL02_1M + PIXEL11 + PIXEL12_1 + if (Diff(w[8], w[4])) + { + PIXEL10_C + PIXEL20_C + PIXEL21_C + } + else + { + PIXEL10_3 + PIXEL20_4 + PIXEL21_3 + } + PIXEL22_1R + break; + } + case 242: + { + PIXEL00_1M + PIXEL01_C + if (Diff(w[2], w[6])) + { + PIXEL02_1M + } + else + { + PIXEL02_2 + } + PIXEL10_1 + PIXEL11 + PIXEL20_1L + if (Diff(w[6], w[8])) + { + PIXEL12_C + PIXEL21_C + PIXEL22_C + } + else + { + PIXEL12_3 + PIXEL21_3 + PIXEL22_4 + } + break; + } + case 59: + { + if (Diff(w[4], w[2])) + { + PIXEL00_C + PIXEL01_C + PIXEL10_C + } + else + { + PIXEL00_4 + PIXEL01_3 + PIXEL10_3 + } + if (Diff(w[2], w[6])) + { + PIXEL02_1M + } + else + { + PIXEL02_2 + } + PIXEL11 + PIXEL12_C + PIXEL20_1D + PIXEL21_1 + PIXEL22_1M + break; + } + case 121: + { + PIXEL00_1U + PIXEL01_1 + PIXEL02_1M + PIXEL11 + PIXEL12_C + if (Diff(w[8], w[4])) + { + PIXEL10_C + PIXEL20_C + PIXEL21_C + } + else + { + PIXEL10_3 + PIXEL20_4 + PIXEL21_3 + } + if (Diff(w[6], w[8])) + { + PIXEL22_1M + } + else + { + PIXEL22_2 + } + break; + } + case 87: + { + PIXEL00_1L + if (Diff(w[2], w[6])) + { + PIXEL01_C + PIXEL02_C + PIXEL12_C + } + else + { + PIXEL01_3 + PIXEL02_4 + PIXEL12_3 + } + PIXEL10_1 + PIXEL11 + PIXEL20_1M + PIXEL21_C + if (Diff(w[6], w[8])) + { + PIXEL22_1M + } + else + { + PIXEL22_2 + } + break; + } + case 79: + { + if (Diff(w[4], w[2])) + { + PIXEL00_C + PIXEL01_C + PIXEL10_C + } + else + { + PIXEL00_4 + PIXEL01_3 + PIXEL10_3 + } + PIXEL02_1R + PIXEL11 + PIXEL12_1 + if (Diff(w[8], w[4])) + { + PIXEL20_1M + } + else + { + PIXEL20_2 + } + PIXEL21_C + PIXEL22_1M + break; + } + case 122: + { + if (Diff(w[4], w[2])) + { + PIXEL00_1M + } + else + { + PIXEL00_2 + } + PIXEL01_C + if (Diff(w[2], w[6])) + { + PIXEL02_1M + } + else + { + PIXEL02_2 + } + PIXEL11 + PIXEL12_C + if (Diff(w[8], w[4])) + { + PIXEL10_C + PIXEL20_C + PIXEL21_C + } + else + { + PIXEL10_3 + PIXEL20_4 + PIXEL21_3 + } + if (Diff(w[6], w[8])) + { + PIXEL22_1M + } + else + { + PIXEL22_2 + } + break; + } + case 94: + { + if (Diff(w[4], w[2])) + { + PIXEL00_1M + } + else + { + PIXEL00_2 + } + if (Diff(w[2], w[6])) + { + PIXEL01_C + PIXEL02_C + PIXEL12_C + } + else + { + PIXEL01_3 + PIXEL02_4 + PIXEL12_3 + } + PIXEL10_C + PIXEL11 + if (Diff(w[8], w[4])) + { + PIXEL20_1M + } + else + { + PIXEL20_2 + } + PIXEL21_C + if (Diff(w[6], w[8])) + { + PIXEL22_1M + } + else + { + PIXEL22_2 + } + break; + } + case 218: + { + if (Diff(w[4], w[2])) + { + PIXEL00_1M + } + else + { + PIXEL00_2 + } + PIXEL01_C + if (Diff(w[2], w[6])) + { + PIXEL02_1M + } + else + { + PIXEL02_2 + } + PIXEL10_C + PIXEL11 + if (Diff(w[8], w[4])) + { + PIXEL20_1M + } + else + { + PIXEL20_2 + } + if (Diff(w[6], w[8])) + { + PIXEL12_C + PIXEL21_C + PIXEL22_C + } + else + { + PIXEL12_3 + PIXEL21_3 + PIXEL22_4 + } + break; + } + case 91: + { + if (Diff(w[4], w[2])) + { + PIXEL00_C + PIXEL01_C + PIXEL10_C + } + else + { + PIXEL00_4 + PIXEL01_3 + PIXEL10_3 + } + if (Diff(w[2], w[6])) + { + PIXEL02_1M + } + else + { + PIXEL02_2 + } + PIXEL11 + PIXEL12_C + if (Diff(w[8], w[4])) + { + PIXEL20_1M + } + else + { + PIXEL20_2 + } + PIXEL21_C + if (Diff(w[6], w[8])) + { + PIXEL22_1M + } + else + { + PIXEL22_2 + } + break; + } + case 229: + { + PIXEL00_2 + PIXEL01_1 + PIXEL02_2 + PIXEL10_1 + PIXEL11 + PIXEL12_1 + PIXEL20_1L + PIXEL21_C + PIXEL22_1R + break; + } + case 167: + { + PIXEL00_1L + PIXEL01_C + PIXEL02_1R + PIXEL10_1 + PIXEL11 + PIXEL12_1 + PIXEL20_2 + PIXEL21_1 + PIXEL22_2 + break; + } + case 173: + { + PIXEL00_1U + PIXEL01_1 + PIXEL02_2 + PIXEL10_C + PIXEL11 + PIXEL12_1 + PIXEL20_1D + PIXEL21_1 + PIXEL22_2 + break; + } + case 181: + { + PIXEL00_2 + PIXEL01_1 + PIXEL02_1U + PIXEL10_1 + PIXEL11 + PIXEL12_C + PIXEL20_2 + PIXEL21_1 + PIXEL22_1D + break; + } + case 186: + { + if (Diff(w[4], w[2])) + { + PIXEL00_1M + } + else + { + PIXEL00_2 + } + PIXEL01_C + if (Diff(w[2], w[6])) + { + PIXEL02_1M + } + else + { + PIXEL02_2 + } + PIXEL10_C + PIXEL11 + PIXEL12_C + PIXEL20_1D + PIXEL21_1 + PIXEL22_1D + break; + } + case 115: + { + PIXEL00_1L + PIXEL01_C + if (Diff(w[2], w[6])) + { + PIXEL02_1M + } + else + { + PIXEL02_2 + } + PIXEL10_1 + PIXEL11 + PIXEL12_C + PIXEL20_1L + PIXEL21_C + if (Diff(w[6], w[8])) + { + PIXEL22_1M + } + else + { + PIXEL22_2 + } + break; + } + case 93: + { + PIXEL00_1U + PIXEL01_1 + PIXEL02_1U + PIXEL10_C + PIXEL11 + PIXEL12_C + if (Diff(w[8], w[4])) + { + PIXEL20_1M + } + else + { + PIXEL20_2 + } + PIXEL21_C + if (Diff(w[6], w[8])) + { + PIXEL22_1M + } + else + { + PIXEL22_2 + } + break; + } + case 206: + { + if (Diff(w[4], w[2])) + { + PIXEL00_1M + } + else + { + PIXEL00_2 + } + PIXEL01_C + PIXEL02_1R + PIXEL10_C + PIXEL11 + PIXEL12_1 + if (Diff(w[8], w[4])) + { + PIXEL20_1M + } + else + { + PIXEL20_2 + } + PIXEL21_C + PIXEL22_1R + break; + } + case 205: + case 201: + { + PIXEL00_1U + PIXEL01_1 + PIXEL02_2 + PIXEL10_C + PIXEL11 + PIXEL12_1 + if (Diff(w[8], w[4])) + { + PIXEL20_1M + } + else + { + PIXEL20_2 + } + PIXEL21_C + PIXEL22_1R + break; + } + case 174: + case 46: + { + if (Diff(w[4], w[2])) + { + PIXEL00_1M + } + else + { + PIXEL00_2 + } + PIXEL01_C + PIXEL02_1R + PIXEL10_C + PIXEL11 + PIXEL12_1 + PIXEL20_1D + PIXEL21_1 + PIXEL22_2 + break; + } + case 179: + case 147: + { + PIXEL00_1L + PIXEL01_C + if (Diff(w[2], w[6])) + { + PIXEL02_1M + } + else + { + PIXEL02_2 + } + PIXEL10_1 + PIXEL11 + PIXEL12_C + PIXEL20_2 + PIXEL21_1 + PIXEL22_1D + break; + } + case 117: + case 116: + { + PIXEL00_2 + PIXEL01_1 + PIXEL02_1U + PIXEL10_1 + PIXEL11 + PIXEL12_C + PIXEL20_1L + PIXEL21_C + if (Diff(w[6], w[8])) + { + PIXEL22_1M + } + else + { + PIXEL22_2 + } + break; + } + case 189: + { + PIXEL00_1U + PIXEL01_1 + PIXEL02_1U + PIXEL10_C + PIXEL11 + PIXEL12_C + PIXEL20_1D + PIXEL21_1 + PIXEL22_1D + break; + } + case 231: + { + PIXEL00_1L + PIXEL01_C + PIXEL02_1R + PIXEL10_1 + PIXEL11 + PIXEL12_1 + PIXEL20_1L + PIXEL21_C + PIXEL22_1R + break; + } + case 126: + { + PIXEL00_1M + if (Diff(w[2], w[6])) + { + PIXEL01_C + PIXEL02_C + PIXEL12_C + } + else + { + PIXEL01_3 + PIXEL02_4 + PIXEL12_3 + } + PIXEL11 + if (Diff(w[8], w[4])) + { + PIXEL10_C + PIXEL20_C + PIXEL21_C + } + else + { + PIXEL10_3 + PIXEL20_4 + PIXEL21_3 + } + PIXEL22_1M + break; + } + case 219: + { + if (Diff(w[4], w[2])) + { + PIXEL00_C + PIXEL01_C + PIXEL10_C + } + else + { + PIXEL00_4 + PIXEL01_3 + PIXEL10_3 + } + PIXEL02_1M + PIXEL11 + PIXEL20_1M + if (Diff(w[6], w[8])) + { + PIXEL12_C + PIXEL21_C + PIXEL22_C + } + else + { + PIXEL12_3 + PIXEL21_3 + PIXEL22_4 + } + break; + } + case 125: + { + if (Diff(w[8], w[4])) + { + PIXEL00_1U + PIXEL10_C + PIXEL20_C + PIXEL21_C + } + else + { + PIXEL00_2 + PIXEL10_6 + PIXEL20_5 + PIXEL21_1 + } + PIXEL01_1 + PIXEL02_1U + PIXEL11 + PIXEL12_C + PIXEL22_1M + break; + } + case 221: + { + if (Diff(w[6], w[8])) + { + PIXEL02_1U + PIXEL12_C + PIXEL21_C + PIXEL22_C + } + else + { + PIXEL02_2 + PIXEL12_6 + PIXEL21_1 + PIXEL22_5 + } + PIXEL00_1U + PIXEL01_1 + PIXEL10_C + PIXEL11 + PIXEL20_1M + break; + } + case 207: + { + if (Diff(w[4], w[2])) + { + PIXEL00_C + PIXEL01_C + PIXEL02_1R + PIXEL10_C + } + else + { + PIXEL00_5 + PIXEL01_6 + PIXEL02_2 + PIXEL10_1 + } + PIXEL11 + PIXEL12_1 + PIXEL20_1M + PIXEL21_C + PIXEL22_1R + break; + } + case 238: + { + if (Diff(w[8], w[4])) + { + PIXEL10_C + PIXEL20_C + PIXEL21_C + PIXEL22_1R + } + else + { + PIXEL10_1 + PIXEL20_5 + PIXEL21_6 + PIXEL22_2 + } + PIXEL00_1M + PIXEL01_C + PIXEL02_1R + PIXEL11 + PIXEL12_1 + break; + } + case 190: + { + if (Diff(w[2], w[6])) + { + PIXEL01_C + PIXEL02_C + PIXEL12_C + PIXEL22_1D + } + else + { + PIXEL01_1 + PIXEL02_5 + PIXEL12_6 + PIXEL22_2 + } + PIXEL00_1M + PIXEL10_C + PIXEL11 + PIXEL20_1D + PIXEL21_1 + break; + } + case 187: + { + if (Diff(w[4], w[2])) + { + PIXEL00_C + PIXEL01_C + PIXEL10_C + PIXEL20_1D + } + else + { + PIXEL00_5 + PIXEL01_1 + PIXEL10_6 + PIXEL20_2 + } + PIXEL02_1M + PIXEL11 + PIXEL12_C + PIXEL21_1 + PIXEL22_1D + break; + } + case 243: + { + if (Diff(w[6], w[8])) + { + PIXEL12_C + PIXEL20_1L + PIXEL21_C + PIXEL22_C + } + else + { + PIXEL12_1 + PIXEL20_2 + PIXEL21_6 + PIXEL22_5 + } + PIXEL00_1L + PIXEL01_C + PIXEL02_1M + PIXEL10_1 + PIXEL11 + break; + } + case 119: + { + if (Diff(w[2], w[6])) + { + PIXEL00_1L + PIXEL01_C + PIXEL02_C + PIXEL12_C + } + else + { + PIXEL00_2 + PIXEL01_6 + PIXEL02_5 + PIXEL12_1 + } + PIXEL10_1 + PIXEL11 + PIXEL20_1L + PIXEL21_C + PIXEL22_1M + break; + } + case 237: + case 233: + { + PIXEL00_1U + PIXEL01_1 + PIXEL02_2 + PIXEL10_C + PIXEL11 + PIXEL12_1 + if (Diff(w[8], w[4])) + { + PIXEL20_C + } + else + { + PIXEL20_2 + } + PIXEL21_C + PIXEL22_1R + break; + } + case 175: + case 47: + { + if (Diff(w[4], w[2])) + { + PIXEL00_C + } + else + { + PIXEL00_2 + } + PIXEL01_C + PIXEL02_1R + PIXEL10_C + PIXEL11 + PIXEL12_1 + PIXEL20_1D + PIXEL21_1 + PIXEL22_2 + break; + } + case 183: + case 151: + { + PIXEL00_1L + PIXEL01_C + if (Diff(w[2], w[6])) + { + PIXEL02_C + } + else + { + PIXEL02_2 + } + PIXEL10_1 + PIXEL11 + PIXEL12_C + PIXEL20_2 + PIXEL21_1 + PIXEL22_1D + break; + } + case 245: + case 244: + { + PIXEL00_2 + PIXEL01_1 + PIXEL02_1U + PIXEL10_1 + PIXEL11 + PIXEL12_C + PIXEL20_1L + PIXEL21_C + if (Diff(w[6], w[8])) + { + PIXEL22_C + } + else + { + PIXEL22_2 + } + break; + } + case 250: + { + PIXEL00_1M + PIXEL01_C + PIXEL02_1M + PIXEL11 + if (Diff(w[8], w[4])) + { + PIXEL10_C + PIXEL20_C + } + else + { + PIXEL10_3 + PIXEL20_4 + } + PIXEL21_C + if (Diff(w[6], w[8])) + { + PIXEL12_C + PIXEL22_C + } + else + { + PIXEL12_3 + PIXEL22_4 + } + break; + } + case 123: + { + if (Diff(w[4], w[2])) + { + PIXEL00_C + PIXEL01_C + } + else + { + PIXEL00_4 + PIXEL01_3 + } + PIXEL02_1M + PIXEL10_C + PIXEL11 + PIXEL12_C + if (Diff(w[8], w[4])) + { + PIXEL20_C + PIXEL21_C + } + else + { + PIXEL20_4 + PIXEL21_3 + } + PIXEL22_1M + break; + } + case 95: + { + if (Diff(w[4], w[2])) + { + PIXEL00_C + PIXEL10_C + } + else + { + PIXEL00_4 + PIXEL10_3 + } + PIXEL01_C + if (Diff(w[2], w[6])) + { + PIXEL02_C + PIXEL12_C + } + else + { + PIXEL02_4 + PIXEL12_3 + } + PIXEL11 + PIXEL20_1M + PIXEL21_C + PIXEL22_1M + break; + } + case 222: + { + PIXEL00_1M + if (Diff(w[2], w[6])) + { + PIXEL01_C + PIXEL02_C + } + else + { + PIXEL01_3 + PIXEL02_4 + } + PIXEL10_C + PIXEL11 + PIXEL12_C + PIXEL20_1M + if (Diff(w[6], w[8])) + { + PIXEL21_C + PIXEL22_C + } + else + { + PIXEL21_3 + PIXEL22_4 + } + break; + } + case 252: + { + PIXEL00_1M + PIXEL01_1 + PIXEL02_1U + PIXEL11 + PIXEL12_C + if (Diff(w[8], w[4])) + { + PIXEL10_C + PIXEL20_C + } + else + { + PIXEL10_3 + PIXEL20_4 + } + PIXEL21_C + if (Diff(w[6], w[8])) + { + PIXEL22_C + } + else + { + PIXEL22_2 + } + break; + } + case 249: + { + PIXEL00_1U + PIXEL01_1 + PIXEL02_1M + PIXEL10_C + PIXEL11 + if (Diff(w[8], w[4])) + { + PIXEL20_C + } + else + { + PIXEL20_2 + } + PIXEL21_C + if (Diff(w[6], w[8])) + { + PIXEL12_C + PIXEL22_C + } + else + { + PIXEL12_3 + PIXEL22_4 + } + break; + } + case 235: + { + if (Diff(w[4], w[2])) + { + PIXEL00_C + PIXEL01_C + } + else + { + PIXEL00_4 + PIXEL01_3 + } + PIXEL02_1M + PIXEL10_C + PIXEL11 + PIXEL12_1 + if (Diff(w[8], w[4])) + { + PIXEL20_C + } + else + { + PIXEL20_2 + } + PIXEL21_C + PIXEL22_1R + break; + } + case 111: + { + if (Diff(w[4], w[2])) + { + PIXEL00_C + } + else + { + PIXEL00_2 + } + PIXEL01_C + PIXEL02_1R + PIXEL10_C + PIXEL11 + PIXEL12_1 + if (Diff(w[8], w[4])) + { + PIXEL20_C + PIXEL21_C + } + else + { + PIXEL20_4 + PIXEL21_3 + } + PIXEL22_1M + break; + } + case 63: + { + if (Diff(w[4], w[2])) + { + PIXEL00_C + } + else + { + PIXEL00_2 + } + PIXEL01_C + if (Diff(w[2], w[6])) + { + PIXEL02_C + PIXEL12_C + } + else + { + PIXEL02_4 + PIXEL12_3 + } + PIXEL10_C + PIXEL11 + PIXEL20_1D + PIXEL21_1 + PIXEL22_1M + break; + } + case 159: + { + if (Diff(w[4], w[2])) + { + PIXEL00_C + PIXEL10_C + } + else + { + PIXEL00_4 + PIXEL10_3 + } + PIXEL01_C + if (Diff(w[2], w[6])) + { + PIXEL02_C + } + else + { + PIXEL02_2 + } + PIXEL11 + PIXEL12_C + PIXEL20_1M + PIXEL21_1 + PIXEL22_1D + break; + } + case 215: + { + PIXEL00_1L + PIXEL01_C + if (Diff(w[2], w[6])) + { + PIXEL02_C + } + else + { + PIXEL02_2 + } + PIXEL10_1 + PIXEL11 + PIXEL12_C + PIXEL20_1M + if (Diff(w[6], w[8])) + { + PIXEL21_C + PIXEL22_C + } + else + { + PIXEL21_3 + PIXEL22_4 + } + break; + } + case 246: + { + PIXEL00_1M + if (Diff(w[2], w[6])) + { + PIXEL01_C + PIXEL02_C + } + else + { + PIXEL01_3 + PIXEL02_4 + } + PIXEL10_1 + PIXEL11 + PIXEL12_C + PIXEL20_1L + PIXEL21_C + if (Diff(w[6], w[8])) + { + PIXEL22_C + } + else + { + PIXEL22_2 + } + break; + } + case 254: + { + PIXEL00_1M + if (Diff(w[2], w[6])) + { + PIXEL01_C + PIXEL02_C + } + else + { + PIXEL01_3 + PIXEL02_4 + } + PIXEL11 + if (Diff(w[8], w[4])) + { + PIXEL10_C + PIXEL20_C + } + else + { + PIXEL10_3 + PIXEL20_4 + } + if (Diff(w[6], w[8])) + { + PIXEL12_C + PIXEL21_C + PIXEL22_C + } + else + { + PIXEL12_3 + PIXEL21_3 + PIXEL22_2 + } + break; + } + case 253: + { + PIXEL00_1U + PIXEL01_1 + PIXEL02_1U + PIXEL10_C + PIXEL11 + PIXEL12_C + if (Diff(w[8], w[4])) + { + PIXEL20_C + } + else + { + PIXEL20_2 + } + PIXEL21_C + if (Diff(w[6], w[8])) + { + PIXEL22_C + } + else + { + PIXEL22_2 + } + break; + } + case 251: + { + if (Diff(w[4], w[2])) + { + PIXEL00_C + PIXEL01_C + } + else + { + PIXEL00_4 + PIXEL01_3 + } + PIXEL02_1M + PIXEL11 + if (Diff(w[8], w[4])) + { + PIXEL10_C + PIXEL20_C + PIXEL21_C + } + else + { + PIXEL10_3 + PIXEL20_2 + PIXEL21_3 + } + if (Diff(w[6], w[8])) + { + PIXEL12_C + PIXEL22_C + } + else + { + PIXEL12_3 + PIXEL22_4 + } + break; + } + case 239: + { + if (Diff(w[4], w[2])) + { + PIXEL00_C + } + else + { + PIXEL00_2 + } + PIXEL01_C + PIXEL02_1R + PIXEL10_C + PIXEL11 + PIXEL12_1 + if (Diff(w[8], w[4])) + { + PIXEL20_C + } + else + { + PIXEL20_2 + } + PIXEL21_C + PIXEL22_1R + break; + } + case 127: + { + if (Diff(w[4], w[2])) + { + PIXEL00_C + PIXEL01_C + PIXEL10_C + } + else + { + PIXEL00_2 + PIXEL01_3 + PIXEL10_3 + } + if (Diff(w[2], w[6])) + { + PIXEL02_C + PIXEL12_C + } + else + { + PIXEL02_4 + PIXEL12_3 + } + PIXEL11 + if (Diff(w[8], w[4])) + { + PIXEL20_C + PIXEL21_C + } + else + { + PIXEL20_4 + PIXEL21_3 + } + PIXEL22_1M + break; + } + case 191: + { + if (Diff(w[4], w[2])) + { + PIXEL00_C + } + else + { + PIXEL00_2 + } + PIXEL01_C + if (Diff(w[2], w[6])) + { + PIXEL02_C + } + else + { + PIXEL02_2 + } + PIXEL10_C + PIXEL11 + PIXEL12_C + PIXEL20_1D + PIXEL21_1 + PIXEL22_1D + break; + } + case 223: + { + if (Diff(w[4], w[2])) + { + PIXEL00_C + PIXEL10_C + } + else + { + PIXEL00_4 + PIXEL10_3 + } + if (Diff(w[2], w[6])) + { + PIXEL01_C + PIXEL02_C + PIXEL12_C + } + else + { + PIXEL01_3 + PIXEL02_2 + PIXEL12_3 + } + PIXEL11 + PIXEL20_1M + if (Diff(w[6], w[8])) + { + PIXEL21_C + PIXEL22_C + } + else + { + PIXEL21_3 + PIXEL22_4 + } + break; + } + case 247: + { + PIXEL00_1L + PIXEL01_C + if (Diff(w[2], w[6])) + { + PIXEL02_C + } + else + { + PIXEL02_2 + } + PIXEL10_1 + PIXEL11 + PIXEL12_C + PIXEL20_1L + PIXEL21_C + if (Diff(w[6], w[8])) + { + PIXEL22_C + } + else + { + PIXEL22_2 + } + break; + } + case 255: + { + if (Diff(w[4], w[2])) + { + PIXEL00_C + } + else + { + PIXEL00_2 + } + PIXEL01_C + if (Diff(w[2], w[6])) + { + PIXEL02_C + } + else + { + PIXEL02_2 + } + PIXEL10_C + PIXEL11 + PIXEL12_C + if (Diff(w[8], w[4])) + { + PIXEL20_C + } + else + { + PIXEL20_2 + } + PIXEL21_C + if (Diff(w[6], w[8])) + { + PIXEL22_C + } + else + { + PIXEL22_2 + } + break; + } + } + ++pIn; + pOut += 3; + } + pOut += dstPitch * 3 - Xres * 3; + } +} + +MaxSt_Hq3x::MaxSt_Hq3x() { + buffer = NULL; +} + +MaxSt_Hq3x::~MaxSt_Hq3x() { + outit(); +} + +void MaxSt_Hq3x::init() { + delete []buffer; + buffer = new Gambatte::uint_least32_t[144 * 160]; +} + +void MaxSt_Hq3x::outit() { + delete []buffer; + buffer = NULL; +} + +const Gambatte::FilterInfo& MaxSt_Hq3x::info() { + static const Gambatte::FilterInfo fInfo = { "MaxSt's Hq3x", 160 * 3, 144 * 3 }; + return fInfo; +} + +Gambatte::uint_least32_t* MaxSt_Hq3x::inBuffer() { + return buffer; +} + +unsigned MaxSt_Hq3x::inPitch() { + return 160; +} + +void MaxSt_Hq3x::filter(Gambatte::uint_least32_t *const dbuffer, const unsigned pitch) { + ::filter(dbuffer, pitch, buffer, 160, 144); +} diff --git a/supergameboy/libgambatte/src/video/filters/maxsthq3x.h b/supergameboy/libgambatte/src/video/filters/maxsthq3x.h new file mode 100644 index 00000000..9e1f51d6 --- /dev/null +++ b/supergameboy/libgambatte/src/video/filters/maxsthq3x.h @@ -0,0 +1,40 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre AamÃ¥s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef MAXSTHQ3X_H +#define MAXSTHQ3X_H + +#include "filter.h" + +struct FilterInfo; + +class MaxSt_Hq3x : public Filter { + Gambatte::uint_least32_t *buffer; + +public: + MaxSt_Hq3x(); + ~MaxSt_Hq3x(); + void init(); + void outit(); + const Gambatte::FilterInfo& info(); + void filter(Gambatte::uint_least32_t *dbuffer, unsigned pitch); + Gambatte::uint_least32_t* inBuffer(); + unsigned inPitch(); +}; + +#endif diff --git a/supergameboy/libgambatte/src/video/irq_event.cpp b/supergameboy/libgambatte/src/video/irq_event.cpp new file mode 100644 index 00000000..358f1daf --- /dev/null +++ b/supergameboy/libgambatte/src/video/irq_event.cpp @@ -0,0 +1,36 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "irq_event.h" + +IrqEvent::IrqEvent(event_queue &irqEventQueue_in) : + VideoEvent(11), + irqEventQueue(irqEventQueue_in) +{ +} + +void IrqEvent::doEvent() { + irqEventQueue.top()->doEvent(); + + if (irqEventQueue.top()->time() == DISABLED_TIME) + irqEventQueue.pop(); + else + irqEventQueue.modify_root(irqEventQueue.top()); + + setTime(schedule(irqEventQueue)); +} diff --git a/supergameboy/libgambatte/src/video/irq_event.h b/supergameboy/libgambatte/src/video/irq_event.h new file mode 100644 index 00000000..c8a5b991 --- /dev/null +++ b/supergameboy/libgambatte/src/video/irq_event.h @@ -0,0 +1,52 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +***************************************************************************/ +#ifndef VIDEO_IRQ_EVENT_H +#define VIDEO_IRQ_EVENT_H + +#include "../event_queue.h" +#include "video_event.h" +#include "video_event_comparer.h" +#include "basic_add_event.h" + +class IrqEvent : public VideoEvent { + event_queue &irqEventQueue; + +public: + IrqEvent(event_queue &irqEventQueue_in); + + void doEvent(); + + static unsigned long schedule(const event_queue &irqEventQueue) { + return irqEventQueue.top()->time(); + } + + void schedule() { + setTime(irqEventQueue.top()->time()); + } +}; + +static inline void addEvent(event_queue &q, IrqEvent *const e, const unsigned long newTime) { + addUnconditionalEvent(q, e, newTime); +} + +static inline void addFixedtimeEvent(event_queue &q, IrqEvent *const e, const unsigned long newTime) { + addUnconditionalFixedtimeEvent(q, e, newTime); +} + +#endif diff --git a/supergameboy/libgambatte/src/video/ly_counter.cpp b/supergameboy/libgambatte/src/video/ly_counter.cpp new file mode 100644 index 00000000..5d5b6d98 --- /dev/null +++ b/supergameboy/libgambatte/src/video/ly_counter.cpp @@ -0,0 +1,62 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "ly_counter.h" +#include "../savestate.h" + +LyCounter::LyCounter() : VideoEvent(0) { + setDoubleSpeed(false); + reset(0, 0); +} + +void LyCounter::doEvent() { + ++ly_; + + if (ly_ == 154) + ly_ = 0; + + setTime(time() + lineTime_); +} + +unsigned long LyCounter::nextLineCycle(const unsigned lineCycle, const unsigned long cycleCounter) const { + unsigned long tmp = time() + (lineCycle << ds); + + if (tmp - cycleCounter > lineTime_) + tmp -= lineTime_; + + return tmp; +} + +unsigned long LyCounter::nextFrameCycle(const unsigned long frameCycle, const unsigned long cycleCounter) const { + unsigned long tmp = time() + (((153U - ly()) * 456U + frameCycle) << ds); + + if (tmp - cycleCounter > 70224U << ds) + tmp -= 70224U << ds; + + return tmp; +} + +void LyCounter::reset(const unsigned long videoCycles, const unsigned long lastUpdate) { + ly_ = videoCycles / 456; + setTime(lastUpdate + ((456 - (videoCycles - ly_ * 456ul)) << isDoubleSpeed())); +} + +void LyCounter::setDoubleSpeed(const bool ds_in) { + ds = ds_in; + lineTime_ = 456U << ds_in; +} diff --git a/supergameboy/libgambatte/src/video/ly_counter.h b/supergameboy/libgambatte/src/video/ly_counter.h new file mode 100644 index 00000000..2b795fb8 --- /dev/null +++ b/supergameboy/libgambatte/src/video/ly_counter.h @@ -0,0 +1,69 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef LY_COUNTER_H +#define LY_COUNTER_H + +class SaveState; + +#include "video_event.h" +#include "basic_add_event.h" + +class LyCounter : public VideoEvent { + unsigned short lineTime_; + unsigned char ly_; + bool ds; + +public: + LyCounter(); + + void doEvent(); + + bool isDoubleSpeed() const { + return ds; + } + + unsigned lineCycles(const unsigned long cc) const { + return 456u - ((time() - cc) >> isDoubleSpeed()); + } + + unsigned lineTime() const { + return lineTime_; + } + + unsigned ly() const { + return ly_; + } + + unsigned long nextLineCycle(unsigned lineCycle, unsigned long cycleCounter) const; + unsigned long nextFrameCycle(unsigned long frameCycle, unsigned long cycleCounter) const; + + void reset(unsigned long videoCycles, unsigned long lastUpdate); + + void setDoubleSpeed(bool ds_in); +}; + +static inline void addEvent(event_queue &q, LyCounter *const e, const unsigned long newTime) { + addUnconditionalEvent(q, e, newTime); +} + +static inline void addFixedtimeEvent(event_queue &q, LyCounter *const e, const unsigned long newTime) { + addUnconditionalFixedtimeEvent(q, e, newTime); +} + +#endif diff --git a/supergameboy/libgambatte/src/video/lyc_irq.cpp b/supergameboy/libgambatte/src/video/lyc_irq.cpp new file mode 100644 index 00000000..eb81d41b --- /dev/null +++ b/supergameboy/libgambatte/src/video/lyc_irq.cpp @@ -0,0 +1,42 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "lyc_irq.h" + +LycIrq::LycIrq(unsigned char &ifReg_in) : + VideoEvent(1), + ifReg(ifReg_in) +{ + setDoubleSpeed(false); + setM2IrqEnabled(false); + setLycReg(0); + setSkip(false); +} + +void LycIrq::doEvent() { + if (!skip && (!m2IrqEnabled || lycReg_ > 143 || lycReg_ == 0)) + ifReg |= 0x2; + + skip = false; + + setTime(time() + frameTime); +} + +unsigned long LycIrq::schedule(const unsigned statReg, const unsigned lycReg, const LyCounter &lyCounter, const unsigned long cycleCounter) { + return ((statReg & 0x40) && lycReg < 154) ? lyCounter.nextFrameCycle(lycReg ? lycReg * 456 : 153 * 456 + 8, cycleCounter) : static_cast(DISABLED_TIME); +} diff --git a/supergameboy/libgambatte/src/video/lyc_irq.h b/supergameboy/libgambatte/src/video/lyc_irq.h new file mode 100644 index 00000000..ed93fdda --- /dev/null +++ b/supergameboy/libgambatte/src/video/lyc_irq.h @@ -0,0 +1,67 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef VIDEO_LYC_IRQ_H +#define VIDEO_LYC_IRQ_H + +#include "ly_counter.h" + +class LycIrq : public VideoEvent { + unsigned char &ifReg; + unsigned long frameTime; + unsigned char lycReg_; + bool m2IrqEnabled; + bool skip; + +public: + LycIrq(unsigned char &ifReg_in); + + void doEvent(); + + unsigned lycReg() const { + return lycReg_; + } + + static unsigned long schedule(unsigned statReg, unsigned lycReg, const LyCounter &lyCounter, unsigned long cycleCounter); + + void setDoubleSpeed(const bool ds) { + frameTime = 70224 << ds; + } + + void setLycReg(const unsigned lycReg_in) { + lycReg_ = lycReg_in; + } + + void setM2IrqEnabled(const bool enabled) { + m2IrqEnabled = enabled; + } + + void setSkip(const bool skip) { + this->skip = skip; + } + + bool skips() const { + return skip; + } + + bool isSkipPeriod(const unsigned long cycleCounter, const bool doubleSpeed) const { + return lycReg_ > 0 && time() - cycleCounter > 4U >> doubleSpeed && time() - cycleCounter < 9; + } +}; + +#endif diff --git a/supergameboy/libgambatte/src/video/m3_extra_cycles.cpp b/supergameboy/libgambatte/src/video/m3_extra_cycles.cpp new file mode 100644 index 00000000..de4eadb7 --- /dev/null +++ b/supergameboy/libgambatte/src/video/m3_extra_cycles.cpp @@ -0,0 +1,101 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "m3_extra_cycles.h" +#include "scx_reader.h" +#include "window.h" +#include "sprite_mapper.h" +#include "../insertion_sort.h" + +M3ExtraCycles::M3ExtraCycles(const SpriteMapper &spriteMapper, + const ScxReader &scxReader, + const Window &win) : + spriteMapper(spriteMapper), + scxReader(scxReader), + win(win) +{ + invalidateCache(); +} + +static const unsigned char* addLineCycles(const unsigned char *const start, const unsigned char *const end, + const unsigned maxSpx, const unsigned scwxAnd7, const unsigned char *const posbuf_plus1, unsigned char *cycles_out) { + unsigned sum = 0; + + const unsigned char *a = start; + + for (; a < end; ++a) { + const unsigned spx = posbuf_plus1[*a]; + + if (spx > maxSpx) + break; + + unsigned cycles = 6; + const unsigned posAnd7 = (scwxAnd7 + spx) & 7; + + if (posAnd7 < 5) { + cycles = 11 - posAnd7; + + for (const unsigned char *b = a; b > start;) { + const unsigned bSpx = posbuf_plus1[*--b]; + + if (spx - bSpx > 4U) + break; + + if (((scwxAnd7 + bSpx) & 7) < 4 || spx == bSpx) { + cycles = 6; + break; + } + } + } + + sum += cycles; + } + + *cycles_out += sum; + + return a; +} + +void M3ExtraCycles::updateLine(const unsigned ly) const { + const bool windowEnabled = win.enabled(ly); + + cycles[ly] = windowEnabled ? scxReader.scxAnd7() + 6 : scxReader.scxAnd7(); + + const unsigned numSprites = spriteMapper.numSprites(ly); + + if (numSprites == 0) + return; + + unsigned char sortBuf[10]; + const unsigned char *tmp = spriteMapper.sprites(ly); + + if (spriteMapper.isCgb()) { + std::memcpy(sortBuf, tmp, sizeof(sortBuf)); + insertionSort(sortBuf, sortBuf + numSprites, SpriteMapper::SpxLess(spriteMapper.posbuf())); + tmp = sortBuf; + } + + const unsigned char *const tmpend = tmp + numSprites; + const unsigned char *const posbuf_plus1 = spriteMapper.posbuf() + 1; + + if (windowEnabled) { + addLineCycles(addLineCycles(tmp, tmpend, win.wxReader.wx(), scxReader.scxAnd7(), posbuf_plus1, cycles + ly), + tmpend, 167, 7 - win.wxReader.wx(), posbuf_plus1, cycles + ly); + } else + addLineCycles(tmp, tmpend, 167, scxReader.scxAnd7(), posbuf_plus1, cycles + ly); +} diff --git a/supergameboy/libgambatte/src/video/m3_extra_cycles.h b/supergameboy/libgambatte/src/video/m3_extra_cycles.h new file mode 100644 index 00000000..8a7f1470 --- /dev/null +++ b/supergameboy/libgambatte/src/video/m3_extra_cycles.h @@ -0,0 +1,56 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef VIDEO_M3_EXTRA_CYCLES_H +#define VIDEO_M3_EXTRA_CYCLES_H + +class ScxReader; +class Window; +class SpriteMapper; + +#include + +class M3ExtraCycles { + enum { CYCLES_INVALID = 0xFF }; + + mutable unsigned char cycles[144]; + + const SpriteMapper &spriteMapper; + const ScxReader &scxReader; + const Window &win; + + void updateLine(unsigned ly) const; + +public: + M3ExtraCycles(const SpriteMapper &spriteMapper, + const ScxReader &scxReader_in, + const Window &win); + + void invalidateCache() { + std::memset(cycles, CYCLES_INVALID, sizeof(cycles)); + } + + unsigned operator()(const unsigned ly) const { + if (cycles[ly] == CYCLES_INVALID) + updateLine(ly); + + return cycles[ly]; + } +}; + +#endif diff --git a/supergameboy/libgambatte/src/video/mode0_irq.cpp b/supergameboy/libgambatte/src/video/mode0_irq.cpp new file mode 100644 index 00000000..041d3db1 --- /dev/null +++ b/supergameboy/libgambatte/src/video/mode0_irq.cpp @@ -0,0 +1,95 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +***************************************************************************/ +#include "mode0_irq.h" + +#include "ly_counter.h" +#include "lyc_irq.h" +#include "m3_extra_cycles.h" + +Mode0Irq::Mode0Irq(const LyCounter &lyCounter_in, const LycIrq &lycIrq_in, + const M3ExtraCycles &m3ExtraCycles_in, unsigned char &ifReg_in) : + VideoEvent(0), + lyCounter(lyCounter_in), + lycIrq(lycIrq_in), + m3ExtraCycles(m3ExtraCycles_in), + ifReg(ifReg_in) +{ +} + +static unsigned baseCycle(const bool ds) { + return 80 + 169 + ds * 3 + 1 - ds; +} + +void Mode0Irq::doEvent() { + if (lycIrq.time() == DISABLED_TIME || lyCounter.ly() != lycIrq.lycReg()) + ifReg |= 2; + + unsigned long nextTime = lyCounter.time(); + unsigned nextLy = lyCounter.ly() + 1; + + if (nextLy == 144) { + nextLy = 0; + nextTime += lyCounter.lineTime() * 10; + } + + nextTime += (baseCycle(lyCounter.isDoubleSpeed()) + m3ExtraCycles(nextLy)) << lyCounter.isDoubleSpeed(); + + setTime(nextTime); +} + +void Mode0Irq::mode3CyclesChange() { + unsigned long nextTime = lyCounter.time() - lyCounter.lineTime(); + unsigned nextLy = lyCounter.ly(); + + if (time() > lyCounter.time()) { + nextTime += lyCounter.lineTime(); + ++nextLy; + + if (nextLy > 143) { + nextTime += lyCounter.lineTime() * (154 - nextLy); + nextLy = 0; + } + } + + nextTime += (baseCycle(lyCounter.isDoubleSpeed()) + m3ExtraCycles(nextLy)) << lyCounter.isDoubleSpeed(); + + setTime(nextTime); +} + +unsigned long Mode0Irq::schedule(const unsigned statReg, const M3ExtraCycles &m3ExtraCycles, const LyCounter &lyCounter, const unsigned long cycleCounter) { + if (!(statReg & 0x08)) + return DISABLED_TIME; + + unsigned line = lyCounter.ly(); + int next = static_cast(baseCycle(lyCounter.isDoubleSpeed())) - static_cast(lyCounter.lineCycles(cycleCounter)); + + if (line < 144 && next + static_cast(m3ExtraCycles(line)) <= 0) { + next += 456; + ++line; + } + + if (line > 143) { + next += (154 - line) * 456; + line = 0; + } + + next += m3ExtraCycles(line); + + return cycleCounter + (static_cast(next) << lyCounter.isDoubleSpeed()); +} diff --git a/supergameboy/libgambatte/src/video/mode0_irq.h b/supergameboy/libgambatte/src/video/mode0_irq.h new file mode 100644 index 00000000..bc5f1540 --- /dev/null +++ b/supergameboy/libgambatte/src/video/mode0_irq.h @@ -0,0 +1,42 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef VIDEO_MODE0_IRQ_H +#define VIDEO_MODE0_IRQ_H + +class LycIrq; +class M3ExtraCycles; + +#include "ly_counter.h" + +class Mode0Irq : public VideoEvent { + const LyCounter &lyCounter; + const LycIrq &lycIrq; + const M3ExtraCycles &m3ExtraCycles; + unsigned char &ifReg; + +public: + Mode0Irq(const LyCounter &lyCounter_in, const LycIrq &lycIrq_in, + const M3ExtraCycles &m3ExtraCycles_in, unsigned char &ifReg_in); + + void doEvent(); + void mode3CyclesChange(); + static unsigned long schedule(unsigned statReg, const M3ExtraCycles &m3ExtraCycles, const LyCounter &lyCounter, unsigned long cycleCounter); +}; + +#endif diff --git a/supergameboy/libgambatte/src/video/mode1_irq.cpp b/supergameboy/libgambatte/src/video/mode1_irq.cpp new file mode 100644 index 00000000..ddafe25c --- /dev/null +++ b/supergameboy/libgambatte/src/video/mode1_irq.cpp @@ -0,0 +1,33 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "mode1_irq.h" + +Mode1Irq::Mode1Irq(unsigned char &ifReg_in) : + VideoEvent(0), + ifReg(ifReg_in) +{ + setDoubleSpeed(false); + setM1StatIrqEnabled(false); +} + +void Mode1Irq::doEvent() { + ifReg |= flags; + + setTime(time() + frameTime); +} diff --git a/supergameboy/libgambatte/src/video/mode1_irq.h b/supergameboy/libgambatte/src/video/mode1_irq.h new file mode 100644 index 00000000..f4e6270f --- /dev/null +++ b/supergameboy/libgambatte/src/video/mode1_irq.h @@ -0,0 +1,56 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef VIDEO_MODE1_IRQ_H +#define VIDEO_MODE1_IRQ_H + +#include "ly_counter.h" +#include "basic_add_event.h" + +class Mode1Irq : public VideoEvent { + unsigned char &ifReg; + unsigned long frameTime; + unsigned char flags; + +public: + Mode1Irq(unsigned char &ifReg_in); + + void doEvent(); + + static unsigned long schedule(const LyCounter &lyCounter, unsigned long cycleCounter) { + return lyCounter.nextFrameCycle(144 * 456, cycleCounter); + } + + void setDoubleSpeed(const bool ds) { + frameTime = 70224 << ds; + } + + void setM1StatIrqEnabled(const bool enabled) { + flags = (enabled * 2) | 1; + } +}; + +static inline void addEvent(event_queue &q, Mode1Irq *const e, const unsigned long newTime) { + addUnconditionalEvent(q, e, newTime); +} + +static inline void addFixedtimeEvent(event_queue &q, Mode1Irq *const e, const unsigned long newTime) { + addUnconditionalFixedtimeEvent(q, e, newTime); +} + +#endif diff --git a/supergameboy/libgambatte/src/video/mode2_irq.cpp b/supergameboy/libgambatte/src/video/mode2_irq.cpp new file mode 100644 index 00000000..b1a419ea --- /dev/null +++ b/supergameboy/libgambatte/src/video/mode2_irq.cpp @@ -0,0 +1,63 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "mode2_irq.h" + +#include "ly_counter.h" +#include "lyc_irq.h" + +Mode2Irq::Mode2Irq(const LyCounter &lyCounter_in, const LycIrq &lycIrq_in, + unsigned char &ifReg_in) : + VideoEvent(0), + lyCounter(lyCounter_in), + lycIrq(lycIrq_in), + ifReg(ifReg_in) +{ +} + +void Mode2Irq::doEvent() { + const unsigned ly = lyCounter.time() - time() < 8 ? (lyCounter.ly() == 153 ? 0 : lyCounter.ly() + 1) : lyCounter.ly(); + + if (lycIrq.time() == DISABLED_TIME || (lycIrq.lycReg() != 0 && ly != (lycIrq.lycReg() + 1U)) || (lycIrq.lycReg() == 0 && ly > 1)) + ifReg |= 2; + + setTime(time() + lyCounter.lineTime()); + + if (ly == 0) + setTime(time() - 4); + else if (ly == 143) + setTime(time() + lyCounter.lineTime() * 10 + 4); +} + +unsigned long Mode2Irq::schedule(const unsigned statReg, const LyCounter &lyCounter, const unsigned long cycleCounter) { + if ((statReg & 0x28) != 0x20) + return DISABLED_TIME; + + unsigned next = lyCounter.time() - cycleCounter; + + if (lyCounter.ly() >= 143 || (lyCounter.ly() == 142 && next <= 4)) { + next += (153u - lyCounter.ly()) * lyCounter.lineTime(); + } else { + if (next <= 4) + next += lyCounter.lineTime(); + + next -= 4; + } + + return cycleCounter + next; +} diff --git a/supergameboy/libgambatte/src/video/mode2_irq.h b/supergameboy/libgambatte/src/video/mode2_irq.h new file mode 100644 index 00000000..2ea86055 --- /dev/null +++ b/supergameboy/libgambatte/src/video/mode2_irq.h @@ -0,0 +1,40 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef VIDEO_MODE2_IRQ_H +#define VIDEO_MODE2_IRQ_H + +class LycIrq; + +#include "ly_counter.h" +#include "basic_add_event.h" + +class Mode2Irq : public VideoEvent { + const LyCounter &lyCounter; + const LycIrq &lycIrq; + unsigned char &ifReg; + +public: + Mode2Irq(const LyCounter &lyCounter_in, const LycIrq &lycIrq_in, + unsigned char &ifReg_in); + + void doEvent(); + static unsigned long schedule(unsigned statReg, const LyCounter &lyCounter, unsigned long cycleCounter); +}; + +#endif diff --git a/supergameboy/libgambatte/src/video/mode3_event.cpp b/supergameboy/libgambatte/src/video/mode3_event.cpp new file mode 100644 index 00000000..84502315 --- /dev/null +++ b/supergameboy/libgambatte/src/video/mode3_event.cpp @@ -0,0 +1,62 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "mode3_event.h" +#include "mode0_irq.h" +#include "irq_event.h" + +Mode3Event::Mode3Event(event_queue &m3EventQueue_in, + event_queue &vEventQueue_in, + Mode0Irq &mode0Irq_in, IrqEvent &irqEvent_in) : + VideoEvent(1), + m3EventQueue(m3EventQueue_in), + vEventQueue(vEventQueue_in), + mode0Irq(mode0Irq_in), + irqEvent(irqEvent_in) +{ +} + +void Mode3Event::doEvent() { + m3EventQueue.top()->doEvent(); + + if (m3EventQueue.top()->time() == DISABLED_TIME) + m3EventQueue.pop(); + else + m3EventQueue.modify_root(m3EventQueue.top()); + + if (mode0Irq.time() != DISABLED_TIME) { + const unsigned long oldTime = mode0Irq.time(); + mode0Irq.mode3CyclesChange(); + + if (mode0Irq.time() != oldTime) { + // position in irqEventQueue should remain the same. + // The same may be possible for vEventQueue, with some precautions. + if (irqEvent.time() == oldTime) { + irqEvent.schedule(); + + if (mode0Irq.time() > oldTime) + vEventQueue.inc(&irqEvent, &irqEvent); + else + vEventQueue.dec(&irqEvent, &irqEvent); + } + + } + } + + setTime(schedule(m3EventQueue)); +} diff --git a/supergameboy/libgambatte/src/video/mode3_event.h b/supergameboy/libgambatte/src/video/mode3_event.h new file mode 100644 index 00000000..7f9aedc6 --- /dev/null +++ b/supergameboy/libgambatte/src/video/mode3_event.h @@ -0,0 +1,47 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef MODE3_EVENT_H +#define MODE3_EVENT_H + +class Mode0Irq; +class IrqEvent; + +#include "video_event.h" +#include "video_event_comparer.h" +#include "../event_queue.h" + +class Mode3Event : public VideoEvent { + event_queue &m3EventQueue; + event_queue &vEventQueue; + Mode0Irq &mode0Irq; + IrqEvent &irqEvent; + +public: + Mode3Event(event_queue &m3EventQueue_in, + event_queue &vEventQueue_in, + Mode0Irq &mode0Irq_in, IrqEvent &irqEvent_in); + + void doEvent(); + + static unsigned long schedule(const event_queue &m3EventQueue) { + return m3EventQueue.empty() ? static_cast(DISABLED_TIME) : m3EventQueue.top()->time(); + } +}; + +#endif diff --git a/supergameboy/libgambatte/src/video/sc_reader.cpp b/supergameboy/libgambatte/src/video/sc_reader.cpp new file mode 100644 index 00000000..fff2f66c --- /dev/null +++ b/supergameboy/libgambatte/src/video/sc_reader.cpp @@ -0,0 +1,62 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "sc_reader.h" + +#include "../event_queue.h" +#include "../savestate.h" + +ScReader::ScReader() : VideoEvent(2) { + setDoubleSpeed(false); + setScxSource(0); + setScySource(0); + scx_[1] = scx_[0] = scxSrc; + scy_[1] = scy_[0] = scySrc; +} + +void ScReader::doEvent() { + scy_[0] = scy_[1]; + scy_[1] = scySrc; + scx_[0] = scx_[1]; + scx_[1] = scxSrc; + + if ((scy_[0] ^ scy_[1]) | (scx_[0] ^ scx_[1])) + setTime(time() + incCycles); + else + setTime(DISABLED_TIME); + +} + +void ScReader::saveState(SaveState &state) const { + state.ppu.scx[0] = scx_[0]; + state.ppu.scx[1] = scx_[1]; + state.ppu.scy[0] = scy_[0]; + state.ppu.scy[1] = scy_[1]; +} + +void ScReader::loadState(const SaveState &state) { + scx_[0] = state.ppu.scx[0]; + scx_[1] = state.ppu.scx[1]; + scy_[0] = state.ppu.scy[0]; + scy_[1] = state.ppu.scy[1]; +} + +void ScReader::setDoubleSpeed(const bool dS_in) { + dS = dS_in; + incCycles = 8u << dS_in; +} diff --git a/supergameboy/libgambatte/src/video/sc_reader.h b/supergameboy/libgambatte/src/video/sc_reader.h new file mode 100644 index 00000000..0d7ef7d1 --- /dev/null +++ b/supergameboy/libgambatte/src/video/sc_reader.h @@ -0,0 +1,77 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef SC_READER_H +#define SC_READER_H + +class SaveState; +template class event_queue; + +#include "video_event.h" +#include "video_event_comparer.h" +#include "basic_add_event.h" + +class ScReader : public VideoEvent { + unsigned char scx_[2]; + unsigned char scy_[2]; + + unsigned char scxSrc; + unsigned char scySrc; + unsigned char incCycles; + bool dS; + +public: + ScReader(); + + void doEvent(); + + unsigned scx() const { + return /*(*/scx_[0]/* & ~0x7) | (scxSrc & 0x7)*/; + } + + unsigned scy() const { + return scy_[0]; + } + + static unsigned long schedule(const unsigned long lastUpdate, const unsigned long videoCycles, const unsigned scReadOffset, const bool dS) { + return lastUpdate + ((8u - ((videoCycles - scReadOffset) & 7)) << dS); + } + + void setDoubleSpeed(bool dS_in); + + void setScxSource(const unsigned scxSrc_in) { + scxSrc = scxSrc_in; + } + + void setScySource(const unsigned scySrc_in) { + scySrc = scySrc_in; + } + + void saveState(SaveState &state) const; + void loadState(const SaveState &state); +}; + +static inline void addEvent(event_queue &q, ScReader *const e, const unsigned long newTime) { + addUnconditionalEvent(q, e, newTime); +} + +static inline void addFixedtimeEvent(event_queue &q, ScReader *const e, const unsigned long newTime) { + addUnconditionalFixedtimeEvent(q, e, newTime); +} + +#endif diff --git a/supergameboy/libgambatte/src/video/scx_reader.cpp b/supergameboy/libgambatte/src/video/scx_reader.cpp new file mode 100644 index 00000000..6baa97f9 --- /dev/null +++ b/supergameboy/libgambatte/src/video/scx_reader.cpp @@ -0,0 +1,71 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "scx_reader.h" + +#include "../event_queue.h" +#include "m3_extra_cycles.h" +#include "../savestate.h" + +ScxReader::ScxReader(event_queue &m3EventQueue_in, +// VideoEvent &wyReader3_in, + VideoEvent &wxReader_in, + VideoEvent &weEnableChecker_in, + VideoEvent &weDisableChecker_in, + M3ExtraCycles &m3ExtraCycles) : + VideoEvent(1), + m3EventQueue(m3EventQueue_in), +// wyReader3(wyReader3_in), + wxReader(wxReader_in), + weEnableChecker(weEnableChecker_in), + weDisableChecker(weDisableChecker_in), + m3ExtraCycles(m3ExtraCycles) +{ + setDoubleSpeed(false); + setSource(0); + scxAnd7_ = src; +} + +static void rescheduleEvent(event_queue &m3EventQueue, VideoEvent& event, const unsigned long diff) { + if (event.time() != VideoEvent::DISABLED_TIME) { + event.setTime(event.time() + diff); + (diff & 0x10) ? m3EventQueue.dec(&event, &event) : m3EventQueue.inc(&event, &event); + } +} + +void ScxReader::doEvent() { + const unsigned long diff = (static_cast(src) - static_cast(scxAnd7_)) << dS; + scxAnd7_ = src; + +// rescheduleEvent(m3EventQueue, wyReader3, diff); + rescheduleEvent(m3EventQueue, wxReader, diff); + rescheduleEvent(m3EventQueue, weEnableChecker, diff); + rescheduleEvent(m3EventQueue, weDisableChecker, diff); + + m3ExtraCycles.invalidateCache(); + + setTime(DISABLED_TIME); +} + +void ScxReader::saveState(SaveState &state) const { + state.ppu.scxAnd7 = scxAnd7_; +} + +void ScxReader::loadState(const SaveState &state) { + scxAnd7_ = state.ppu.scxAnd7; +} diff --git a/supergameboy/libgambatte/src/video/scx_reader.h b/supergameboy/libgambatte/src/video/scx_reader.h new file mode 100644 index 00000000..f92f8b2b --- /dev/null +++ b/supergameboy/libgambatte/src/video/scx_reader.h @@ -0,0 +1,85 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef SCX_READER_H +#define SCX_READER_H + +template class event_queue; +class M3ExtraCycles; +class SaveState; + +#include "video_event.h" +#include "video_event_comparer.h" +#include "ly_counter.h" +#include "basic_add_event.h" + +class ScxReader : public VideoEvent { + event_queue &m3EventQueue; +// VideoEvent &wyReader3; + VideoEvent &wxReader; + VideoEvent &weEnableChecker; + VideoEvent &weDisableChecker; + M3ExtraCycles &m3ExtraCycles; + + unsigned char scxAnd7_; + unsigned char src; + bool dS; + +public: + ScxReader(event_queue &m3EventQueue_in, +// VideoEvent &wyReader3_in, + VideoEvent &wxReader_in, + VideoEvent &weEnableChecker_in, + VideoEvent &weDisableChecker_in, + M3ExtraCycles &m3ExtraCycles); + + void doEvent(); + + unsigned getSource() const { + return src; + } + + static unsigned long schedule(const LyCounter &lyCounter, const unsigned long cycleCounter) { + return lyCounter.nextLineCycle(82 + lyCounter.isDoubleSpeed() * 3, cycleCounter); + } + + unsigned scxAnd7() const { + return scxAnd7_; + } + + void setDoubleSpeed(const bool dS_in) { + dS = dS_in; + } + + void setSource(const unsigned scxSrc) { + src = scxSrc & 7; + } + + void saveState(SaveState &state) const; + void loadState(const SaveState &state); +}; + +static inline void addEvent(event_queue &q, ScxReader *const e, const unsigned long newTime) { + addUnconditionalEvent(q, e, newTime); +} + +static inline void addFixedtimeEvent(event_queue &q, ScxReader *const e, const unsigned long newTime) { + addUnconditionalFixedtimeEvent(q, e, newTime); +} + +#endif diff --git a/supergameboy/libgambatte/src/video/sprite_mapper.cpp b/supergameboy/libgambatte/src/video/sprite_mapper.cpp new file mode 100644 index 00000000..f1e9cd97 --- /dev/null +++ b/supergameboy/libgambatte/src/video/sprite_mapper.cpp @@ -0,0 +1,187 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre AamÃ¥s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "sprite_mapper.h" +#include "m3_extra_cycles.h" +#include "../insertion_sort.h" +#include + +#include + +SpriteMapper::OamReader::OamReader(const LyCounter &lyCounter, const unsigned char *oamram) +: lyCounter(lyCounter), oamram(oamram) { + reset(oamram); +} + +void SpriteMapper::OamReader::reset(const unsigned char *const oamram) { + this->oamram = oamram; + setLargeSpritesSrc(false); + lu = 0; + lastChange = 0xFF; + std::fill_n(szbuf, 40, largeSpritesSrc); + + unsigned pos = 0; + unsigned distance = 80; + + while (distance--) { + buf[pos] = oamram[((pos * 2) & ~3) | (pos & 1)]; + ++pos; + } +} + +static unsigned toPosCycles(const unsigned long cc, const LyCounter &lyCounter) { + unsigned lc = lyCounter.lineCycles(cc) + 4 - lyCounter.isDoubleSpeed() * 3u; + + if (lc >= 456) + lc -= 456; + + return lc >> 1; +} + +void SpriteMapper::OamReader::update(const unsigned long cc) { + if (cc > lu) { + if (changed()) { + const unsigned lulc = toPosCycles(lu, lyCounter); + + unsigned pos = std::min(lulc, 40u); + unsigned distance = 40; + + if ((cc - lu) >> lyCounter.isDoubleSpeed() < 456) { + const unsigned cclc = toPosCycles(cc, lyCounter); + + distance = std::min(cclc, 40u) - pos + (cclc < lulc ? 40 : 0); + } + + { + const unsigned targetDistance = lastChange - pos + (lastChange <= pos ? 40 : 0); + + if (targetDistance <= distance) { + distance = targetDistance; + lastChange = 0xFF; + } + } + + while (distance--) { + if (pos >= 40) + pos = 0; + + szbuf[pos] = largeSpritesSrc; + buf[pos * 2] = oamram[pos * 4]; + buf[pos * 2 + 1] = oamram[pos * 4 + 1]; + + ++pos; + } + } + + lu = cc; + } +} + +void SpriteMapper::OamReader::change(const unsigned long cc) { + update(cc); + lastChange = std::min(toPosCycles(lu, lyCounter), 40u); +} + +void SpriteMapper::OamReader::setStatePtrs(SaveState &state) { + state.ppu.oamReaderBuf.set(buf, sizeof buf); + state.ppu.oamReaderSzbuf.set(szbuf, sizeof(szbuf) / sizeof(bool)); +} + +void SpriteMapper::OamReader::enableDisplay(const unsigned long cc) { + std::memset(buf, 0x00, sizeof(buf)); + std::fill(szbuf, szbuf + 40, false); + lu = cc + 160; + lastChange = 40; +} + +bool SpriteMapper::OamReader::oamAccessible(const unsigned long cycleCounter, const M3ExtraCycles &m3ExtraCycles) const { + unsigned ly = lyCounter.ly(); + unsigned lc = lyCounter.lineCycles(cycleCounter) + 4 - lyCounter.isDoubleSpeed() * 3u; + + if (lc >= 456) { + lc -= 456; + ++ly; + } + + return cycleCounter < lu || ly >= 144 || lc >= 80 + 173 + m3ExtraCycles(ly); +} + +SpriteMapper::SpriteMapper(M3ExtraCycles &m3ExtraCycles, + const LyCounter &lyCounter, + const unsigned char *const oamram) : + VideoEvent(2), + m3ExtraCycles(m3ExtraCycles), + oamReader(lyCounter, oamram), + cgb(false) +{ + clearMap(); +} + +void SpriteMapper::reset(const unsigned char *const oamram, const bool cgb_in) { + oamReader.reset(oamram); + cgb = cgb_in; + clearMap(); +} + +void SpriteMapper::clearMap() { + std::memset(num, cgb ? 0 : NEED_SORTING_MASK, sizeof(num)); +} + +void SpriteMapper::mapSprites() { + clearMap(); + + for (unsigned i = 0x00; i < 0x50; i += 2) { + const unsigned spriteHeight = 8u << largeSprites(i >> 1); + const unsigned bottom_pos = posbuf()[i] - (17u - spriteHeight); + + if (bottom_pos >= 143 + spriteHeight) + continue; + + unsigned char *map = spritemap; + unsigned char *n = num; + + if (bottom_pos >= spriteHeight) { + const unsigned startly = bottom_pos + 1 - spriteHeight; + n += startly; + map += startly * 10; + } + + unsigned char *const end = num + (bottom_pos >= 143 ? 143 : bottom_pos); + + do { + if ((*n & ~NEED_SORTING_MASK) < 10) + map[(*n)++ & ~NEED_SORTING_MASK] = i; + + map += 10; + ++n; + } while (n <= end); + } + + m3ExtraCycles.invalidateCache(); +} + +void SpriteMapper::sortLine(const unsigned ly) const { + num[ly] &= ~NEED_SORTING_MASK; + insertionSort(spritemap + ly * 10, spritemap + ly * 10 + num[ly], SpxLess(posbuf())); +} + +void SpriteMapper::doEvent() { + oamReader.update(time()); + mapSprites(); + setTime(oamReader.changed() ? time() + oamReader.lyCounter.lineTime() : static_cast(DISABLED_TIME)); +} diff --git a/supergameboy/libgambatte/src/video/sprite_mapper.h b/supergameboy/libgambatte/src/video/sprite_mapper.h new file mode 100644 index 00000000..25b8090b --- /dev/null +++ b/supergameboy/libgambatte/src/video/sprite_mapper.h @@ -0,0 +1,148 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef SPRITE_MAPPER_H +#define SPRITE_MAPPER_H + +#include "video_event.h" +//#include "video_event_comparer.h" +#include "ly_counter.h" +#include "basic_add_event.h" +#include "../savestate.h" + +class M3ExtraCycles; +class SaveState; + +class SpriteMapper : public VideoEvent { + class OamReader { + unsigned char buf[80]; + bool szbuf[40]; + + public: + const LyCounter &lyCounter; + + private: + const unsigned char *oamram; + unsigned long lu; + unsigned char lastChange; + bool largeSpritesSrc; + + public: + OamReader(const LyCounter &lyCounter, const unsigned char *oamram); + void reset(const unsigned char *oamram); + void change(unsigned long cc); + void change(const unsigned char *oamram, unsigned long cc) { change(cc); this->oamram = oamram; } + bool changed() const { return lastChange != 0xFF; } + bool largeSprites(unsigned spNr) const { return szbuf[spNr]; } + const unsigned char *oam() const { return oamram; } + void resetCycleCounter(const unsigned long oldCc, const unsigned long newCc) { lu = lu + newCc - oldCc; } + void setLargeSpritesSrc(const bool src) { largeSpritesSrc = src; } + void update(unsigned long cc); + const unsigned char *spritePosBuf() const { return buf; } + void setStatePtrs(SaveState &state); + void enableDisplay(unsigned long cc); + void saveState(SaveState &state) const { state.ppu.enableDisplayM0Time = lu; } + void loadState(const SaveState &state) { lu = state.ppu.enableDisplayM0Time; } + void resetVideoState() { change(lu); } + bool oamAccessible(unsigned long cycleCounter, const M3ExtraCycles &m3ExtraCycles) const; + bool inactivePeriodAfterDisplayEnable(const unsigned long cc) const { return cc < lu; } + }; + + enum { NEED_SORTING_MASK = 0x80 }; + +public: + class SpxLess { + const unsigned char *const posbuf_plus1; + + public: + SpxLess(const unsigned char *const posbuf) : posbuf_plus1(posbuf + 1) {} + + bool operator()(const unsigned char l, const unsigned char r) const { + return posbuf_plus1[l] < posbuf_plus1[r]; + } + }; + +private: + mutable unsigned char spritemap[144*10]; + mutable unsigned char num[144]; + + M3ExtraCycles &m3ExtraCycles; + OamReader oamReader; + + bool cgb; + + void clearMap(); + void mapSprites(); + void sortLine(unsigned ly) const; + +public: + SpriteMapper(M3ExtraCycles &m3ExtraCycles, + const LyCounter &lyCounter, + const unsigned char *oamram_in); + void reset(const unsigned char *oamram, bool cgb_in); + void doEvent(); + bool isCgb() const { return cgb; } + bool largeSprites(unsigned spNr) const { return oamReader.largeSprites(spNr); } + unsigned numSprites(const unsigned ly) const { return num[ly] & ~NEED_SORTING_MASK; } + void oamChange(const unsigned long cc) { oamReader.change(cc); } + void oamChange(const unsigned char *oamram, const unsigned long cc) { oamReader.change(oamram, cc); } + const unsigned char *oamram() const { return oamReader.oam(); } + const unsigned char *posbuf() const { return oamReader.spritePosBuf(); } + void preCounterChange(const unsigned long cc) { oamReader.update(cc); } + + void resetCycleCounter(const unsigned long oldCc, const unsigned long newCc) { + oamReader.resetCycleCounter(oldCc, newCc); + } + + static unsigned long schedule(const LyCounter &lyCounter, const unsigned long cycleCounter) { + return lyCounter.nextLineCycle(80, cycleCounter); + } + + void setLargeSpritesSource(const bool src) { oamReader.setLargeSpritesSrc(src); } + + const unsigned char* sprites(const unsigned ly) const { + if (num[ly] & NEED_SORTING_MASK) + sortLine(ly); + + return spritemap + ly * 10; + } + + void setStatePtrs(SaveState &state) { oamReader.setStatePtrs(state); } + void enableDisplay(unsigned long cc) { oamReader.enableDisplay(cc); } + void saveState(SaveState &state) const { oamReader.saveState(state); } + void loadState(const SaveState &state) { oamReader.loadState(state); } + void resetVideoState() { oamReader.resetVideoState(); } + + bool oamAccessible(unsigned long cycleCounter) const { + return oamReader.oamAccessible(cycleCounter, m3ExtraCycles); + } + + bool inactivePeriodAfterDisplayEnable(const unsigned long cc) const { + return oamReader.inactivePeriodAfterDisplayEnable(cc); + } +}; + +static inline void addEvent(event_queue &q, SpriteMapper *const e, const unsigned long newTime) { + addUnconditionalEvent(q, e, newTime); +} + +static inline void addFixedtimeEvent(event_queue &q, SpriteMapper *const e, const unsigned long newTime) { + addUnconditionalFixedtimeEvent(q, e, newTime); +} + +#endif diff --git a/supergameboy/libgambatte/src/video/video_event.h b/supergameboy/libgambatte/src/video/video_event.h new file mode 100644 index 00000000..fb64d5b2 --- /dev/null +++ b/supergameboy/libgambatte/src/video/video_event.h @@ -0,0 +1,50 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef VIDEO_EVENT_H +#define VIDEO_EVENT_H + +class VideoEvent { + unsigned long time_; + const unsigned char priority_; + +public: + enum { DISABLED_TIME = 0xFFFFFFFFu }; + + VideoEvent(const unsigned priority_in) : + time_(DISABLED_TIME), + priority_(priority_in) + {} + + virtual ~VideoEvent() {} + virtual void doEvent() = 0; + + unsigned priority() const { + return priority_; + } + + unsigned long time() const { + return time_; + } + + void setTime(const unsigned long time_in) { + time_ = time_in; + } +}; + +#endif diff --git a/supergameboy/libgambatte/src/video/video_event_comparer.h b/supergameboy/libgambatte/src/video/video_event_comparer.h new file mode 100644 index 00000000..4eb25969 --- /dev/null +++ b/supergameboy/libgambatte/src/video/video_event_comparer.h @@ -0,0 +1,31 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef VIDEO_EVENT_COMPARER_H +#define VIDEO_EVENT_COMPARER_H + +#include "video_event.h" + +class VideoEventComparer { +public: + bool less(const VideoEvent *const a, const VideoEvent *const b) const { + return a->time() < b->time() || (a->time() == b->time() && a->priority() < b->priority()); + } +}; + +#endif diff --git a/supergameboy/libgambatte/src/video/we.cpp b/supergameboy/libgambatte/src/video/we.cpp new file mode 100644 index 00000000..d5e66c47 --- /dev/null +++ b/supergameboy/libgambatte/src/video/we.cpp @@ -0,0 +1,59 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "we.h" +#include "../savestate.h" + +We::WeEnableChecker::WeEnableChecker(We &we) : + VideoEvent(8), + we(we) +{} + +void We::WeEnableChecker::doEvent() { + we.set(we.src_); + + setTime(DISABLED_TIME); +} + +We::WeDisableChecker::WeDisableChecker(We &we) : + VideoEvent(9), + we(we) +{} + +void We::WeDisableChecker::doEvent() { + we.set(we.we_ & we.src_); + + setTime(DISABLED_TIME); +} + +We::We(M3ExtraCycles &m3ExtraCycles) : + m3ExtraCycles_(m3ExtraCycles), + enableChecker_(*this), + disableChecker_(*this) +{ + setSource(false); + we_ = src_; +} + +void We::saveState(SaveState &state) const { + state.ppu.lcdc = (state.ppu.lcdc & ~0x20) | we_ << 5; +} + +void We::loadState(const SaveState &state) { + we_ = state.ppu.lcdc >> 5 & 1; +} diff --git a/supergameboy/libgambatte/src/video/we.h b/supergameboy/libgambatte/src/video/we.h new file mode 100644 index 00000000..d800ca11 --- /dev/null +++ b/supergameboy/libgambatte/src/video/we.h @@ -0,0 +1,118 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef WE_H +#define WE_H + +class SaveState; + +#include "video_event.h" +#include "ly_counter.h" +#include "m3_extra_cycles.h" +#include "basic_add_event.h" + +class We { +public: + class WeEnableChecker : public VideoEvent { + We &we; + + public: + WeEnableChecker(We &we); + + void doEvent(); + + static unsigned long schedule(const unsigned scxAnd7, const unsigned wx, const LyCounter &lyCounter, const unsigned long cycleCounter) { + return lyCounter.nextLineCycle(scxAnd7 + 82 + wx + lyCounter.isDoubleSpeed() * 3, cycleCounter); + } + }; + + class WeDisableChecker : public VideoEvent { + We &we; + + public: + WeDisableChecker(We &we); + + void doEvent(); + + static unsigned long schedule(const unsigned scxAnd7, const unsigned wx, const LyCounter &lyCounter, const unsigned long cycleCounter) { + return lyCounter.nextLineCycle(scxAnd7 + 88 + wx + lyCounter.isDoubleSpeed() * 3, cycleCounter); + } + }; + + friend class WeEnableChecker; + friend class WeDisableChecker; + +private: + M3ExtraCycles &m3ExtraCycles_; + WeEnableChecker enableChecker_; + WeDisableChecker disableChecker_; + + bool we_; + bool src_; + + void set(const bool value) { + if (we_ != value) + m3ExtraCycles_.invalidateCache(); + + we_ = value; + } + +public: + We(M3ExtraCycles &m3ExtraCycles); + + WeDisableChecker& disableChecker() { + return disableChecker_; + } + + WeEnableChecker& enableChecker() { + return enableChecker_; + } + + bool getSource() const { + return src_; + } + + void setSource(const bool src) { + src_ = src; + } + + bool value() const { + return we_; + } + + void saveState(SaveState &state) const; + void loadState(const SaveState &state); +}; + +static inline void addEvent(event_queue &q, We::WeEnableChecker *const e, const unsigned long newTime) { + addUnconditionalEvent(q, e, newTime); +} + +static inline void addFixedtimeEvent(event_queue &q, We::WeEnableChecker *const e, const unsigned long newTime) { + addUnconditionalFixedtimeEvent(q, e, newTime); +} + +static inline void addEvent(event_queue &q, We::WeDisableChecker *const e, const unsigned long newTime) { + addUnconditionalEvent(q, e, newTime); +} + +static inline void addFixedtimeEvent(event_queue &q, We::WeDisableChecker *const e, const unsigned long newTime) { + addUnconditionalFixedtimeEvent(q, e, newTime); +} + +#endif diff --git a/supergameboy/libgambatte/src/video/we_master_checker.cpp b/supergameboy/libgambatte/src/video/we_master_checker.cpp new file mode 100644 index 00000000..bff81585 --- /dev/null +++ b/supergameboy/libgambatte/src/video/we_master_checker.cpp @@ -0,0 +1,58 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "we_master_checker.h" + +#include "event_queue.h" +#include "wy.h" +#include "basic_add_event.h" +#include "../savestate.h" + +WeMasterChecker::WeMasterChecker(event_queue &m3EventQueue_in, + Wy &wy_in, + const LyCounter &lyCounter_in, + M3ExtraCycles &m3ExtraCycles) : + VideoEvent(10), + m3EventQueue(m3EventQueue_in), + wy(wy_in), + lyCounter(lyCounter_in), + m3ExtraCycles(m3ExtraCycles) +{ + weMaster_ = false; +} + +void WeMasterChecker::doEvent() { +// if (wy.value() >= lyCounter.ly()) { + if (!weMaster_ /*&& src */&& wy.value() == lyCounter.ly()) { + wy.weirdAssWeMasterEnableOnWyLineCase(); + addEvent(m3EventQueue, &wy.reader4(), Wy::WyReader4::schedule(lyCounter, time())); + } + + set(true); +// } + + setTime(time() + (70224U << lyCounter.isDoubleSpeed())); +} + +void WeMasterChecker::saveState(SaveState &state) const { + state.ppu.weMaster = weMaster_; +} + +void WeMasterChecker::loadState(const SaveState &state) { + weMaster_ = state.ppu.weMaster; +} diff --git a/supergameboy/libgambatte/src/video/we_master_checker.h b/supergameboy/libgambatte/src/video/we_master_checker.h new file mode 100644 index 00000000..cf1f1209 --- /dev/null +++ b/supergameboy/libgambatte/src/video/we_master_checker.h @@ -0,0 +1,73 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef WE_MASTER_CHECKER_H +#define WE_MASTER_CHECKER_H + +template class event_queue; +class Wy; +class SaveState; + +#include "video_event.h" +#include "video_event_comparer.h" +#include "ly_counter.h" +#include "m3_extra_cycles.h" + +class WeMasterChecker : public VideoEvent { + event_queue &m3EventQueue; + Wy &wy; + const LyCounter &lyCounter; + M3ExtraCycles &m3ExtraCycles; + + bool weMaster_; + + void set(const bool value) { + if (weMaster_ != value) + m3ExtraCycles.invalidateCache(); + + weMaster_ = value; + } + +public: + WeMasterChecker(event_queue &m3EventQueue_in, + Wy &wy_in, + const LyCounter &lyCounter_in, + M3ExtraCycles &m3ExtraCycles); + + void doEvent(); + + static unsigned long schedule(const unsigned wySrc, const bool weSrc, const LyCounter &lyCounter, const unsigned long cycleCounter) { + if (weSrc && wySrc < 143) + return lyCounter.nextFrameCycle(wySrc * 456ul + 448 + lyCounter.isDoubleSpeed() * 4, cycleCounter); + else + return DISABLED_TIME; + } + + void unset() { + set(false); + } + + bool weMaster() const { + return weMaster_; + } + + void saveState(SaveState &state) const; + void loadState(const SaveState &state); +}; + +#endif diff --git a/supergameboy/libgambatte/src/video/window.h b/supergameboy/libgambatte/src/video/window.h new file mode 100644 index 00000000..790d612c --- /dev/null +++ b/supergameboy/libgambatte/src/video/window.h @@ -0,0 +1,47 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef WINDOW_H +#define WINDOW_H + +#include "we.h" +#include "we_master_checker.h" +#include "wy.h" +#include "wx_reader.h" + +struct Window { + We we; + WeMasterChecker weMasterChecker; + Wy wyReg; + WxReader wxReader; + + Window(event_queue &m3EventQueue, + const LyCounter &lyCounter, + M3ExtraCycles &m3ExtraCycles) : + we(m3ExtraCycles), + weMasterChecker(m3EventQueue, wyReg, lyCounter, m3ExtraCycles), + wyReg(lyCounter, weMasterChecker, m3ExtraCycles), + wxReader(m3EventQueue, we.enableChecker(), we.disableChecker(), m3ExtraCycles) + {} + + bool enabled(const unsigned ly) const { + return we.value() && wxReader.wx() < 0xA7 && ly >= wyReg.value() && (weMasterChecker.weMaster() || ly == wyReg.value()); + } +}; + +#endif /*WINDOW_H*/ diff --git a/supergameboy/libgambatte/src/video/wx_reader.cpp b/supergameboy/libgambatte/src/video/wx_reader.cpp new file mode 100644 index 00000000..80a6b640 --- /dev/null +++ b/supergameboy/libgambatte/src/video/wx_reader.cpp @@ -0,0 +1,65 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aam�s * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "wx_reader.h" + +#include "../event_queue.h" +#include "m3_extra_cycles.h" +#include "../savestate.h" + +WxReader::WxReader(event_queue &m3EventQueue, + VideoEvent &weEnableChecker, + VideoEvent &weDisableChecker, + M3ExtraCycles &m3ExtraCycles) : +VideoEvent(7), +m3EventQueue(m3EventQueue), +weEnableChecker(weEnableChecker), +weDisableChecker(weDisableChecker), +m3ExtraCycles(m3ExtraCycles) +{ + setDoubleSpeed(false); + setSource(0); + wx_ = src_; +} + +static void rescheduleEvent(event_queue &m3EventQueue, VideoEvent& event, const unsigned long diff) { + if (event.time() != VideoEvent::DISABLED_TIME) { + event.setTime(event.time() + diff); + (diff & 0x200) ? m3EventQueue.dec(&event, &event) : m3EventQueue.inc(&event, &event); + } +} + +void WxReader::doEvent() { + const unsigned long diff = (static_cast(src_) - static_cast(wx_)) << dS; + wx_ = src_; + + rescheduleEvent(m3EventQueue, weEnableChecker, diff); + rescheduleEvent(m3EventQueue, weDisableChecker, diff); + + m3ExtraCycles.invalidateCache(); + + setTime(DISABLED_TIME); +} + +void WxReader::saveState(SaveState &state) const { + state.ppu.wx = wx_; +} + +void WxReader::loadState(const SaveState &state) { + wx_ = state.ppu.wx; +} diff --git a/supergameboy/libgambatte/src/video/wx_reader.h b/supergameboy/libgambatte/src/video/wx_reader.h new file mode 100644 index 00000000..1681f8a4 --- /dev/null +++ b/supergameboy/libgambatte/src/video/wx_reader.h @@ -0,0 +1,83 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef WX_READER_H +#define WX_READER_H + +template class event_queue; +class M3ExtraCycles; +class SaveState; + +#include "video_event.h" +#include "video_event_comparer.h" +#include "ly_counter.h" +#include "basic_add_event.h" +#include + +class WxReader : public VideoEvent { + event_queue &m3EventQueue; + VideoEvent &weEnableChecker; + VideoEvent &weDisableChecker; + M3ExtraCycles &m3ExtraCycles; + + unsigned char wx_; + unsigned char src_; + bool dS; + +public: + WxReader(event_queue &m3EventQueue_in, + VideoEvent &weEnableChecker_in, + VideoEvent &weDisableChecker_in, + M3ExtraCycles &m3ExtraCycles); + + void doEvent(); + + unsigned getSource() const { + return src_; + } + + unsigned wx() const { + return wx_; + } + + void setDoubleSpeed(const bool dS_in) { + dS = dS_in; + } + + void setSource(const unsigned src) { + src_ = src; + } + + static unsigned long schedule(const unsigned scxAnd7, const LyCounter &lyCounter, const WxReader &wxReader, const unsigned long cycleCounter) { + return lyCounter.nextLineCycle(scxAnd7 + 82 + lyCounter.isDoubleSpeed() * 3 + std::min(wxReader.getSource(), wxReader.wx()), cycleCounter); + //setTime(lyCounter.nextLineCycle(scxAnd7 + 89 + lyCounter.isDoubleSpeed() * 3, cycleCounter)); + } + + void saveState(SaveState &state) const; + void loadState(const SaveState &state); +}; + +static inline void addEvent(event_queue &q, WxReader *const e, const unsigned long newTime) { + addUnconditionalEvent(q, e, newTime); +} + +static inline void addFixedtimeEvent(event_queue &q, WxReader *const e, const unsigned long newTime) { + addUnconditionalFixedtimeEvent(q, e, newTime); +} + +#endif diff --git a/supergameboy/libgambatte/src/video/wy.cpp b/supergameboy/libgambatte/src/video/wy.cpp new file mode 100644 index 00000000..64a5f725 --- /dev/null +++ b/supergameboy/libgambatte/src/video/wy.cpp @@ -0,0 +1,105 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "wy.h" + +#include "we_master_checker.h" +#include "scx_reader.h" +#include "../event_queue.h" +#include "../savestate.h" + +Wy::WyReader1::WyReader1(Wy &wy, const WeMasterChecker &weMasterChecker) : + VideoEvent(3), + wy(wy), + weMasterChecker(weMasterChecker) +{} + +void Wy::WyReader1::doEvent() { + if (wy.src_ >= wy.lyCounter.ly() && /*wy >= lyCounter.ly()*/ !weMasterChecker.weMaster()) + wy.set(wy.src_); + + setTime(DISABLED_TIME); +} + +Wy::WyReader2::WyReader2(Wy &wy) : + VideoEvent(4), + wy(wy) +{} + +void Wy::WyReader2::doEvent() { + if (wy.wy_ == wy.lyCounter.ly() + 1 - wy.lyCounter.isDoubleSpeed() && wy.src_ > wy.wy_) + wy.set(wy.src_); + + setTime(DISABLED_TIME); +} + +Wy::WyReader3::WyReader3(Wy &wy) : + VideoEvent(5), + wy(wy) +{} + +void Wy::WyReader3::doEvent() { + if (wy.src_ == wy.lyCounter.ly() && wy.wy_ > wy.lyCounter.ly()) + wy.set(wy.src_); + + setTime(DISABLED_TIME); +} + +unsigned long Wy::WyReader3::schedule(const unsigned wxSrc, const ScxReader &scxReader, const LyCounter &lyCounter, const unsigned long cycleCounter) { + const unsigned curLineCycle = 456 - ((lyCounter.time() - cycleCounter) >> lyCounter.isDoubleSpeed()); + const unsigned baseTime = 78 + lyCounter.isDoubleSpeed() * 6 + wxSrc; + + if (curLineCycle >= 82U + lyCounter.isDoubleSpeed() * 3) { + if (baseTime + scxReader.scxAnd7() > curLineCycle) + return lyCounter.time() + ((baseTime + scxReader.scxAnd7()) << lyCounter.isDoubleSpeed()) - lyCounter.lineTime(); + else + return lyCounter.time() + ((baseTime + scxReader.getSource()) << lyCounter.isDoubleSpeed()); + } else + return lyCounter.nextLineCycle(baseTime + scxReader.getSource(), cycleCounter); +} + +Wy::WyReader4::WyReader4(Wy &wy) : + VideoEvent(6), + wy(wy) +{} + +void Wy::WyReader4::doEvent() { + wy.set(wy.src_); + + setTime(DISABLED_TIME); +} + +Wy::Wy(const LyCounter &lyCounter, const WeMasterChecker &weMasterChecker, M3ExtraCycles &m3ExtraCycles) : + lyCounter(lyCounter), + m3ExtraCycles(m3ExtraCycles), + reader1_(*this, weMasterChecker), + reader2_(*this), + reader3_(*this), + reader4_(*this) +{ + setSource(0); + wy_ = src_; +} + +void Wy::saveState(SaveState &state) const { + state.ppu.wy = wy_; +} + +void Wy::loadState(const SaveState &state) { + wy_ = state.ppu.wy; +} diff --git a/supergameboy/libgambatte/src/video/wy.h b/supergameboy/libgambatte/src/video/wy.h new file mode 100644 index 00000000..2a1033f9 --- /dev/null +++ b/supergameboy/libgambatte/src/video/wy.h @@ -0,0 +1,187 @@ +/*************************************************************************** + * Copyright (C) 2007 by Sindre Aamås * + * aamas@stud.ntnu.no * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License version 2 for more details. * + * * + * You should have received a copy of the GNU General Public License * + * version 2 along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef WY_H +#define WY_H + +class WeMasterChecker; +class ScxReader; +template class event_queue; +class SaveState; + +#include "video_event.h" +#include "video_event_comparer.h" +#include "ly_counter.h" +#include "m3_extra_cycles.h" +#include "basic_add_event.h" + +class Wy { +public: + class WyReader1 : public VideoEvent { + Wy &wy; + const WeMasterChecker &weMasterChecker; + + public: + WyReader1(Wy &wy, const WeMasterChecker &weMasterChecker); + + void doEvent(); + + static unsigned long schedule(const LyCounter &lyCounter, const unsigned long cycleCounter) { + return lyCounter.nextLineCycle(448 + lyCounter.isDoubleSpeed() * 4, cycleCounter); + } + }; + + class WyReader2 : public VideoEvent { + Wy &wy; + + public: + WyReader2(Wy &wy); + + void doEvent(); + + static unsigned long schedule(const LyCounter &lyCounter, const unsigned long cycleCounter) { + return lyCounter.isDoubleSpeed() ? lyCounter.time() : lyCounter.nextLineCycle(452, cycleCounter); + } + }; + + class WyReader3 : public VideoEvent { + Wy &wy; + + public: + WyReader3(Wy &wy); + + void doEvent(); + static unsigned long schedule(unsigned wxSrc, const ScxReader &scxReader, const LyCounter &lyCounter, unsigned long cycleCounter); + + //void schedule(const unsigned scxAnd7, const LyCounter &lyCounter, const unsigned cycleCounter) { + // setTime(lyCounter.nextLineCycle(scxAnd7 + 85 + lyCounter.isDoubleSpeed() * 6, cycleCounter)); + //} + }; + + class WyReader4 : public VideoEvent { + Wy &wy; + + public: + WyReader4(Wy &wy); + + void doEvent(); + + static unsigned long schedule(const LyCounter &lyCounter, const unsigned long cycleCounter) { + return lyCounter.nextFrameCycle(lyCounter.isDoubleSpeed() * 4, cycleCounter); + } + }; + + friend class WyReader1; + friend class WyReader2; + friend class WyReader3; + friend class WyReader4; + +private: + const LyCounter &lyCounter; + M3ExtraCycles &m3ExtraCycles; + WyReader1 reader1_; + WyReader2 reader2_; + WyReader3 reader3_; + WyReader4 reader4_; + + unsigned char wy_; + unsigned char src_; + + void set(const unsigned char value) { + if (wy_ != value) + m3ExtraCycles.invalidateCache(); + + wy_ = value; + } + +public: + Wy(const LyCounter &lyCounter, const WeMasterChecker &weMasterChecker, M3ExtraCycles &m3ExtraCycles); + + WyReader1& reader1() { + return reader1_; + } + + WyReader2& reader2() { + return reader2_; + } + + WyReader3& reader3() { + return reader3_; + } + + WyReader4& reader4() { + return reader4_; + } + + unsigned getSource() const { + return src_; + } + + void setSource(const unsigned src) { + src_ = src; + } + + //void setValue(const unsigned val) { + // wy_ = val; + //} + + unsigned value() const { + return wy_; + } + + void weirdAssWeMasterEnableOnWyLineCase() { + set(wy_ + 1); + } + + void saveState(SaveState &state) const; + void loadState(const SaveState &state); +}; + +static inline void addEvent(event_queue &q, Wy::WyReader1 *const e, const unsigned long newTime) { + addUnconditionalEvent(q, e, newTime); +} + +static inline void addFixedtimeEvent(event_queue &q, Wy::WyReader1 *const e, const unsigned long newTime) { + addUnconditionalFixedtimeEvent(q, e, newTime); +} + +static inline void addEvent(event_queue &q, Wy::WyReader2 *const e, const unsigned long newTime) { + addUnconditionalEvent(q, e, newTime); +} + +static inline void addFixedtimeEvent(event_queue &q, Wy::WyReader2 *const e, const unsigned long newTime) { + addUnconditionalFixedtimeEvent(q, e, newTime); +} + +static inline void addEvent(event_queue &q, Wy::WyReader3 *const e, const unsigned long newTime) { + addUnconditionalEvent(q, e, newTime); +} + +static inline void addFixedtimeEvent(event_queue &q, Wy::WyReader3 *const e, const unsigned long newTime) { + addUnconditionalFixedtimeEvent(q, e, newTime); +} + +static inline void addEvent(event_queue &q, Wy::WyReader4 *const e, const unsigned long newTime) { + addUnconditionalEvent(q, e, newTime); +} + +static inline void addFixedtimeEvent(event_queue &q, Wy::WyReader4 *const e, const unsigned long newTime) { + addUnconditionalFixedtimeEvent(q, e, newTime); +} + +#endif diff --git a/supergameboy/nall/Makefile b/supergameboy/nall/Makefile new file mode 100644 index 00000000..82dc00a5 --- /dev/null +++ b/supergameboy/nall/Makefile @@ -0,0 +1,109 @@ +# Makefile +# author: byuu +# license: public domain + +[A-Z] = A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +[a-z] = a b c d e f g h i j k l m n o p q r s t u v w x y z +[0-9] = 0 1 2 3 4 5 6 7 8 9 +[markup] = ` ~ ! @ \# $$ % ^ & * ( ) - _ = + [ { ] } \ | ; : ' " , < . > / ? +[all] = $([A-Z]) $([a-z]) $([0-9]) $([markup]) +[space] := +[space] += + +##### +# platform detection +##### + +ifeq ($(platform),) + uname := $(shell uname -a) + ifeq ($(uname),) + platform := win + delete = del $(subst /,\,$1) + else ifneq ($(findstring Darwin,$(uname)),) + platform := osx + delete = rm -f $1 + else + platform := x + delete = rm -f $1 + endif +endif + +ifeq ($(compiler),) + compiler := gcc +endif + +ifeq ($(prefix),) + prefix := /usr/local +endif + +##### +# function rwildcard(directory, pattern) +##### +rwildcard = \ + $(strip \ + $(filter $(if $2,$2,%), \ + $(foreach f, \ + $(wildcard $1*), \ + $(eval t = $(call rwildcard,$f/)) \ + $(if $t,$t,$f) \ + ) \ + ) \ + ) + +##### +# function strtr(source, from, to) +##### +strtr = \ + $(eval __temp := $1) \ + $(strip \ + $(foreach c, \ + $(join $(addsuffix :,$2),$3), \ + $(eval __temp := \ + $(subst $(word 1,$(subst :, ,$c)),$(word 2,$(subst :, ,$c)),$(__temp)) \ + ) \ + ) \ + $(__temp) \ + ) + +##### +# function strupper(source) +##### +strupper = $(call strtr,$1,$([a-z]),$([A-Z])) + +##### +# function strlower(source) +##### +strlower = $(call strtr,$1,$([A-Z]),$([a-z])) + +##### +# function strlen(source) +##### +strlen = \ + $(eval __temp := $(subst $([space]),_,$1)) \ + $(words \ + $(strip \ + $(foreach c, \ + $([all]), \ + $(eval __temp := \ + $(subst $c,$c ,$(__temp)) \ + ) \ + ) \ + $(__temp) \ + ) \ + ) + +##### +# function streq(source) +##### +streq = $(if $(filter-out xx,x$(subst $1,,$2)$(subst $2,,$1)x),,1) + +##### +# function strne(source) +##### +strne = $(if $(filter-out xx,x$(subst $1,,$2)$(subst $2,,$1)x),1,) + +##### +# function ifhas(needle, haystack, true, false) +##### +ifhas = $(if $(findstring $1,$2),$3,$4) + diff --git a/supergameboy/nall/Makefile-qt b/supergameboy/nall/Makefile-qt new file mode 100644 index 00000000..7cf21c9e --- /dev/null +++ b/supergameboy/nall/Makefile-qt @@ -0,0 +1,55 @@ +# requires nall/Makefile + +# exports the following symbols: +# $(moc) -- meta-object compiler +# $(rcc) -- resource compiler +# $(qtinc) -- includes for compiling +# $(qtlib) -- libraries for linking + +ifeq ($(moc),) +moc := moc +endif + +ifeq ($(rcc),) +rcc := rcc +endif + +ifeq ($(platform),x) + qtinc := `pkg-config --cflags QtCore QtGui` + qtlib := `pkg-config --libs QtCore QtGui` +else ifeq ($(platform),osx) + qtinc := -I/Library/Frameworks/QtCore.framework/Versions/4/Headers + qtinc += -I/Library/Frameworks/QtGui.framework/Versions/4/Headers + qtinc += -I/Library/Frameworks/QtOpenGL.framework/Versions/4/Headers + + qtlib := -L/Library/Frameworks + qtlib += -framework QtCore + qtlib += -framework QtGui + qtlib += -framework QtOpenGL + qtlib += -framework Carbon + qtlib += -framework Cocoa + qtlib += -framework OpenGL + qtlib += -framework AppKit + qtlib += -framework ApplicationServices +else ifeq ($(platform),win) + ifeq ($(qtpath),) + # find Qt install directory from PATH environment variable + qtpath := $(foreach path,$(subst ;, ,$(PATH)),$(if $(wildcard $(path)/$(moc).exe),$(path))) + qtpath := $(strip $(qtpath)) + qtpath := $(subst \,/,$(qtpath)) + qtpath := $(patsubst %/bin,%,$(qtpath)) + endif + + qtinc := -I$(qtpath)/include + qtinc += -I$(qtpath)/include/QtCore + qtinc += -I$(qtpath)/include/QtGui + + qtlib := -L$(qtpath)/lib + qtlib += -L$(qtpath)/plugins/imageformats + + qtlib += -lmingw32 -lqtmain -lQtGui4 -lcomdlg32 -loleaut32 -limm32 -lwinmm + qtlib += -lwinspool -lmsimg32 -lQtCore4 -lole32 -ladvapi32 -lws2_32 -luuid -lgdi32 + + # optional image-file support: + # qtlib += -lqjpeg -lqmng +endif diff --git a/supergameboy/nall/algorithm.hpp b/supergameboy/nall/algorithm.hpp new file mode 100644 index 00000000..98b39528 --- /dev/null +++ b/supergameboy/nall/algorithm.hpp @@ -0,0 +1,23 @@ +#ifndef NALL_ALGORITHM_HPP +#define NALL_ALGORITHM_HPP + +#undef min +#undef max + +namespace nall { + template T min(const T& t, const U& u) { + return t < u ? t : u; + } + + template T max(const T& t, const U& u) { + return t > u ? t : u; + } + + //pseudo-random number generator + inline unsigned prng() { + static unsigned n = 0; + return n = (n >> 1) ^ (((n & 1) - 1) & 0xedb88320); + } +} + +#endif diff --git a/supergameboy/nall/any.hpp b/supergameboy/nall/any.hpp new file mode 100644 index 00000000..9689af13 --- /dev/null +++ b/supergameboy/nall/any.hpp @@ -0,0 +1,74 @@ +#ifndef NALL_ANY_HPP +#define NALL_ANY_HPP + +#include +#include +#include + +namespace nall { + class any { + public: + bool empty() const { return container; } + const std::type_info& type() const { return container ? container->type() : typeid(void); } + + template any& operator=(const T& value_) { + typedef typename static_if< + is_array::value, + typename remove_extent::type>::type*, + T + >::type auto_t; + + if(type() == typeid(auto_t)) { + static_cast*>(container)->value = (auto_t)value_; + } else { + if(container) delete container; + container = new holder((auto_t)value_); + } + + return *this; + } + + any() : container(0) {} + template any(const T& value_) : container(0) { operator=(value_); } + + private: + struct placeholder { + virtual const std::type_info& type() const = 0; + } *container; + + template struct holder : placeholder { + T value; + const std::type_info& type() const { return typeid(T); } + holder(const T& value_) : value(value_) {} + }; + + template friend T any_cast(any&); + template friend T any_cast(const any&); + template friend T* any_cast(any*); + template friend const T* any_cast(const any*); + }; + + template T any_cast(any &value) { + typedef typename remove_reference::type nonref; + if(value.type() != typeid(nonref)) throw; + return static_cast*>(value.container)->value; + } + + template T any_cast(const any &value) { + typedef const typename remove_reference::type nonref; + if(value.type() != typeid(nonref)) throw; + return static_cast*>(value.container)->value; + } + + template T* any_cast(any *value) { + if(!value || value->type() != typeid(T)) return 0; + return &static_cast*>(value->container)->value; + } + + template const T* any_cast(const any *value) { + if(!value || value->type() != typeid(T)) return 0; + return &static_cast*>(value->container)->value; + } +} + +#endif diff --git a/supergameboy/nall/array.hpp b/supergameboy/nall/array.hpp new file mode 100644 index 00000000..50a03f66 --- /dev/null +++ b/supergameboy/nall/array.hpp @@ -0,0 +1,94 @@ +#ifndef NALL_ARRAY_HPP +#define NALL_ARRAY_HPP + +#include +#include +#include + +namespace nall { + //dynamic vector array + //neither constructor nor destructor is ever invoked; + //thus, this should only be used for POD objects. + template class array { + protected: + T *pool; + unsigned poolsize, buffersize; + + public: + unsigned size() const { return buffersize; } + unsigned capacity() const { return poolsize; } + + void reset() { + if(pool) free(pool); + pool = 0; + poolsize = 0; + buffersize = 0; + } + + void reserve(unsigned newsize) { + if(newsize == poolsize) return; + + pool = (T*)realloc(pool, newsize * sizeof(T)); + poolsize = newsize; + buffersize = min(buffersize, newsize); + } + + void resize(unsigned newsize) { + if(newsize > poolsize) reserve(bit::round(newsize)); //round reserve size up to power of 2 + buffersize = newsize; + } + + T* get(unsigned minsize = 0) { + if(minsize > buffersize) resize(minsize); + if(minsize > buffersize) throw "array[] out of bounds"; + return pool; + } + + void add(const T data) { + operator[](buffersize) = data; + } + + signed find(const T data) { + for(unsigned i = 0; i < size(); i++) if(pool[i] == data) return i; + return -1; //not found + } + + void clear() { + memset(pool, 0, buffersize * sizeof(T)); + } + + array() { + pool = 0; + poolsize = 0; + buffersize = 0; + } + + ~array() { reset(); } + + array(const array &source) : pool(0) { + operator=(source); + } + + array& operator=(const array &source) { + if(pool) free(pool); + buffersize = source.buffersize; + poolsize = source.poolsize; + pool = (T*)malloc(sizeof(T) * poolsize); //allocate entire pool size, + memcpy(pool, source.pool, sizeof(T) * buffersize); //... but only copy used pool objects + return *this; + } + + inline T& operator[](unsigned index) { + if(index >= buffersize) resize(index + 1); + if(index >= buffersize) throw "array[] out of bounds"; + return pool[index]; + } + + inline const T& operator[](unsigned index) const { + if(index >= buffersize) throw "array[] out of bounds"; + return pool[index]; + } + }; +} + +#endif diff --git a/supergameboy/nall/base64.hpp b/supergameboy/nall/base64.hpp new file mode 100644 index 00000000..e41c87b7 --- /dev/null +++ b/supergameboy/nall/base64.hpp @@ -0,0 +1,90 @@ +#ifndef NALL_BASE64_HPP +#define NALL_BASE64_HPP + +#include +#include + +namespace nall { + class base64 { + public: + static bool encode(char *&output, const uint8_t* input, unsigned inlength) { + output = new char[inlength * 8 / 6 + 6](); + + unsigned i = 0, o = 0; + while(i < inlength) { + switch(i % 3) { + case 0: { + output[o++] = enc(input[i] >> 2); + output[o] = enc((input[i] & 3) << 4); + } break; + + case 1: { + uint8_t prev = dec(output[o]); + output[o++] = enc(prev + (input[i] >> 4)); + output[o] = enc((input[i] & 15) << 2); + } break; + + case 2: { + uint8_t prev = dec(output[o]); + output[o++] = enc(prev + (input[i] >> 6)); + output[o++] = enc(input[i] & 63); + } break; + } + + i++; + } + + return true; + } + + static bool decode(uint8_t *&output, unsigned &outlength, const char *input) { + unsigned inlength = strlen(input), infix = 0; + output = new uint8_t[inlength](); + + unsigned i = 0, o = 0; + while(i < inlength) { + uint8_t x = dec(input[i]); + + switch(i++ & 3) { + case 0: { + output[o] = x << 2; + } break; + + case 1: { + output[o++] |= x >> 4; + output[o] = (x & 15) << 4; + } break; + + case 2: { + output[o++] |= x >> 2; + output[o] = (x & 3) << 6; + } break; + + case 3: { + output[o++] |= x; + } break; + } + } + + outlength = o; + return true; + } + + private: + static char enc(uint8_t n) { + static char lookup_table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; + return lookup_table[n & 63]; + } + + static uint8_t dec(char n) { + if(n >= 'A' && n <= 'Z') return n - 'A'; + if(n >= 'a' && n <= 'z') return n - 'a' + 26; + if(n >= '0' && n <= '9') return n - '0' + 52; + if(n == '-') return 62; + if(n == '_') return 63; + return 0; + } + }; +} + +#endif diff --git a/supergameboy/nall/bit.hpp b/supergameboy/nall/bit.hpp new file mode 100644 index 00000000..169fc144 --- /dev/null +++ b/supergameboy/nall/bit.hpp @@ -0,0 +1,51 @@ +#ifndef NALL_BIT_HPP +#define NALL_BIT_HPP + +namespace nall { + template inline unsigned uclamp(const unsigned x) { + enum { y = (1U << bits) - 1 }; + return y + ((x - y) & -(x < y)); //min(x, y); + } + + template inline unsigned uclip(const unsigned x) { + enum { m = (1U << bits) - 1 }; + return (x & m); + } + + template inline signed sclamp(const signed x) { + enum { b = 1U << (bits - 1), m = (1U << (bits - 1)) - 1 }; + return (x > m) ? m : (x < -b) ? -b : x; + } + + template inline signed sclip(const signed x) { + enum { b = 1U << (bits - 1), m = (1U << bits) - 1 }; + return ((x & m) ^ b) - b; + } + + namespace bit { + //lowest(0b1110) == 0b0010 + template inline T lowest(const T x) { + return x & -x; + } + + //clear_lowest(0b1110) == 0b1100 + template inline T clear_lowest(const T x) { + return x & (x - 1); + } + + //set_lowest(0b0101) == 0b0111 + template inline T set_lowest(const T x) { + return x | (x + 1); + } + + //round up to next highest single bit: + //round(15) == 16, round(16) == 16, round(17) == 32 + inline unsigned round(unsigned x) { + if((x & (x - 1)) == 0) return x; + while(x & (x - 1)) x &= x - 1; + return x << 1; + } + } +} + +#endif diff --git a/supergameboy/nall/config.hpp b/supergameboy/nall/config.hpp new file mode 100644 index 00000000..10494e65 --- /dev/null +++ b/supergameboy/nall/config.hpp @@ -0,0 +1,124 @@ +#ifndef NALL_CONFIG_HPP +#define NALL_CONFIG_HPP + +#include +#include +#include + +namespace nall { + namespace configuration_traits { + template struct is_boolean { enum { value = false }; }; + template<> struct is_boolean { enum { value = true }; }; + + template struct is_signed { enum { value = false }; }; + template<> struct is_signed { enum { value = true }; }; + + template struct is_unsigned { enum { value = false }; }; + template<> struct is_unsigned { enum { value = true }; }; + + template struct is_double { enum { value = false }; }; + template<> struct is_double { enum { value = true }; }; + + template struct is_string { enum { value = false }; }; + template<> struct is_string { enum { value = true }; }; + } + + class configuration { + public: + enum type_t { boolean_t, signed_t, unsigned_t, double_t, string_t, unknown_t }; + struct item_t { + uintptr_t data; + string name; + string desc; + type_t type; + + string get() const { + switch(type) { + case boolean_t: return string() << *(bool*)data; + case signed_t: return string() << *(signed*)data; + case unsigned_t: return string() << *(unsigned*)data; + case double_t: return string() << *(double*)data; + case string_t: return string() << "\"" << *(string*)data << "\""; + } + return "???"; + } + + void set(string s) { + switch(type) { + case boolean_t: *(bool*)data = (s == "true"); break; + case signed_t: *(signed*)data = strsigned(s); break; + case unsigned_t: *(unsigned*)data = strunsigned(s); break; + case double_t: *(double*)data = strdouble(s); break; + case string_t: trim(s, "\""); *(string*)data = s; break; + } + } + }; + vector list; + + template + void attach(T &data, const char *name, const char *desc = "") { + unsigned n = list.size(); + list[n].data = (uintptr_t)&data; + list[n].name = name; + list[n].desc = desc; + + if(configuration_traits::is_boolean::value) list[n].type = boolean_t; + else if(configuration_traits::is_signed::value) list[n].type = signed_t; + else if(configuration_traits::is_unsigned::value) list[n].type = unsigned_t; + else if(configuration_traits::is_double::value) list[n].type = double_t; + else if(configuration_traits::is_string::value) list[n].type = string_t; + else list[n].type = unknown_t; + } + + virtual bool load(const char *filename) { + string data; + if(data.readfile(filename) == true) { + data.replace("\r", ""); + lstring line; + line.split("\n", data); + + for(unsigned i = 0; i < line.size(); i++) { + int position = qstrpos(line[i], "#"); + if(position >= 0) line[i][position] = 0; + if(qstrpos(line[i], " = ") < 0) continue; + + lstring part; + part.qsplit(" = ", line[i]); + trim(part[0]); + trim(part[1]); + + for(unsigned n = 0; n < list.size(); n++) { + if(part[0] == list[n].name) { + list[n].set(part[1]); + break; + } + } + } + + return true; + } else { + return false; + } + } + + virtual bool save(const char *filename) const { + file fp; + if(fp.open(filename, file::mode_write)) { + for(unsigned i = 0; i < list.size(); i++) { + string output; + output << list[i].name << " = " << list[i].get(); + if(list[i].desc != "") output << " # " << list[i].desc; + output << "\r\n"; + fp.print(output); + } + + fp.close(); + return true; + } else { + return false; + } + } + }; +} + +#endif diff --git a/supergameboy/nall/crc32.hpp b/supergameboy/nall/crc32.hpp new file mode 100644 index 00000000..ad36fbf6 --- /dev/null +++ b/supergameboy/nall/crc32.hpp @@ -0,0 +1,66 @@ +#ifndef NALL_CRC32_HPP +#define NALL_CRC32_HPP + +#include + +namespace nall { + const uint32_t crc32_table[256] = { + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, + 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, + 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, + 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, + 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, + 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, + 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, + 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, + 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, + 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, + 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, + 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, + 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, + 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, + 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, + 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, + 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, + 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, + 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, + 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, + 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, + 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, + 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, + 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, + 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, + 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, + 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, + 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, + 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, + 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, + 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, + 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, + 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, + 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, + 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d + }; + + inline uint32_t crc32_adjust(uint32_t crc32, uint8_t input) { + return ((crc32 >> 8) & 0x00ffffff) ^ crc32_table[(crc32 ^ input) & 0xff]; + } + + inline uint32_t crc32_calculate(const uint8_t *data, unsigned length) { + uint32_t crc32 = ~0; + for(unsigned i = 0; i < length; i++) { + crc32 = crc32_adjust(crc32, data[i]); + } + return ~crc32; + } +} + +#endif diff --git a/supergameboy/nall/detect.hpp b/supergameboy/nall/detect.hpp new file mode 100644 index 00000000..b4991aaf --- /dev/null +++ b/supergameboy/nall/detect.hpp @@ -0,0 +1,30 @@ +#ifndef NALL_DETECT_HPP +#define NALL_DETECT_HPP + +/* Compiler detection */ + +#if defined(__GNUC__) + #define COMPILER_GCC +#elif defined(_MSC_VER) + #define COMPILER_VISUALC +#endif + +/* Platform detection */ + +#if defined(_WIN32) + #define PLATFORM_WIN +#elif defined(__APPLE__) + #define PLATFORM_OSX +#elif defined(linux) || defined(__sun__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) + #define PLATFORM_X +#endif + +/* Endian detection */ + +#if defined(__i386__) || defined(__amd64__) || defined(_M_IX86) || defined(_M_AMD64) + #define ARCH_LSB +#elif defined(__powerpc__) || defined(_M_PPC) || defined(__BIG_ENDIAN__) + #define ARCH_MSB +#endif + +#endif diff --git a/supergameboy/nall/dictionary.hpp b/supergameboy/nall/dictionary.hpp new file mode 100644 index 00000000..35128c2f --- /dev/null +++ b/supergameboy/nall/dictionary.hpp @@ -0,0 +1,73 @@ +#ifndef NALL_DICTIONARY_HPP +#define NALL_DICTIONARY_HPP + +#include +#include +#include + +namespace nall { + class dictionary : noncopyable { + public: + string operator[](const char *input) { + for(unsigned i = 0; i < index_input.size(); i++) { + if(index_input[i] == input) return index_output[i]; + } + + //no match, use input; remove input identifier, if one exists + if(strbegin(input, "{{")) { + int pos = strpos(input, "}}"); + if(pos >= 0) { + string temp = substr(input, pos + 2); + return temp; + } + } + + return input; + } + + bool import(const char *filename) { + string data; + if(data.readfile(filename) == false) return false; + ltrim_once(data, "\xef\xbb\xbf"); //remove UTF-8 marker, if it exists + data.replace("\r", ""); + + lstring line; + line.split("\n", data); + for(unsigned i = 0; i < line.size(); i++) { + lstring part; + //format: "Input" = "Output" + part.qsplit("=", line[i]); + if(part.size() != 2) continue; + + //remove whitespace + trim(part[0]); + trim(part[1]); + + //remove quotes + trim_once(part[0], "\""); + trim_once(part[1], "\""); + + unsigned n = index_input.size(); + index_input[n] = part[0]; + index_output[n] = part[1]; + } + + return true; + } + + void reset() { + index_input.reset(); + index_output.reset(); + } + + ~dictionary() { + reset(); + } + + protected: + lstring index_input; + lstring index_output; + }; +} + +#endif diff --git a/supergameboy/nall/dl.hpp b/supergameboy/nall/dl.hpp new file mode 100644 index 00000000..4048a50a --- /dev/null +++ b/supergameboy/nall/dl.hpp @@ -0,0 +1,88 @@ +#ifndef NALL_DL_HPP +#define NALL_DL_HPP + +//dynamic linking support + +#include +#include +#include +#include + +#if defined(PLATFORM_X) + #include +#elif defined(PLATFORM_WIN) + #include + #include +#endif + +namespace nall { + struct library : noncopyable { + bool opened() const { return handle; } + bool open(const char*); + void* sym(const char*); + void close(); + + library() : handle(0) {} + ~library() { close(); } + + private: + uintptr_t handle; + }; + + #if defined(PLATFORM_X) + inline bool library::open(const char *name) { + if(handle) close(); + char *t = new char[strlen(name) + 256]; + strcpy(t, "lib"); + strcat(t, name); + strcat(t, ".so"); + handle = (uintptr_t)dlopen(t, RTLD_LAZY); + if(!handle) { + strcpy(t, "/usr/local/lib/lib"); + strcat(t, name); + strcat(t, ".so"); + handle = (uintptr_t)dlopen(t, RTLD_LAZY); + } + delete[] t; + return handle; + } + + inline void* library::sym(const char *name) { + if(!handle) return 0; + return dlsym((void*)handle, name); + } + + inline void library::close() { + if(!handle) return; + dlclose((void*)handle); + handle = 0; + } + #elif defined(PLATFORM_WIN) + inline bool library::open(const char *name) { + if(handle) close(); + char *t = new char[strlen(name) + 8]; + strcpy(t, name); + strcat(t, ".dll"); + handle = (uintptr_t)LoadLibraryW(utf16_t(t)); + delete[] t; + return handle; + } + + inline void* library::sym(const char *name) { + if(!handle) return 0; + return (void*)GetProcAddress((HMODULE)handle, name); + } + + inline void library::close() { + if(!handle) return; + FreeLibrary((HMODULE)handle); + handle = 0; + } + #else + inline bool library::open(const char*) { return false; } + inline void* library::sym(const char*) { return 0; } + inline void library::close() {} + #endif +}; + +#endif diff --git a/supergameboy/nall/endian.hpp b/supergameboy/nall/endian.hpp new file mode 100644 index 00000000..40d15633 --- /dev/null +++ b/supergameboy/nall/endian.hpp @@ -0,0 +1,38 @@ +#ifndef NALL_ENDIAN_HPP +#define NALL_ENDIAN_HPP + +#if !defined(ARCH_MSB) + //little-endian: uint8_t[] { 0x01, 0x02, 0x03, 0x04 } == 0x04030201 + #define order_lsb2(a,b) a,b + #define order_lsb3(a,b,c) a,b,c + #define order_lsb4(a,b,c,d) a,b,c,d + #define order_lsb5(a,b,c,d,e) a,b,c,d,e + #define order_lsb6(a,b,c,d,e,f) a,b,c,d,e,f + #define order_lsb7(a,b,c,d,e,f,g) a,b,c,d,e,f,g + #define order_lsb8(a,b,c,d,e,f,g,h) a,b,c,d,e,f,g,h + #define order_msb2(a,b) b,a + #define order_msb3(a,b,c) c,b,a + #define order_msb4(a,b,c,d) d,c,b,a + #define order_msb5(a,b,c,d,e) e,d,c,b,a + #define order_msb6(a,b,c,d,e,f) f,e,d,c,b,a + #define order_msb7(a,b,c,d,e,f,g) g,f,e,d,c,b,a + #define order_msb8(a,b,c,d,e,f,g,h) h,g,f,e,d,c,b,a +#else + //big-endian: uint8_t[] { 0x01, 0x02, 0x03, 0x04 } == 0x01020304 + #define order_lsb2(a,b) b,a + #define order_lsb3(a,b,c) c,b,a + #define order_lsb4(a,b,c,d) d,c,b,a + #define order_lsb5(a,b,c,d,e) e,d,c,b,a + #define order_lsb6(a,b,c,d,e,f) f,e,d,c,b,a + #define order_lsb7(a,b,c,d,e,f,g) g,f,e,d,c,b,a + #define order_lsb8(a,b,c,d,e,f,g,h) h,g,f,e,d,c,b,a + #define order_msb2(a,b) a,b + #define order_msb3(a,b,c) a,b,c + #define order_msb4(a,b,c,d) a,b,c,d + #define order_msb5(a,b,c,d,e) a,b,c,d,e + #define order_msb6(a,b,c,d,e,f) a,b,c,d,e,f + #define order_msb7(a,b,c,d,e,f,g) a,b,c,d,e,f,g + #define order_msb8(a,b,c,d,e,f,g,h) a,b,c,d,e,f,g,h +#endif + +#endif diff --git a/supergameboy/nall/file.hpp b/supergameboy/nall/file.hpp new file mode 100644 index 00000000..29be589c --- /dev/null +++ b/supergameboy/nall/file.hpp @@ -0,0 +1,256 @@ +#ifndef NALL_FILE_HPP +#define NALL_FILE_HPP + +#include +#include + +#if !defined(_WIN32) + #include +#else + #include +#endif + +#include +#include +#include + +namespace nall { + inline FILE* fopen_utf8(const char *utf8_filename, const char *mode) { + #if !defined(_WIN32) + return fopen(utf8_filename, mode); + #else + return _wfopen(utf16_t(utf8_filename), utf16_t(mode)); + #endif + } + + class file : noncopyable { + public: + enum FileMode { mode_read, mode_write, mode_readwrite, mode_writeread }; + enum SeekMode { seek_absolute, seek_relative }; + + uint8_t read() { + if(!fp) return 0xff; //file not open + if(file_mode == mode_write) return 0xff; //reads not permitted + if(file_offset >= file_size) return 0xff; //cannot read past end of file + buffer_sync(); + return buffer[(file_offset++) & buffer_mask]; + } + + uintmax_t readl(unsigned length = 1) { + uintmax_t data = 0; + for(int i = 0; i < length; i++) { + data |= (uintmax_t)read() << (i << 3); + } + return data; + } + + uintmax_t readm(unsigned length = 1) { + uintmax_t data = 0; + while(length--) { + data <<= 8; + data |= read(); + } + return data; + } + + void read(uint8_t *buffer, unsigned length) { + while(length--) *buffer++ = read(); + } + + void write(uint8_t data) { + if(!fp) return; //file not open + if(file_mode == mode_read) return; //writes not permitted + buffer_sync(); + buffer[(file_offset++) & buffer_mask] = data; + buffer_dirty = true; + if(file_offset > file_size) file_size = file_offset; + } + + void writel(uintmax_t data, unsigned length = 1) { + while(length--) { + write(data); + data >>= 8; + } + } + + void writem(uintmax_t data, unsigned length = 1) { + for(int i = length - 1; i >= 0; i--) { + write(data >> (i << 3)); + } + } + + void write(const uint8_t *buffer, unsigned length) { + while(length--) write(*buffer++); + } + + void print(const char *string) { + if(!string) return; + while(*string) write(*string++); + } + + void flush() { + buffer_flush(); + fflush(fp); + } + + void seek(int offset, SeekMode mode = seek_absolute) { + if(!fp) return; //file not open + buffer_flush(); + + uintmax_t req_offset = file_offset; + switch(mode) { + case seek_absolute: req_offset = offset; break; + case seek_relative: req_offset += offset; break; + } + + if(req_offset < 0) req_offset = 0; //cannot seek before start of file + if(req_offset > file_size) { + if(file_mode == mode_read) { //cannot seek past end of file + req_offset = file_size; + } else { //pad file to requested location + file_offset = file_size; + while(file_size < req_offset) write(0x00); + } + } + + file_offset = req_offset; + } + + int offset() { + if(!fp) return -1; //file not open + return file_offset; + } + + int size() { + if(!fp) return -1; //file not open + return file_size; + } + + bool truncate(unsigned size) { + if(!fp) return false; //file not open + #if !defined(_WIN32) + return ftruncate(fileno(fp), size) == 0; + #else + return _chsize(fileno(fp), size) == 0; + #endif + } + + bool end() { + if(!fp) return true; //file not open + return file_offset >= file_size; + } + + static bool exists(const char *fn) { + #if !defined(_WIN32) + FILE *fp = fopen(fn, "rb"); + #else + FILE *fp = _wfopen(utf16_t(fn), L"rb"); + #endif + if(fp) { + fclose(fp); + return true; + } + return false; + } + + static unsigned size(const char *fn) { + #if !defined(_WIN32) + FILE *fp = fopen(fn, "rb"); + #else + FILE *fp = _wfopen(utf16_t(fn), L"rb"); + #endif + unsigned filesize = 0; + if(fp) { + fseek(fp, 0, SEEK_END); + filesize = ftell(fp); + fclose(fp); + } + return filesize; + } + + bool open() { + return fp; + } + + bool open(const char *fn, FileMode mode) { + if(fp) return false; + + switch(file_mode = mode) { + #if !defined(_WIN32) + case mode_read: fp = fopen(fn, "rb"); break; + case mode_write: fp = fopen(fn, "wb+"); break; //need read permission for buffering + case mode_readwrite: fp = fopen(fn, "rb+"); break; + case mode_writeread: fp = fopen(fn, "wb+"); break; + #else + case mode_read: fp = _wfopen(utf16_t(fn), L"rb"); break; + case mode_write: fp = _wfopen(utf16_t(fn), L"wb+"); break; + case mode_readwrite: fp = _wfopen(utf16_t(fn), L"rb+"); break; + case mode_writeread: fp = _wfopen(utf16_t(fn), L"wb+"); break; + #endif + } + if(!fp) return false; + buffer_offset = -1; //invalidate buffer + file_offset = 0; + fseek(fp, 0, SEEK_END); + file_size = ftell(fp); + fseek(fp, 0, SEEK_SET); + return true; + } + + void close() { + if(!fp) return; + buffer_flush(); + fclose(fp); + fp = 0; + } + + file() { + memset(buffer, 0, sizeof buffer); + buffer_offset = -1; + buffer_dirty = false; + fp = 0; + file_offset = 0; + file_size = 0; + file_mode = mode_read; + } + + ~file() { + close(); + } + + private: + enum { buffer_size = 1 << 12, buffer_mask = buffer_size - 1 }; + char buffer[buffer_size]; + int buffer_offset; + bool buffer_dirty; + FILE *fp; + unsigned file_offset; + unsigned file_size; + FileMode file_mode; + + void buffer_sync() { + if(!fp) return; //file not open + if(buffer_offset != (file_offset & ~buffer_mask)) { + buffer_flush(); + buffer_offset = file_offset & ~buffer_mask; + fseek(fp, buffer_offset, SEEK_SET); + unsigned length = (buffer_offset + buffer_size) <= file_size ? buffer_size : (file_size & buffer_mask); + if(length) unsigned unused = fread(buffer, 1, length, fp); + } + } + + void buffer_flush() { + if(!fp) return; //file not open + if(file_mode == mode_read) return; //buffer cannot be written to + if(buffer_offset < 0) return; //buffer unused + if(buffer_dirty == false) return; //buffer unmodified since read + fseek(fp, buffer_offset, SEEK_SET); + unsigned length = (buffer_offset + buffer_size) <= file_size ? buffer_size : (file_size & buffer_mask); + if(length) unsigned unused = fwrite(buffer, 1, length, fp); + buffer_offset = -1; //invalidate buffer + buffer_dirty = false; + } + }; +} + +#endif diff --git a/supergameboy/nall/filemap.hpp b/supergameboy/nall/filemap.hpp new file mode 100644 index 00000000..a05f0eb7 --- /dev/null +++ b/supergameboy/nall/filemap.hpp @@ -0,0 +1,190 @@ +#ifndef NALL_FILEMAP_HPP +#define NALL_FILEMAP_HPP + +#include +#include + +#include +#include +#if defined(_WIN32) + #include +#else + #include + #include + #include + #include + #include +#endif + +namespace nall { + class filemap { + public: + enum filemode { mode_read, mode_write, mode_readwrite, mode_writeread }; + + bool open(const char *filename, filemode mode) { return p_open(filename, mode); } + void close() { return p_close(); } + unsigned size() const { return p_size; } + uint8_t* handle() { return p_handle; } + const uint8_t* handle() const { return p_handle; } + filemap() : p_size(0), p_handle(0) { p_ctor(); } + ~filemap() { p_dtor(); } + + private: + unsigned p_size; + uint8_t *p_handle; + + #if defined(_WIN32) + //============= + //MapViewOfFile + //============= + + HANDLE p_filehandle, p_maphandle; + + bool p_open(const char *filename, filemode mode) { + int desired_access, creation_disposition, flprotect, map_access; + + switch(mode) { + default: return false; + case mode_read: + desired_access = GENERIC_READ; + creation_disposition = OPEN_EXISTING; + flprotect = PAGE_READONLY; + map_access = FILE_MAP_READ; + break; + case mode_write: + //write access requires read access + desired_access = GENERIC_WRITE; + creation_disposition = CREATE_ALWAYS; + flprotect = PAGE_READWRITE; + map_access = FILE_MAP_ALL_ACCESS; + break; + case mode_readwrite: + desired_access = GENERIC_READ | GENERIC_WRITE; + creation_disposition = OPEN_EXISTING; + flprotect = PAGE_READWRITE; + map_access = FILE_MAP_ALL_ACCESS; + break; + case mode_writeread: + desired_access = GENERIC_READ | GENERIC_WRITE; + creation_disposition = CREATE_NEW; + flprotect = PAGE_READWRITE; + map_access = FILE_MAP_ALL_ACCESS; + break; + } + + p_filehandle = CreateFileW(utf16_t(filename), desired_access, FILE_SHARE_READ, NULL, + creation_disposition, FILE_ATTRIBUTE_NORMAL, NULL); + if(p_filehandle == INVALID_HANDLE_VALUE) return false; + + p_size = GetFileSize(p_filehandle, NULL); + + p_maphandle = CreateFileMapping(p_filehandle, NULL, flprotect, 0, p_size, NULL); + if(p_maphandle == INVALID_HANDLE_VALUE) { + CloseHandle(p_filehandle); + p_filehandle = INVALID_HANDLE_VALUE; + return false; + } + + p_handle = (uint8_t*)MapViewOfFile(p_maphandle, map_access, 0, 0, p_size); + return p_handle; + } + + void p_close() { + if(p_handle) { + UnmapViewOfFile(p_handle); + p_handle = 0; + } + + if(p_maphandle != INVALID_HANDLE_VALUE) { + CloseHandle(p_maphandle); + p_maphandle = INVALID_HANDLE_VALUE; + } + + if(p_filehandle != INVALID_HANDLE_VALUE) { + CloseHandle(p_filehandle); + p_filehandle = INVALID_HANDLE_VALUE; + } + } + + void p_ctor() { + p_filehandle = INVALID_HANDLE_VALUE; + p_maphandle = INVALID_HANDLE_VALUE; + } + + void p_dtor() { + close(); + } + + #else + //==== + //mmap + //==== + + int p_fd; + + bool p_open(const char *filename, filemode mode) { + int open_flags, mmap_flags; + + switch(mode) { + default: return false; + case mode_read: + open_flags = O_RDONLY; + mmap_flags = PROT_READ; + break; + case mode_write: + open_flags = O_RDWR | O_CREAT; //mmap() requires read access + mmap_flags = PROT_WRITE; + break; + case mode_readwrite: + open_flags = O_RDWR; + mmap_flags = PROT_READ | PROT_WRITE; + break; + case mode_writeread: + open_flags = O_RDWR | O_CREAT; + mmap_flags = PROT_READ | PROT_WRITE; + break; + } + + p_fd = ::open(filename, open_flags); + if(p_fd < 0) return false; + + struct stat p_stat; + fstat(p_fd, &p_stat); + p_size = p_stat.st_size; + + p_handle = (uint8_t*)mmap(0, p_size, mmap_flags, MAP_SHARED, p_fd, 0); + if(p_handle == MAP_FAILED) { + p_handle = 0; + ::close(p_fd); + p_fd = -1; + return false; + } + + return p_handle; + } + + void p_close() { + if(p_handle) { + munmap(p_handle, p_size); + p_handle = 0; + } + + if(p_fd >= 0) { + ::close(p_fd); + p_fd = -1; + } + } + + void p_ctor() { + p_fd = -1; + } + + void p_dtor() { + p_close(); + } + + #endif + }; +} + +#endif diff --git a/supergameboy/nall/function.hpp b/supergameboy/nall/function.hpp new file mode 100644 index 00000000..79195f70 --- /dev/null +++ b/supergameboy/nall/function.hpp @@ -0,0 +1,190 @@ +#ifndef NALL_FUNCTION_HPP +#define NALL_FUNCTION_HPP + +#include + +//prologue + +#define TN typename + +namespace nall { + template class function; +} + +//parameters = 0 + +#define cat(n) n +#define TL typename R +#define PL +#define CL + +#include "function.hpp" + +//parameters = 1 + +#define cat(n) , n +#define TL TN R, TN P1 +#define PL P1 p1 +#define CL p1 + +#include "function.hpp" + +//parameters = 2 + +#define cat(n) , n +#define TL TN R, TN P1, TN P2 +#define PL P1 p1, P2 p2 +#define CL p1, p2 + +#include "function.hpp" + +//parameters = 3 + +#define cat(n) , n +#define TL TN R, TN P1, TN P2, TN P3 +#define PL P1 p1, P2 p2, P3 p3 +#define CL p1, p2, p3 + +#include "function.hpp" + +//parameters = 4 + +#define cat(n) , n +#define TL TN R, TN P1, TN P2, TN P3, TN P4 +#define PL P1 p1, P2 p2, P3 p3, P4 p4 +#define CL p1, p2, p3, p4 + +#include "function.hpp" + +//parameters = 5 + +#define cat(n) , n +#define TL TN R, TN P1, TN P2, TN P3, TN P4, TN P5 +#define PL P1 p1, P2 p2, P3 p3, P4 p4, P5 p5 +#define CL p1, p2, p3, p4, p5 + +#include "function.hpp" + +//parameters = 6 + +#define cat(n) , n +#define TL TN R, TN P1, TN P2, TN P3, TN P4, TN P5, TN P6 +#define PL P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6 +#define CL p1, p2, p3, p4, p5, p6 + +#include "function.hpp" + +//parameters = 7 + +#define cat(n) , n +#define TL TN R, TN P1, TN P2, TN P3, TN P4, TN P5, TN P6, TN P7 +#define PL P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7 +#define CL p1, p2, p3, p4, p5, p6, p7 + +#include "function.hpp" + +//parameters = 8 + +#define cat(n) , n +#define TL TN R, TN P1, TN P2, TN P3, TN P4, TN P5, TN P6, TN P7, TN P8 +#define PL P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8 +#define CL p1, p2, p3, p4, p5, p6, p7, p8 + +#include "function.hpp" + +//epilogue + +#undef TN +#define NALL_FUNCTION_T + +#elif !defined(NALL_FUNCTION_T) + +//function implementation template class + +namespace nall { + template + class function { + private: + struct base1 { virtual void func1(PL) {} }; + struct base2 { virtual void func2(PL) {} }; + struct derived : base1, virtual base2 {}; + + struct data_t { + R (*fn_call)(const data_t& cat(PL)); + union { + R (*fn_global)(PL); + struct { + R (derived::*fn_member)(PL); + void *object; + }; + }; + } data; + + static R fn_call_global(const data_t &d cat(PL)) { + return d.fn_global(CL); + } + + template + static R fn_call_member(const data_t &d cat(PL)) { + return (((C*)d.object)->*((R (C::*&)(PL))d.fn_member))(CL); + } + + public: + R operator()(PL) const { return data.fn_call(data cat(CL)); } + operator bool() const { return data.fn_call; } + + function() { data.fn_call = 0; } + + function(void *fn) { + data.fn_call = &fn_call_global; + data.fn_global = (R (*)(PL))fn; + } + + function(R (*fn)(PL)) { + data.fn_call = &fn_call_global; + data.fn_global = fn; + } + + template + function(R (C::*fn)(PL), C *obj) { + data.fn_call = &fn_call_member; + (R (C::*&)(PL))data.fn_member = fn; + assert(sizeof data.fn_member >= sizeof fn); + data.object = obj; + } + + template + function(R (C::*fn)(PL) const, C *obj) { + data.fn_call = &fn_call_member; + (R (C::*&)(PL))data.fn_member = (R (C::*&)(PL))fn; + assert(sizeof data.fn_member >= sizeof fn); + data.object = obj; + } + + function& operator=(void *fn) { return operator=(function(fn)); } + function& operator=(const function &source) { memcpy(&data, &source.data, sizeof(data_t)); return *this; } + function(const function &source) { memcpy(&data, &source.data, sizeof(data_t)); } + }; + + template + function bind(R (*fn)(PL)) { + return function(fn); + } + + template + function bind(R (C::*fn)(PL), C *obj) { + return function(fn, obj); + } + + template + function bind(R (C::*fn)(PL) const, C *obj) { + return function(fn, obj); + } +} + +#undef cat +#undef TL +#undef PL +#undef CL + +#endif diff --git a/supergameboy/nall/input.hpp b/supergameboy/nall/input.hpp new file mode 100644 index 00000000..b3ce9ebf --- /dev/null +++ b/supergameboy/nall/input.hpp @@ -0,0 +1,386 @@ +#ifndef NALL_INPUT_HPP +#define NALL_INPUT_HPP + +#include +#include +#include + +#include +#include + +namespace nall { + +struct Keyboard; +Keyboard& keyboard(unsigned = 0); + +static const char KeyboardScancodeName[][64] = { + "Escape", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", + "PrintScreen", "ScrollLock", "Pause", "Tilde", + "Num1", "Num2", "Num3", "Num4", "Num5", "Num6", "Num7", "Num8", "Num9", "Num0", + "Dash", "Equal", "Backspace", + "Insert", "Delete", "Home", "End", "PageUp", "PageDown", + "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", + "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", + "LeftBracket", "RightBracket", "Backslash", "Semicolon", "Apostrophe", "Comma", "Period", "Slash", + "Keypad1", "Keypad2", "Keypad3", "Keypad4", "Keypad5", "Keypad6", "Keypad7", "Keypad8", "Keypad9", "Keypad0", + "Point", "Enter", "Add", "Subtract", "Multiply", "Divide", + "NumLock", "CapsLock", + "Up", "Down", "Left", "Right", + "Tab", "Return", "Spacebar", "Menu", + "Shift", "Control", "Alt", "Super", +}; + +struct Keyboard { + const unsigned ID; + enum { Base = 1 }; + enum { Count = 8, Size = 128 }; + + enum Scancode { + Escape, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, + PrintScreen, ScrollLock, Pause, Tilde, + Num1, Num2, Num3, Num4, Num5, Num6, Num7, Num8, Num9, Num0, + Dash, Equal, Backspace, + Insert, Delete, Home, End, PageUp, PageDown, + A, B, C, D, E, F, G, H, I, J, K, L, M, + N, O, P, Q, R, S, T, U, V, W, X, Y, Z, + LeftBracket, RightBracket, Backslash, Semicolon, Apostrophe, Comma, Period, Slash, + Keypad1, Keypad2, Keypad3, Keypad4, Keypad5, Keypad6, Keypad7, Keypad8, Keypad9, Keypad0, + Point, Enter, Add, Subtract, Multiply, Divide, + NumLock, CapsLock, + Up, Down, Left, Right, + Tab, Return, Spacebar, Menu, + Shift, Control, Alt, Super, + Limit, + }; + + static signed numberDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(keyboard(i).belongsTo(scancode)) return i; + } + return -1; + } + + static signed keyDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(keyboard(i).isKey(scancode)) return scancode - keyboard(i).key(Escape); + } + return -1; + } + + static signed modifierDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(keyboard(i).isModifier(scancode)) return scancode - keyboard(i).key(Shift); + } + return -1; + } + + static bool isAnyKey(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(keyboard(i).isKey(scancode)) return true; + } + return false; + } + + static bool isAnyModifier(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(keyboard(i).isModifier(scancode)) return true; + } + return false; + } + + static uint16_t decode(const char *name) { + string s(name); + if(!strbegin(name, "KB")) return 0; + ltrim(s, "KB"); + unsigned id = strunsigned(s); + int pos = strpos(s, "::"); + if(pos < 0) return 0; + s = substr(s, pos + 2); + for(unsigned i = 0; i < Limit; i++) { + if(s == KeyboardScancodeName[i]) return Base + Size * id + i; + } + return 0; + } + + string encode(uint16_t code) const { + unsigned index = 0; + for(unsigned i = 0; i < Count; i++) { + if(code >= Base + Size * i && code < Base + Size * (i + 1)) { + index = code - (Base + Size * i); + break; + } + } + return string() << "KB" << ID << "::" << KeyboardScancodeName[index]; + } + + uint16_t operator[](Scancode code) const { return Base + ID * Size + code; } + uint16_t key(unsigned id) const { return Base + Size * ID + id; } + bool isKey(unsigned id) const { return id >= key(Escape) && id <= key(Menu); } + bool isModifier(unsigned id) const { return id >= key(Shift) && id <= key(Super); } + bool belongsTo(uint16_t scancode) const { return isKey(scancode) || isModifier(scancode); } + + Keyboard(unsigned ID_) : ID(ID_) {} +}; + +inline Keyboard& keyboard(unsigned id) { + static Keyboard kb0(0), kb1(1), kb2(2), kb3(3), kb4(4), kb5(5), kb6(6), kb7(7); + switch(id) { default: + case 0: return kb0; case 1: return kb1; case 2: return kb2; case 3: return kb3; + case 4: return kb4; case 5: return kb5; case 6: return kb6; case 7: return kb7; + } +} + +static const char MouseScancodeName[][64] = { + "Xaxis", "Yaxis", "Zaxis", + "Button0", "Button1", "Button2", "Button3", "Button4", "Button5", "Button6", "Button7", +}; + +struct Mouse; +Mouse& mouse(unsigned = 0); + +struct Mouse { + const unsigned ID; + enum { Base = Keyboard::Base + Keyboard::Size * Keyboard::Count }; + enum { Count = 8, Size = 16 }; + enum { Axes = 3, Buttons = 8 }; + + enum Scancode { + Xaxis, Yaxis, Zaxis, + Button0, Button1, Button2, Button3, Button4, Button5, Button6, Button7, + Limit, + }; + + static signed numberDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(mouse(i).belongsTo(scancode)) return i; + } + return -1; + } + + static signed axisDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(mouse(i).isAxis(scancode)) return scancode - mouse(i).axis(0); + } + return -1; + } + + static signed buttonDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(mouse(i).isButton(scancode)) return scancode - mouse(i).button(0); + } + return -1; + } + + static bool isAnyAxis(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(mouse(i).isAxis(scancode)) return true; + } + return false; + } + + static bool isAnyButton(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(mouse(i).isButton(scancode)) return true; + } + return false; + } + + static uint16_t decode(const char *name) { + string s(name); + if(!strbegin(name, "MS")) return 0; + ltrim(s, "MS"); + unsigned id = strunsigned(s); + int pos = strpos(s, "::"); + if(pos < 0) return 0; + s = substr(s, pos + 2); + for(unsigned i = 0; i < Limit; i++) { + if(s == MouseScancodeName[i]) return Base + Size * id + i; + } + return 0; + } + + string encode(uint16_t code) const { + unsigned index = 0; + for(unsigned i = 0; i < Count; i++) { + if(code >= Base + Size * i && code < Base + Size * (i + 1)) { + index = code - (Base + Size * i); + break; + } + } + return string() << "MS" << ID << "::" << MouseScancodeName[index]; + } + + uint16_t operator[](Scancode code) const { return Base + ID * Size + code; } + uint16_t axis(unsigned id) const { return Base + Size * ID + Xaxis + id; } + uint16_t button(unsigned id) const { return Base + Size * ID + Button0 + id; } + bool isAxis(unsigned id) const { return id >= axis(0) && id <= axis(2); } + bool isButton(unsigned id) const { return id >= button(0) && id <= button(7); } + bool belongsTo(uint16_t scancode) const { return isAxis(scancode) || isButton(scancode); } + + Mouse(unsigned ID_) : ID(ID_) {} +}; + +inline Mouse& mouse(unsigned id) { + static Mouse ms0(0), ms1(1), ms2(2), ms3(3), ms4(4), ms5(5), ms6(6), ms7(7); + switch(id) { default: + case 0: return ms0; case 1: return ms1; case 2: return ms2; case 3: return ms3; + case 4: return ms4; case 5: return ms5; case 6: return ms6; case 7: return ms7; + } +} + +static const char JoypadScancodeName[][64] = { + "Hat0", "Hat1", "Hat2", "Hat3", "Hat4", "Hat5", "Hat6", "Hat7", + "Axis0", "Axis1", "Axis2", "Axis3", "Axis4", "Axis5", "Axis6", "Axis7", + "Axis8", "Axis9", "Axis10", "Axis11", "Axis12", "Axis13", "Axis14", "Axis15", + "Button0", "Button1", "Button2", "Button3", "Button4", "Button5", "Button6", "Button7", + "Button8", "Button9", "Button10", "Button11", "Button12", "Button13", "Button14", "Button15", + "Button16", "Button17", "Button18", "Button19", "Button20", "Button21", "Button22", "Button23", + "Button24", "Button25", "Button26", "Button27", "Button28", "Button29", "Button30", "Button31", +}; + +struct Joypad; +Joypad& joypad(unsigned = 0); + +struct Joypad { + const unsigned ID; + enum { Base = Mouse::Base + Mouse::Size * Mouse::Count }; + enum { Count = 8, Size = 64 }; + enum { Hats = 8, Axes = 16, Buttons = 32 }; + + enum Scancode { + Hat0, Hat1, Hat2, Hat3, Hat4, Hat5, Hat6, Hat7, + Axis0, Axis1, Axis2, Axis3, Axis4, Axis5, Axis6, Axis7, + Axis8, Axis9, Axis10, Axis11, Axis12, Axis13, Axis14, Axis15, + Button0, Button1, Button2, Button3, Button4, Button5, Button6, Button7, + Button8, Button9, Button10, Button11, Button12, Button13, Button14, Button15, + Button16, Button17, Button18, Button19, Button20, Button21, Button22, Button23, + Button24, Button25, Button26, Button27, Button28, Button29, Button30, Button31, + Limit, + }; + + enum Hat { HatCenter = 0, HatUp = 1, HatRight = 2, HatDown = 4, HatLeft = 8 }; + + static signed numberDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(joypad(i).belongsTo(scancode)) return i; + } + return -1; + } + + static signed hatDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(joypad(i).isHat(scancode)) return scancode - joypad(i).hat(0); + } + return -1; + } + + static signed axisDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(joypad(i).isAxis(scancode)) return scancode - joypad(i).axis(0); + } + return -1; + } + + static signed buttonDecode(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(joypad(i).isButton(scancode)) return scancode - joypad(i).button(0); + } + return -1; + } + + static bool isAnyHat(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(joypad(i).isHat(scancode)) return true; + } + return false; + } + + static bool isAnyAxis(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(joypad(i).isAxis(scancode)) return true; + } + return false; + } + + static bool isAnyButton(uint16_t scancode) { + for(unsigned i = 0; i < Count; i++) { + if(joypad(i).isButton(scancode)) return true; + } + return false; + } + + static uint16_t decode(const char *name) { + string s(name); + if(!strbegin(name, "JP")) return 0; + ltrim(s, "JP"); + unsigned id = strunsigned(s); + int pos = strpos(s, "::"); + if(pos < 0) return 0; + s = substr(s, pos + 2); + for(unsigned i = 0; i < Limit; i++) { + if(s == JoypadScancodeName[i]) return Base + Size * id + i; + } + return 0; + } + + string encode(uint16_t code) const { + unsigned index = 0; + for(unsigned i = 0; i < Count; i++) { + if(code >= Base + Size * i && code < Base + Size * (i + 1)) { + index = code - (Base + Size * i); + } + } + return string() << "JP" << ID << "::" << JoypadScancodeName[index]; + } + + uint16_t operator[](Scancode code) const { return Base + ID * Size + code; } + uint16_t hat(unsigned id) const { return Base + Size * ID + Hat0 + id; } + uint16_t axis(unsigned id) const { return Base + Size * ID + Axis0 + id; } + uint16_t button(unsigned id) const { return Base + Size * ID + Button0 + id; } + bool isHat(unsigned id) const { return id >= hat(0) && id <= hat(7); } + bool isAxis(unsigned id) const { return id >= axis(0) && id <= axis(15); } + bool isButton(unsigned id) const { return id >= button(0) && id <= button(31); } + bool belongsTo(uint16_t scancode) const { return isHat(scancode) || isAxis(scancode) || isButton(scancode); } + + Joypad(unsigned ID_) : ID(ID_) {} +}; + +inline Joypad& joypad(unsigned id) { + static Joypad jp0(0), jp1(1), jp2(2), jp3(3), jp4(4), jp5(5), jp6(6), jp7(7); + switch(id) { default: + case 0: return jp0; case 1: return jp1; case 2: return jp2; case 3: return jp3; + case 4: return jp4; case 5: return jp5; case 6: return jp6; case 7: return jp7; + } +} + +struct Scancode { + enum { None = 0, Limit = Joypad::Base + Joypad::Size * Joypad::Count }; + + static uint16_t decode(const char *name) { + uint16_t code; + code = Keyboard::decode(name); + if(code) return code; + code = Mouse::decode(name); + if(code) return code; + code = Joypad::decode(name); + if(code) return code; + return None; + } + + static string encode(uint16_t code) { + for(unsigned i = 0; i < Keyboard::Count; i++) { + if(keyboard(i).belongsTo(code)) return keyboard(i).encode(code); + } + for(unsigned i = 0; i < Mouse::Count; i++) { + if(mouse(i).belongsTo(code)) return mouse(i).encode(code); + } + for(unsigned i = 0; i < Joypad::Count; i++) { + if(joypad(i).belongsTo(code)) return joypad(i).encode(code); + } + return "None"; + } +}; + +} + +#endif diff --git a/supergameboy/nall/lzss.hpp b/supergameboy/nall/lzss.hpp new file mode 100644 index 00000000..202bc814 --- /dev/null +++ b/supergameboy/nall/lzss.hpp @@ -0,0 +1,81 @@ +#ifndef NALL_LZSS_HPP +#define NALL_LZSS_HPP + +#include +#include +#include + +namespace nall { + class lzss { + public: + static bool encode(uint8_t *&output, unsigned &outlength, const uint8_t *input, unsigned inlength) { + output = new(zeromemory) uint8_t[inlength * 9 / 8 + 9]; + + unsigned i = 0, o = 0; + while(i < inlength) { + unsigned flagoffset = o++; + uint8_t flag = 0x00; + + for(unsigned b = 0; b < 8 && i < inlength; b++) { + unsigned longest = 0, pointer; + for(unsigned index = 1; index < 4096; index++) { + unsigned count = 0; + while(true) { + if(count >= 15 + 3) break; //verify pattern match is not longer than max length + if(i + count >= inlength) break; //verify pattern match does not read past end of input + if(i + count < index) break; //verify read is not before start of input + if(input[i + count] != input[i + count - index]) break; //verify pattern still matches + count++; + } + + if(count > longest) { + longest = count; + pointer = index; + } + } + + if(longest < 3) output[o++] = input[i++]; + else { + flag |= 1 << b; + uint16_t x = ((longest - 3) << 12) + pointer; + output[o++] = x; + output[o++] = x >> 8; + i += longest; + } + } + + output[flagoffset] = flag; + } + + outlength = o; + return true; + } + + static bool decode(uint8_t *&output, const uint8_t *input, unsigned length) { + output = new(zeromemory) uint8_t[length]; + + unsigned i = 0, o = 0; + while(o < length) { + uint8_t flag = input[i++]; + + for(unsigned b = 0; b < 8 && o < length; b++) { + if(!(flag & (1 << b))) output[o++] = input[i++]; + else { + uint16_t offset = input[i++]; + offset += input[i++] << 8; + uint16_t lookuplength = (offset >> 12) + 3; + offset &= 4095; + for(unsigned index = 0; index < lookuplength && o + index < length; index++) { + output[o + index] = output[o + index - offset]; + } + o += lookuplength; + } + } + } + + return true; + } + }; +} + +#endif diff --git a/supergameboy/nall/moduloarray.hpp b/supergameboy/nall/moduloarray.hpp new file mode 100644 index 00000000..be549ae9 --- /dev/null +++ b/supergameboy/nall/moduloarray.hpp @@ -0,0 +1,40 @@ +#ifndef NALL_MODULO_HPP +#define NALL_MODULO_HPP + +#include + +namespace nall { + template class modulo_array { + public: + inline T operator[](int index) const { + return buffer[size + index]; + } + + inline T read(int index) const { + return buffer[size + index]; + } + + inline void write(unsigned index, const T value) { + buffer[index] = + buffer[index + size] = + buffer[index + size + size] = value; + } + + void serialize(serializer &s) { + s.array(buffer, size * 3); + } + + modulo_array() { + buffer = new T[size * 3](); + } + + ~modulo_array() { + delete[] buffer; + } + + private: + T *buffer; + }; +} + +#endif diff --git a/supergameboy/nall/platform.hpp b/supergameboy/nall/platform.hpp new file mode 100644 index 00000000..0bd62895 --- /dev/null +++ b/supergameboy/nall/platform.hpp @@ -0,0 +1,77 @@ +#ifndef NALL_PLATFORM_HPP +#define NALL_PLATFORM_HPP + +//========================= +//standard platform headers +//========================= + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(_WIN32) + #include + #include + #include + #undef interface +#else + #include + #include + #include +#endif + +//================== +//warning supression +//================== + +//Visual C++ +#if defined(_MSC_VER) + //disable libc "deprecation" warnings + #pragma warning(disable:4996) +#endif + +//================ +//POSIX compliance +//================ + +#if defined(_MSC_VER) + #define PATH_MAX _MAX_PATH + #define va_copy(dest, src) ((dest) = (src)) +#endif + +#if defined(_WIN32) + #define getcwd _getcwd + #define ftruncate _chsize + #define putenv _putenv + #define rmdir _rmdir + #define vsnprintf _vsnprintf + #define usleep(n) Sleep(n / 1000) +#endif + +//================ +//inline expansion +//================ + +#if defined(__GNUC__) + #define noinline __attribute__((noinline)) + #define inline inline + #define alwaysinline inline __attribute__((always_inline)) +#elif defined(_MSC_VER) + #define noinline __declspec(noinline) + #define inline inline + #define alwaysinline inline __forceinline +#else + #define noinline + #define inline inline + #define alwaysinline inline +#endif + +#endif + diff --git a/supergameboy/nall/priorityqueue.hpp b/supergameboy/nall/priorityqueue.hpp new file mode 100644 index 00000000..7f33e23b --- /dev/null +++ b/supergameboy/nall/priorityqueue.hpp @@ -0,0 +1,106 @@ +#ifndef NALL_PRIORITYQUEUE_HPP +#define NALL_PRIORITYQUEUE_HPP + +#include +#include +#include +#include + +namespace nall { + template void priority_queue_nocallback(type_t) {} + + //priority queue implementation using binary min-heap array; + //does not require normalize() function. + //O(1) find (tick) + //O(log n) insert (enqueue) + //O(log n) remove (dequeue) + template class priority_queue : noncopyable { + public: + inline void tick(unsigned ticks) { + basecounter += ticks; + while(heapsize && gte(basecounter, heap[0].counter)) callback(dequeue()); + } + + //counter is relative to current time (eg enqueue(64, ...) fires in 64 ticks); + //counter cannot exceed std::numeric_limits::max() >> 1. + void enqueue(unsigned counter, type_t event) { + unsigned child = heapsize++; + counter += basecounter; + + while(child) { + unsigned parent = (child - 1) >> 1; + if(gte(counter, heap[parent].counter)) break; + + heap[child].counter = heap[parent].counter; + heap[child].event = heap[parent].event; + child = parent; + } + + heap[child].counter = counter; + heap[child].event = event; + } + + type_t dequeue() { + type_t event(heap[0].event); + unsigned parent = 0; + unsigned counter = heap[--heapsize].counter; + + while(true) { + unsigned child = (parent << 1) + 1; + if(child >= heapsize) break; + if(child + 1 < heapsize && gte(heap[child].counter, heap[child + 1].counter)) child++; + if(gte(heap[child].counter, counter)) break; + + heap[parent].counter = heap[child].counter; + heap[parent].event = heap[child].event; + parent = child; + } + + heap[parent].counter = counter; + heap[parent].event = heap[heapsize].event; + return event; + } + + void reset() { + basecounter = 0; + heapsize = 0; + } + + void serialize(serializer &s) { + s.integer(basecounter); + s.integer(heapsize); + for(unsigned n = 0; n < heapcapacity; n++) { + s.integer(heap[n].counter); + s.integer(heap[n].event); + } + } + + priority_queue(unsigned size, function callback_ = &priority_queue_nocallback) + : callback(callback_) { + heap = new heap_t[size]; + heapcapacity = size; + reset(); + } + + ~priority_queue() { + delete[] heap; + } + + private: + function callback; + unsigned basecounter; + unsigned heapsize; + unsigned heapcapacity; + struct heap_t { + unsigned counter; + type_t event; + } *heap; + + //return true if x is greater than or equal to y + inline bool gte(unsigned x, unsigned y) { + return x - y < (std::numeric_limits::max() >> 1); + } + }; +} + +#endif diff --git a/supergameboy/nall/property.hpp b/supergameboy/nall/property.hpp new file mode 100644 index 00000000..0099939c --- /dev/null +++ b/supergameboy/nall/property.hpp @@ -0,0 +1,45 @@ +#ifndef NALL_PROPERTY_HPP +#define NALL_PROPERTY_HPP + +//nall::property implements a variable container that disallows write access +//to non-derived objects. This requires use of property::set(), as C++ lacks +//the ability to make this implementation completely transparent. + +namespace nall { + class property { + public: + template class property_t; + + protected: + template T& get(property_t&); + template property_t& set(property_t&, const T); + + public: + template + class property_t { + public: + const T& operator()() const { return value; } + property_t() : value() {} + property_t(const T value_) : value(value_) {} + + protected: + T value; + operator T&() { return value; } + property_t& operator=(const T newValue) { value = newValue; return *this; } + friend T& property::get(property_t&); + friend property_t& property::set(property_t&, const T); + }; + }; + + template + T& property::get(property::property_t &p) { + return p.operator T&(); + } + + template + property::property_t& property::set(property::property_t &p, const T value) { + return p.operator=(value); + } +} + +#endif diff --git a/supergameboy/nall/serial.hpp b/supergameboy/nall/serial.hpp new file mode 100644 index 00000000..6f5cf6d6 --- /dev/null +++ b/supergameboy/nall/serial.hpp @@ -0,0 +1,80 @@ +#ifndef NALL_SERIAL_HPP +#define NALL_SERIAL_HPP + +#include +#include +#include +#include + +#include + +namespace nall { + class serial { + public: + //-1 on error, otherwise return bytes read + int read(uint8_t *data, unsigned length) { + if(port_open == false) return -1; + return ::read(port, (void*)data, length); + } + + //-1 on error, otherwise return bytes written + int write(const uint8_t *data, unsigned length) { + if(port_open == false) return -1; + return ::write(port, (void*)data, length); + } + + bool open(const char *portname, unsigned rate) { + close(); + + port = ::open(portname, O_RDWR | O_NOCTTY | O_NDELAY | O_NONBLOCK); + if(port == -1) return false; + + if(ioctl(port, TIOCEXCL) == -1) { close(); return false; } + if(fcntl(port, F_SETFL, 0) == -1) { close(); return false; } + if(tcgetattr(port, &original_attr) == -1) { close(); return false; } + + termios attr = original_attr; + cfmakeraw(&attr); + cfsetspeed(&attr, rate); + + attr.c_lflag &=~ (ECHO | ECHONL | ISIG | ICANON | IEXTEN); + attr.c_iflag &=~ (BRKINT | PARMRK | INPCK | ISTRIP | INLCR | IGNCR | ICRNL | IXON | IXOFF | IXANY); + attr.c_iflag |= (IGNBRK | IGNPAR); + attr.c_oflag &=~ (OPOST); + attr.c_cflag &=~ (CSIZE | CSTOPB | PARENB); + attr.c_cflag |= (CS8 | CREAD | CLOCAL); + attr.c_cc[VTIME] = attr.c_cc[VMIN] = 0; + + if(tcsetattr(port, TCSANOW, &attr) == -1) { close(); return false; } + return port_open = true; + } + + void close() { + if(port != -1) { + tcdrain(port); + if(port_open == true) { + tcsetattr(port, TCSANOW, &original_attr); + port_open = false; + } + ::close(port); + port = -1; + } + } + + serial() { + port = -1; + port_open = false; + } + + ~serial() { + close(); + } + + private: + int port; + bool port_open; + termios original_attr; + }; +} + +#endif diff --git a/supergameboy/nall/serializer.hpp b/supergameboy/nall/serializer.hpp new file mode 100644 index 00000000..521e7d2e --- /dev/null +++ b/supergameboy/nall/serializer.hpp @@ -0,0 +1,126 @@ +#ifndef NALL_SERIALIZER_HPP +#define NALL_SERIALIZER_HPP + +#include +#include +#include + +namespace nall { + + //serializer: a class designed to save and restore the state of classes. + // + //benefits: + //- data() will be portable in size (it is not necessary to specify type sizes.) + //- data() will be portable in endianness (always stored internally as little-endian.) + //- one serialize function can both save and restore class states. + // + //caveats: + //- only plain-old-data can be stored. complex classes must provide serialize(serializer&); + //- floating-point usage is not portable across platforms + + class serializer { + public: + enum mode_t { Load, Save, Size }; + + mode_t mode() const { + return imode; + } + + const uint8_t* data() const { + return idata; + } + + unsigned size() const { + return isize; + } + + unsigned capacity() const { + return icapacity; + } + + template void floatingpoint(T &value) { + enum { size = sizeof(T) }; + //this is rather dangerous, and not cross-platform safe; + //but there is no standardized way to export FP-values + uint8_t *p = (uint8_t*)&value; + if(imode == Save) { + for(unsigned n = 0; n < size; n++) idata[isize++] = p[n]; + } else if(imode == Load) { + for(unsigned n = 0; n < size; n++) p[n] = idata[isize++]; + } else { + isize += size; + } + } + + template void integer(T &value) { + enum { size = is_bool::value ? 1 : sizeof(T) }; + if(imode == Save) { + for(unsigned n = 0; n < size; n++) idata[isize++] = value >> (n << 3); + } else if(imode == Load) { + value = 0; + for(unsigned n = 0; n < size; n++) value |= idata[isize++] << (n << 3); + } else if(imode == Size) { + isize += size; + } + } + + template void array(T &array) { + enum { size = sizeof(T) / sizeof(typename remove_extent::type) }; + for(unsigned n = 0; n < size; n++) integer(array[n]); + } + + template void array(T array, unsigned size) { + for(unsigned n = 0; n < size; n++) integer(array[n]); + } + + serializer& operator=(const serializer &s) { + if(idata) delete[] idata; + + imode = s.imode; + idata = new uint8_t[s.icapacity]; + isize = s.isize; + icapacity = s.icapacity; + + memcpy(idata, s.idata, s.icapacity); + return *this; + } + + serializer(const serializer &s) : idata(0) { + operator=(s); + } + + serializer() { + imode = Size; + idata = 0; + isize = 0; + } + + serializer(unsigned capacity) { + imode = Save; + idata = new uint8_t[capacity](); + isize = 0; + icapacity = capacity; + } + + serializer(const uint8_t *data, unsigned capacity) { + imode = Load; + idata = new uint8_t[capacity]; + isize = 0; + icapacity = capacity; + memcpy(idata, data, capacity); + } + + ~serializer() { + if(idata) delete[] idata; + } + + private: + mode_t imode; + uint8_t *idata; + unsigned isize; + unsigned icapacity; + }; + +}; + +#endif diff --git a/supergameboy/nall/sha256.hpp b/supergameboy/nall/sha256.hpp new file mode 100644 index 00000000..7f41f04e --- /dev/null +++ b/supergameboy/nall/sha256.hpp @@ -0,0 +1,143 @@ +#ifndef NALL_SHA256_HPP +#define NALL_SHA256_HPP + +//author: vladitx + +namespace nall { + #define PTR(t, a) ((t*)(a)) + + #define SWAP32(x) ((uint32_t)( \ + (((uint32_t)(x) & 0x000000ff) << 24) | \ + (((uint32_t)(x) & 0x0000ff00) << 8) | \ + (((uint32_t)(x) & 0x00ff0000) >> 8) | \ + (((uint32_t)(x) & 0xff000000) >> 24) \ + )) + + #define ST32(a, d) *PTR(uint32_t, a) = (d) + #define ST32BE(a, d) ST32(a, SWAP32(d)) + + #define LD32(a) *PTR(uint32_t, a) + #define LD32BE(a) SWAP32(LD32(a)) + + #define LSL32(x, n) ((uint32_t)(x) << (n)) + #define LSR32(x, n) ((uint32_t)(x) >> (n)) + #define ROR32(x, n) (LSR32(x, n) | LSL32(x, 32 - (n))) + + //first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19 + static const uint32_t T_H[8] = { + 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19, + }; + + //first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311 + static const uint32_t T_K[64] = { + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2, + }; + + struct sha256_ctx { + uint8_t in[64]; + unsigned inlen; + + uint32_t w[64]; + uint32_t h[8]; + uint64_t len; + }; + + void sha256_init(sha256_ctx *p) { + memset(p, 0, sizeof(sha256_ctx)); + memcpy(p->h, T_H, sizeof(T_H)); + } + + static void sha256_block(sha256_ctx *p) { + unsigned i; + uint32_t s0, s1; + uint32_t a, b, c, d, e, f, g, h; + uint32_t t1, t2, maj, ch; + + for(i = 0; i < 16; i++) p->w[i] = LD32BE(p->in + i * 4); + + for(i = 16; i < 64; i++) { + s0 = ROR32(p->w[i - 15], 7) ^ ROR32(p->w[i - 15], 18) ^ LSR32(p->w[i - 15], 3); + s1 = ROR32(p->w[i - 2], 17) ^ ROR32(p->w[i - 2], 19) ^ LSR32(p->w[i - 2], 10); + p->w[i] = p->w[i - 16] + s0 + p->w[i - 7] + s1; + } + + a = p->h[0]; b = p->h[1]; c = p->h[2]; d = p->h[3]; + e = p->h[4]; f = p->h[5]; g = p->h[6]; h = p->h[7]; + + for(i = 0; i < 64; i++) { + s0 = ROR32(a, 2) ^ ROR32(a, 13) ^ ROR32(a, 22); + maj = (a & b) ^ (a & c) ^ (b & c); + t2 = s0 + maj; + s1 = ROR32(e, 6) ^ ROR32(e, 11) ^ ROR32(e, 25); + ch = (e & f) ^ (~e & g); + t1 = h + s1 + ch + T_K[i] + p->w[i]; + + h = g; g = f; f = e; e = d + t1; + d = c; c = b; b = a; a = t1 + t2; + } + + p->h[0] += a; p->h[1] += b; p->h[2] += c; p->h[3] += d; + p->h[4] += e; p->h[5] += f; p->h[6] += g; p->h[7] += h; + + //next block + p->inlen = 0; + } + + void sha256_chunk(sha256_ctx *p, const uint8_t *s, unsigned len) { + unsigned l; + p->len += len; + + while(len) { + l = 64 - p->inlen; + l = (len < l) ? len : l; + + memcpy(p->in + p->inlen, s, l); + s += l; + p->inlen += l; + len -= l; + + if(p->inlen == 64) sha256_block(p); + } + } + + void sha256_final(sha256_ctx *p) { + uint64_t len; + p->in[p->inlen++] = 0x80; + + if(p->inlen > 56) { + memset(p->in + p->inlen, 0, 64 - p->inlen); + sha256_block(p); + } + + memset(p->in + p->inlen, 0, 56 - p->inlen); + + len = p->len << 3; + ST32BE(p->in + 56, len >> 32); + ST32BE(p->in + 60, len); + sha256_block(p); + } + + void sha256_hash(sha256_ctx *p, uint8_t *s) { + uint32_t *t = (uint32_t*)s; + for(unsigned i = 0; i < 8; i++) ST32BE(t++, p->h[i]); + } + + #undef PTR + #undef SWAP32 + #undef ST32 + #undef ST32BE + #undef LD32 + #undef LD32BE + #undef LSL32 + #undef LSR32 + #undef ROR32 +} + +#endif diff --git a/supergameboy/nall/sort.hpp b/supergameboy/nall/sort.hpp new file mode 100644 index 00000000..23c317a5 --- /dev/null +++ b/supergameboy/nall/sort.hpp @@ -0,0 +1,62 @@ +#ifndef NALL_SORT_HPP +#define NALL_SORT_HPP + +#include + +//class: merge sort +//average: O(n log n) +//worst: O(n log n) +//memory: O(n) +//stack: O(log n) +//stable?: yes + +//notes: +//there are two primary reasons for choosing merge sort +//over the (usually) faster quick sort*: +//1: it is a stable sort. +//2: it lacks O(n^2) worst-case overhead. +//(* which is also O(n log n) in the average case.) + +namespace nall { + template + void sort(T list[], unsigned length) { + if(length <= 1) return; //nothing to sort + + //use insertion sort to quickly sort smaller blocks + if(length < 64) { + for(unsigned i = 0; i < length; i++) { + unsigned min = i; + for(unsigned j = i + 1; j < length; j++) { + if(list[j] < list[min]) min = j; + } + if(min != i) swap(list[i], list[min]); + } + return; + } + + //split list in half and recursively sort both + unsigned middle = length / 2; + sort(list, middle); + sort(list + middle, length - middle); + + //left and right are sorted here; perform merge sort + T *buffer = new T[length]; + unsigned offset = 0; + unsigned left = 0; + unsigned right = middle; + while(left < middle && right < length) { + if(list[left] < list[right]) { + buffer[offset++] = list[left++]; + } else { + buffer[offset++] = list[right++]; + } + } + while(left < middle) buffer[offset++] = list[left++]; + while(right < length) buffer[offset++] = list[right++]; + + for(unsigned i = 0; i < length; i++) list[i] = buffer[i]; + delete[] buffer; + } +} + +#endif diff --git a/supergameboy/nall/static.hpp b/supergameboy/nall/static.hpp new file mode 100644 index 00000000..00c3664c --- /dev/null +++ b/supergameboy/nall/static.hpp @@ -0,0 +1,17 @@ +#ifndef NALL_STATIC_HPP +#define NALL_STATIC_HPP + +namespace nall { + template struct static_assert; + template<> struct static_assert {}; + + template struct static_if { + typedef true_type type; + }; + + template struct static_if { + typedef false_type type; + }; +} + +#endif diff --git a/supergameboy/nall/stdint.hpp b/supergameboy/nall/stdint.hpp new file mode 100644 index 00000000..7e2c7a46 --- /dev/null +++ b/supergameboy/nall/stdint.hpp @@ -0,0 +1,44 @@ +#ifndef NALL_STDINT_HPP +#define NALL_STDINT_HPP + +#include + +#if defined(_MSC_VER) + typedef signed char int8_t; + typedef signed short int16_t; + typedef signed int int32_t; + typedef signed long long int64_t; + typedef int64_t intmax_t; + #if defined(_WIN64) + typedef int64_t intptr_t; + #else + typedef int32_t intptr_t; + #endif + + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned int uint32_t; + typedef unsigned long long uint64_t; + typedef uint64_t uintmax_t; + #if defined(_WIN64) + typedef uint64_t uintptr_t; + #else + typedef uint32_t uintptr_t; + #endif +#else + #include +#endif + +namespace nall { + static static_assert int8_t_assert; + static static_assert int16_t_assert; + static static_assert int32_t_assert; + static static_assert int64_t_assert; + + static static_assert uint8_t_assert; + static static_assert uint16_t_assert; + static static_assert uint32_t_assert; + static static_assert uint64_t_assert; +} + +#endif diff --git a/supergameboy/nall/string.hpp b/supergameboy/nall/string.hpp new file mode 100644 index 00000000..94e65b68 --- /dev/null +++ b/supergameboy/nall/string.hpp @@ -0,0 +1,18 @@ +#ifndef NALL_STRING_HPP +#define NALL_STRING_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif diff --git a/supergameboy/nall/string/base.hpp b/supergameboy/nall/string/base.hpp new file mode 100644 index 00000000..24a5b1d4 --- /dev/null +++ b/supergameboy/nall/string/base.hpp @@ -0,0 +1,119 @@ +#ifndef NALL_STRING_BASE_HPP +#define NALL_STRING_BASE_HPP + +#include +#include +#include +#include +#include +#include + +inline char chrlower(char c); +inline char chrupper(char c); +inline int stricmp(const char *dest, const char *src); +inline int strpos (const char *str, const char *key); +inline int qstrpos(const char *str, const char *key); +inline bool strbegin (const char *str, const char *key); +inline bool stribegin(const char *str, const char *key); +inline bool strend (const char *str, const char *key); +inline bool striend(const char *str, const char *key); +inline char* strlower(char *str); +inline char* strupper(char *str); +inline char* strtr(char *dest, const char *before, const char *after); +inline uintmax_t strhex (const char *str); +inline intmax_t strsigned (const char *str); +inline uintmax_t strunsigned(const char *str); +inline uintmax_t strbin (const char *str); +inline double strdouble (const char *str); +inline size_t strhex (char *str, uintmax_t value, size_t length = 0); +inline size_t strsigned (char *str, intmax_t value, size_t length = 0); +inline size_t strunsigned(char *str, uintmax_t value, size_t length = 0); +inline size_t strbin (char *str, uintmax_t value, size_t length = 0); +inline size_t strdouble (char *str, double value, size_t length = 0); +inline bool match(const char *pattern, const char *str); +inline bool strint (const char *str, int &result); +inline bool strmath(const char *str, int &result); +inline size_t strlcpy(char *dest, const char *src, size_t length); +inline size_t strlcat(char *dest, const char *src, size_t length); +inline char* ltrim(char *str, const char *key = " "); +inline char* rtrim(char *str, const char *key = " "); +inline char* trim (char *str, const char *key = " "); +inline char* ltrim_once(char *str, const char *key = " "); +inline char* rtrim_once(char *str, const char *key = " "); +inline char* trim_once (char *str, const char *key = " "); + +namespace nall { + class string; + template inline string to_string(T); + + class string { + public: + inline void reserve(size_t); + inline unsigned length() const; + + inline string& assign(const char*); + inline string& append(const char*); + template inline string& operator= (T value); + template inline string& operator<<(T value); + + inline operator const char*() const; + inline char* operator()(); + inline char& operator[](int); + + inline bool operator==(const char*) const; + inline bool operator!=(const char*) const; + inline bool operator< (const char*) const; + inline bool operator<=(const char*) const; + inline bool operator> (const char*) const; + inline bool operator>=(const char*) const; + + inline string(); + inline string(const char*); + inline string(const string&); + inline string& operator=(const string&); + inline ~string(); + + inline bool readfile(const char*); + inline string& replace (const char*, const char*); + inline string& qreplace(const char*, const char*); + + protected: + char *data; + size_t size; + + #if defined(QT_CORE_LIB) + public: + inline operator QString() const; + #endif + }; + + class lstring : public vector { + public: + template inline lstring& operator<<(T value); + + inline int find(const char*); + inline void split (const char*, const char*, unsigned = 0); + inline void qsplit(const char*, const char*, unsigned = 0); + }; +}; + +inline size_t strlcpy(nall::string &dest, const char *src, size_t length); +inline size_t strlcat(nall::string &dest, const char *src, size_t length); +inline nall::string& strlower(nall::string &str); +inline nall::string& strupper(nall::string &str); +inline nall::string& strtr(nall::string &dest, const char *before, const char *after); +inline nall::string& ltrim(nall::string &str, const char *key = " "); +inline nall::string& rtrim(nall::string &str, const char *key = " "); +inline nall::string& trim (nall::string &str, const char *key = " "); +inline nall::string& ltrim_once(nall::string &str, const char *key = " "); +inline nall::string& rtrim_once(nall::string &str, const char *key = " "); +inline nall::string& trim_once (nall::string &str, const char *key = " "); + +inline nall::string substr(const char *src, size_t start = 0, size_t length = 0); +inline nall::string strhex (uintmax_t value); +inline nall::string strsigned (intmax_t value); +inline nall::string strunsigned(uintmax_t value); +inline nall::string strbin (uintmax_t value); +inline nall::string strdouble (double value); + +#endif diff --git a/supergameboy/nall/string/cast.hpp b/supergameboy/nall/string/cast.hpp new file mode 100644 index 00000000..0b490917 --- /dev/null +++ b/supergameboy/nall/string/cast.hpp @@ -0,0 +1,30 @@ +#ifndef NALL_STRING_CAST_HPP +#define NALL_STRING_CAST_HPP + +namespace nall { + //this is needed, as C++98 does not support explicit template specialization inside classes; + //redundant memory allocation should hopefully be avoided via compiler optimizations. + template<> inline string to_string (bool v) { return v ? "true" : "false"; } + template<> inline string to_string (signed int v) { return strsigned(v); } + template<> inline string to_string (unsigned int v) { return strunsigned(v); } + template<> inline string to_string (double v) { return strdouble(v); } + template<> inline string to_string (char *v) { return v; } + template<> inline string to_string (const char *v) { return v; } + template<> inline string to_string (string v) { return v; } + template<> inline string to_string(const string &v) { return v; } + + template string& string::operator= (T value) { return assign(to_string(value)); } + template string& string::operator<<(T value) { return append(to_string(value)); } + + template lstring& lstring::operator<<(T value) { + operator[](size()).assign(to_string(value)); + return *this; + } + + #if defined(QT_CORE_LIB) + template<> inline string to_string(const QString &v) { return v.toUtf8().constData(); } + string::operator QString() const { return QString::fromUtf8(*this); } + #endif +}; + +#endif diff --git a/supergameboy/nall/string/compare.hpp b/supergameboy/nall/string/compare.hpp new file mode 100644 index 00000000..23d2ee39 --- /dev/null +++ b/supergameboy/nall/string/compare.hpp @@ -0,0 +1,100 @@ +#ifndef NALL_STRING_COMPARE_HPP +#define NALL_STRING_COMPARE_HPP + +char chrlower(char c) { + return (c >= 'A' && c <= 'Z') ? c + ('a' - 'A') : c; +} + +char chrupper(char c) { + return (c >= 'a' && c <= 'z') ? c - ('a' - 'A') : c; +} + +int stricmp(const char *dest, const char *src) { + while(*dest) { + if(chrlower(*dest) != chrlower(*src)) break; + dest++; + src++; + } + + return (int)chrlower(*dest) - (int)chrlower(*src); +} + +int strpos(const char *str, const char *key) { + int ssl = strlen(str), ksl = strlen(key); + + if(ksl > ssl) return -1; + for(int i = 0; i <= ssl - ksl; i++) { + if(!memcmp(str + i, key, ksl)) { + return i; + } + } + return -1; +} + +int qstrpos(const char *str, const char *key) { + int ssl = strlen(str), ksl = strlen(key); + + if(ksl > ssl) return -1; + for(int i = 0; i <= ssl - ksl;) { + uint8_t x = str[i]; + if(x == '\"' || x == '\'') { + uint8_t z = i++; + while(str[i] != x && i < ssl) i++; + if(i >= ssl) i = z; + } + if(!memcmp(str + i, key, ksl)) { + return i; + } else { + i++; + } + } + return -1; +} + +bool strbegin(const char *str, const char *key) { + int i, ssl = strlen(str), ksl = strlen(key); + + if(ksl > ssl) return false; + return (!memcmp(str, key, ksl)); +} + +bool stribegin(const char *str, const char *key) { + int ssl = strlen(str), ksl = strlen(key); + + if(ksl > ssl) return false; + for(int i = 0; i < ksl; i++) { + if(str[i] >= 'A' && str[i] <= 'Z') { + if(str[i] != key[i] && str[i]+0x20 != key[i])return false; + } else if(str[i] >= 'a' && str[i] <= 'z') { + if(str[i] != key[i] && str[i]-0x20 != key[i])return false; + } else { + if(str[i] != key[i])return false; + } + } + return true; +} + +bool strend(const char *str, const char *key) { + int ssl = strlen(str), ksl = strlen(key); + + if(ksl > ssl) return false; + return (!memcmp(str + ssl - ksl, key, ksl)); +} + +bool striend(const char *str, const char *key) { + int ssl = strlen(str), ksl = strlen(key); + + if(ksl > ssl) return false; + for(int i = ssl - ksl, z = 0; i < ssl; i++, z++) { + if(str[i] >= 'A' && str[i] <= 'Z') { + if(str[i] != key[z] && str[i]+0x20 != key[z])return false; + } else if(str[i] >= 'a' && str[i] <= 'z') { + if(str[i] != key[z] && str[i]-0x20 != key[z])return false; + } else { + if(str[i] != key[z])return false; + } + } + return true; +} + +#endif diff --git a/supergameboy/nall/string/convert.hpp b/supergameboy/nall/string/convert.hpp new file mode 100644 index 00000000..da90bb09 --- /dev/null +++ b/supergameboy/nall/string/convert.hpp @@ -0,0 +1,285 @@ +#ifndef NALL_STRING_CONVERT_HPP +#define NALL_STRING_CONVERT_HPP + +char* strlower(char *str) { + if(!str) return 0; + int i = 0; + while(str[i]) { + str[i] = chrlower(str[i]); + i++; + } + return str; +} + +char* strupper(char *str) { + if(!str) return 0; + int i = 0; + while(str[i]) { + str[i] = chrupper(str[i]); + i++; + } + return str; +} + +char* strtr(char *dest, const char *before, const char *after) { + if(!dest || !before || !after) return dest; + int sl = strlen(dest), bsl = strlen(before), asl = strlen(after); + + if(bsl != asl || bsl == 0) return dest; //patterns must be the same length for 1:1 replace + for(unsigned i = 0; i < sl; i++) { + for(unsigned l = 0; l < bsl; l++) { + if(dest[i] == before[l]) { + dest[i] = after[l]; + break; + } + } + } + + return dest; +} + +uintmax_t strhex(const char *str) { + if(!str) return 0; + uintmax_t result = 0; + + //skip hex identifiers 0x and $, if present + if(*str == '0' && (*(str + 1) == 'X' || *(str + 1) == 'x')) str += 2; + else if(*str == '$') str++; + + while(*str) { + uint8_t x = *str++; + if(x >= '0' && x <= '9') x -= '0'; + else if(x >= 'A' && x <= 'F') x -= 'A' - 10; + else if(x >= 'a' && x <= 'f') x -= 'a' - 10; + else break; //stop at first invalid character + result = result * 16 + x; + } + + return result; +} + +intmax_t strsigned(const char *str) { + if(!str) return 0; + intmax_t result = 0; + bool negate = false; + + //check for negation + if(*str == '-') { + negate = true; + str++; + } + + while(*str) { + uint8_t x = *str++; + if(x >= '0' && x <= '9') x -= '0'; + else break; //stop at first invalid character + result = result * 10 + x; + } + + return !negate ? result : -result; +} + +uintmax_t strunsigned(const char *str) { + if(!str) return 0; + uintmax_t result = 0; + + while(*str) { + uint8_t x = *str++; + if(x >= '0' && x <= '9') x -= '0'; + else break; //stop at first invalid character + result = result * 10 + x; + } + + return result; +} + +uintmax_t strbin(const char *str) { + if(!str) return 0; + uintmax_t result = 0; + + //skip bin identifiers 0b and %, if present + if(*str == '0' && (*(str + 1) == 'B' || *(str + 1) == 'b')) str += 2; + else if(*str == '%') str++; + + while(*str) { + uint8_t x = *str++; + if(x == '0' || x == '1') x -= '0'; + else break; //stop at first invalid character + result = result * 2 + x; + } + + return result; +} + +double strdouble(const char *str) { + if(!str) return 0.0; + bool negate = false; + + //check for negation + if(*str == '-') { + negate = true; + str++; + } + + intmax_t result_integral = 0; + while(*str) { + uint8_t x = *str++; + if(x >= '0' && x <= '9') x -= '0'; + else if(x == '.') break; //break loop and read fractional part + else return (double)result_integral; //invalid value, assume no fractional part + result_integral = result_integral * 10 + x; + } + + intmax_t result_fractional = 0; + while(*str) { + uint8_t x = *str++; + if(x >= '0' && x <= '9') x -= '0'; + else break; //stop at first invalid character + result_fractional = result_fractional * 10 + x; + } + + //calculate fractional portion + double result = (double)result_fractional; + while((uintmax_t)result > 0) result /= 10.0; + result += (double)result_integral; + + return !negate ? result : -result; +} + +// + +size_t strhex(char *str, uintmax_t value, size_t length /* = 0 */) { + if(length == 0) length -= 1U; //"infinite" length + size_t initial_length = length; + + //count number of digits in value + int digits_integral = 1; + uintmax_t digits_integral_ = value; + while(digits_integral_ /= 16) digits_integral++; + + int digits = digits_integral; + if(!str) return digits + 1; //only computing required length? + + length = nall::min(digits, length - 1); + str += length; //seek to end of target string + *str = 0; //set null terminator + + while(length--) { + uint8_t x = value % 16; + value /= 16; + *--str = x < 10 ? (x + '0') : (x + 'a' - 10); //iterate backwards to write string + } + + return nall::min(initial_length, digits + 1); +} + +size_t strsigned(char *str, intmax_t value_, size_t length /* = 0 */) { + if(length == 0) length = -1U; //"infinite" length + size_t initial_length = length; + + bool negate = value_ < 0; + uintmax_t value = value_ >= 0 ? value_ : -value_; + + //count number of digits in value + int digits_integral = 1; + uintmax_t digits_integral_ = value; + while(digits_integral_ /= 10) digits_integral++; + + int digits = (negate ? 1 : 0) + digits_integral; + if(!str) return digits + 1; //only computing required length? + + length = nall::min(digits, length - 1); + str += length; //seek to end of target string + *str = 0; //set null terminator + while(length && digits_integral--) { + uint8_t x = '0' + (value % 10); + value /= 10; + *--str = x; //iterate backwards to write string + length--; + } + + if(length && negate) { + *--str = '-'; + } + + return nall::min(initial_length, digits + 1); +} + +size_t strunsigned(char *str, uintmax_t value, size_t length /* = 0 */) { + if(length == 0) length = -1U; //"infinite" length + size_t initial_length = length; + + //count number of digits in value + int digits_integral = 1; + uintmax_t digits_integral_ = value; + while(digits_integral_ /= 10) digits_integral++; + + int digits = digits_integral; + if(!str) return digits_integral + 1; //only computing required length? + + length = nall::min(digits, length - 1); + str += length; //seek to end of target string + *str = 0; //set null terminator + + while(length--) { + uint8_t x = '0' + (value % 10); + value /= 10; + *--str = x; //iterate backwards to write string + } + + return nall::min(initial_length, digits + 1); +} + +size_t strbin(char *str, uintmax_t value, size_t length /* = 0 */) { + if(length == 0) length = -1U; //"infinite" length + size_t initial_length = length; + + //count number of digits in value + int digits_integral = 1; + uintmax_t digits_integral_ = value; + while(digits_integral_ /= 2) digits_integral++; + + int digits = digits_integral; + if(!str) return digits + 1; //only computing required length? + + length = nall::min(digits, length - 1); + str += length; //seek to end of target string + *str = 0; //set null terminator + + while(length--) { + uint8_t x = '0' + (value % 2); + value /= 2; + *--str = x; //iterate backwards to write string + } + + return nall::min(initial_length, digits + 1); +} + +//using sprintf is certainly not the most ideal method to convert +//a double to a string ... but attempting to parse a double by +//hand, digit-by-digit, results in subtle rounding errors. +// +//note: length parameter is currently ignored. +//it remains for consistency and possible future support. +size_t strdouble(char *str, double value, size_t length /* = 0 */) { + char buffer[256]; + sprintf(buffer, "%f", value); + + //remove excess 0's in fraction (2.500000 -> 2.5) + for(char *p = buffer; *p; p++) { + if(*p == '.') { + char *p = buffer + strlen(buffer) - 1; + while(*p == '0') { + if(*(p - 1) != '.') *p = 0; //... but not for eg 1.0 -> 1. + p--; + } + break; + } + } + + length = strlen(buffer); + if(str) strcpy(str, buffer); + return length + 1; +} + +#endif diff --git a/supergameboy/nall/string/core.hpp b/supergameboy/nall/string/core.hpp new file mode 100644 index 00000000..5c16ff5c --- /dev/null +++ b/supergameboy/nall/string/core.hpp @@ -0,0 +1,109 @@ +#ifndef NALL_STRING_CORE_HPP +#define NALL_STRING_CORE_HPP + +namespace nall { + +void string::reserve(size_t size_) { + if(size_ > size) { + size = size_; + data = (char*)realloc(data, size + 1); + data[size] = 0; + } +} + +unsigned string::length() const { + return strlen(data); +} + +string& string::assign(const char *s) { + unsigned length = strlen(s); + reserve(length); + strcpy(data, s); + return *this; +} + +string& string::append(const char *s) { + unsigned length = strlen(data) + strlen(s); + reserve(length); + strcat(data, s); + return *this; +} + +string::operator const char*() const { + return data; +} + +char* string::operator()() { + return data; +} + +char& string::operator[](int index) { + reserve(index); + return data[index]; +} + +bool string::operator==(const char *str) const { return strcmp(data, str) == 0; } +bool string::operator!=(const char *str) const { return strcmp(data, str) != 0; } +bool string::operator< (const char *str) const { return strcmp(data, str) < 0; } +bool string::operator<=(const char *str) const { return strcmp(data, str) <= 0; } +bool string::operator> (const char *str) const { return strcmp(data, str) > 0; } +bool string::operator>=(const char *str) const { return strcmp(data, str) >= 0; } + +string::string() { + size = 64; + data = (char*)malloc(size + 1); + *data = 0; +} + +string::string(const char *value) { + size = strlen(value); + data = strdup(value); +} + +string::string(const string &value) { + size = strlen(value); + data = strdup(value); +} + +string& string::operator=(const string &value) { + assign(value); + return *this; +} + +string::~string() { + free(data); +} + +bool string::readfile(const char *filename) { + assign(""); + + #if !defined(_WIN32) + FILE *fp = fopen(filename, "rb"); + #else + FILE *fp = _wfopen(nall::utf16_t(filename), L"rb"); + #endif + if(!fp) return false; + + fseek(fp, 0, SEEK_END); + size_t size = ftell(fp); + rewind(fp); + char *fdata = new char[size + 1]; + unsigned unused = fread(fdata, 1, size, fp); + fclose(fp); + fdata[size] = 0; + assign(fdata); + delete[] fdata; + + return true; +} + +int lstring::find(const char *key) { + for(unsigned i = 0; i < size(); i++) { + if(operator[](i) == key) return i; + } + return -1; +} + +}; + +#endif diff --git a/supergameboy/nall/string/filename.hpp b/supergameboy/nall/string/filename.hpp new file mode 100644 index 00000000..29dc37d4 --- /dev/null +++ b/supergameboy/nall/string/filename.hpp @@ -0,0 +1,48 @@ +#ifndef NALL_FILENAME_HPP +#define NALL_FILENAME_HPP + +namespace nall { + // "foo/bar.c" -> "foo/", "bar.c" -> "./" + inline string dir(char const *name) { + string result = name; + for(signed i = strlen(result); i >= 0; i--) { + if(result[i] == '/' || result[i] == '\\') { + result[i + 1] = 0; + break; + } + if(i == 0) result = "./"; + } + return result; + } + + // "foo/bar.c" -> "bar.c" + inline string notdir(char const *name) { + for(signed i = strlen(name); i >= 0; i--) { + if(name[i] == '/' || name[i] == '\\') { + name += i + 1; + break; + } + } + string result = name; + return result; + } + + // "foo/bar.c" -> "foo/bar" + inline string basename(char const *name) { + string result = name; + for(signed i = strlen(result); i >= 0; i--) { + if(result[i] == '/' || result[i] == '\\') { + //file has no extension + break; + } + + if(result[i] == '.') { + result[i] = 0; + break; + } + } + return result; + } +} + +#endif diff --git a/supergameboy/nall/string/match.hpp b/supergameboy/nall/string/match.hpp new file mode 100644 index 00000000..70184fec --- /dev/null +++ b/supergameboy/nall/string/match.hpp @@ -0,0 +1,72 @@ +#ifndef NALL_STRING_MATCH_HPP +#define NALL_STRING_MATCH_HPP + +bool match(const char *p, const char *s) { + const char *p_ = 0, *s_ = 0; + + for(;;) { + if(!*s) { + while(*p == '*') p++; + return !*p; + } + + //wildcard match + if(*p == '*') { + p_ = p++, s_ = s; + continue; + } + + //any match + if(*p == '?') { + p++, s++; + continue; + } + + //ranged match + if(*p == '{') { + #define pattern(name_, rule_) \ + if(strbegin(p, name_)) { \ + if(rule_) { \ + p += sizeof(name_) - 1, s++; \ + continue; \ + } \ + goto failure; \ + } + + pattern("{alpha}", (*s >= 'A' && *s <= 'Z') || (*s >= 'a' && *s <= 'z')) + pattern("{alphanumeric}", (*s >= 'A' && *s <= 'Z') || (*s >= 'a' && *s <= 'z') || (*s >= '0' && *s <= '9')) + pattern("{binary}", (*s == '0' || *s == '1')) + pattern("{hex}", (*s >= '0' && *s <= '9') || (*s >= 'A' && *s <= 'F') || (*s >= 'a' && *s <= 'f')) + pattern("{lowercase}", (*s >= 'a' && *s <= 'z')) + pattern("{numeric}", (*s >= '0' && *s <= '9')) + pattern("{uppercase}", (*s >= 'A' && *s <= 'Z')) + pattern("{whitespace}", (*s == ' ' || *s == '\t')) + + #undef pattern + goto failure; + } + + //reserved character match + if(*p == '\\') { + p++; + //fallthrough + } + + //literal match + if(*p == *s) { + p++, *s++; + continue; + } + + //attempt wildcard rematch + failure: + if(p_) { + p = p_, s = s_ + 1; + continue; + } + + return false; + } +} + +#endif diff --git a/supergameboy/nall/string/math.hpp b/supergameboy/nall/string/math.hpp new file mode 100644 index 00000000..604b083e --- /dev/null +++ b/supergameboy/nall/string/math.hpp @@ -0,0 +1,160 @@ +#ifndef NALL_STRING_MATH_HPP +#define NALL_STRING_MATH_HPP + +static int eval_integer(const char *&s) { + if(!*s) throw "unrecognized_integer"; + int value = 0, x = *s, y = *(s + 1); + + //hexadecimal + if(x == '0' && (y == 'X' || y == 'x')) { + s += 2; + while(true) { + if(*s >= '0' && *s <= '9') { value = value * 16 + (*s++ - '0'); continue; } + if(*s >= 'A' && *s <= 'F') { value = value * 16 + (*s++ - 'A' + 10); continue; } + if(*s >= 'a' && *s <= 'f') { value = value * 16 + (*s++ - 'a' + 10); continue; } + return value; + } + } + + //binary + if(x == '0' && (y == 'B' || y == 'b')) { + s += 2; + while(true) { + if(*s == '0' || *s == '1') { value = value * 2 + (*s++ - '0'); continue; } + return value; + } + } + + //octal (or decimal '0') + if(x == '0') { + s += 1; + while(true) { + if(*s >= '0' && *s <= '7') { value = value * 8 + (*s++ - '0'); continue; } + return value; + } + } + + //decimal + if(x >= '0' && x <= '9') { + while(true) { + if(*s >= '0' && *s <= '9') { value = value * 10 + (*s++ - '0'); continue; } + return value; + } + } + + //char + if(x == '\'' && y != '\'') { + s += 1; + while(true) { + value = value * 256 + *s++; + if(*s == '\'') { s += 1; return value; } + if(!*s) throw "mismatched_char"; + } + } + + throw "unrecognized_integer"; +} + +static int eval(const char *&s, int depth = 0) { + while(*s == ' ' || *s == '\t') s++; //trim whitespace + if(!*s) throw "unrecognized_token"; + int value = 0, x = *s, y = *(s + 1); + + if(*s == '(') { + value = eval(++s, 1); + if(*s++ != ')') throw "mismatched_group"; + } + + else if(x == '!') value = !eval(++s, 13); + else if(x == '~') value = ~eval(++s, 13); + else if(x == '+') value = +eval(++s, 13); + else if(x == '-') value = -eval(++s, 13); + + else if((x >= '0' && x <= '9') || x == '\'') value = eval_integer(s); + + else throw "unrecognized_token"; + + while(true) { + while(*s == ' ' || *s == '\t') s++; //trim whitespace + if(!*s) break; + x = *s, y = *(s + 1); + + if(depth >= 13) break; + if(x == '*') { value *= eval(++s, 13); continue; } + if(x == '/') { value /= eval(++s, 13); continue; } + if(x == '%') { value %= eval(++s, 13); continue; } + + if(depth >= 12) break; + if(x == '+') { value += eval(++s, 12); continue; } + if(x == '-') { value -= eval(++s, 12); continue; } + + if(depth >= 11) break; + if(x == '<' && y == '<') { value <<= eval(++++s, 11); continue; } + if(x == '>' && y == '>') { value >>= eval(++++s, 11); continue; } + + if(depth >= 10) break; + if(x == '<' && y == '=') { value = value <= eval(++++s, 10); continue; } + if(x == '>' && y == '=') { value = value >= eval(++++s, 10); continue; } + if(x == '<') { value = value < eval(++s, 10); continue; } + if(x == '>') { value = value > eval(++s, 10); continue; } + + if(depth >= 9) break; + if(x == '=' && y == '=') { value = value == eval(++++s, 9); continue; } + if(x == '!' && y == '=') { value = value != eval(++++s, 9); continue; } + + if(depth >= 8) break; + if(x == '&' && y != '&') { value = value & eval(++s, 8); continue; } + + if(depth >= 7) break; + if(x == '^' && y != '^') { value = value ^ eval(++s, 7); continue; } + + if(depth >= 6) break; + if(x == '|' && y != '|') { value = value | eval(++s, 6); continue; } + + if(depth >= 5) break; + if(x == '&' && y == '&') { value = eval(++++s, 5) && value; continue; } + + if(depth >= 4) break; + if(x == '^' && y == '^') { value = (!eval(++++s, 4) != !value); continue; } + + if(depth >= 3) break; + if(x == '|' && y == '|') { value = eval(++++s, 3) || value; continue; } + + if(x == '?') { + int lhs = eval(++s, 2); + if(*s != ':') throw "mismatched_ternary"; + int rhs = eval(++s, 2); + value = value ? lhs : rhs; + continue; + } + if(depth >= 2) break; + + if(depth > 0 && x == ')') break; + + throw "unrecognized_token"; + } + + return value; +} + +bool strint(const char *s, int &result) { + try { + result = eval_integer(s); + return true; + } catch(const char*) { + result = 0; + return false; + } +} + +bool strmath(const char *s, int &result) { + try { + result = eval(s); + return true; + } catch(const char*) { + result = 0; + return false; + } +} + +#endif diff --git a/supergameboy/nall/string/replace.hpp b/supergameboy/nall/string/replace.hpp new file mode 100644 index 00000000..db405a9b --- /dev/null +++ b/supergameboy/nall/string/replace.hpp @@ -0,0 +1,103 @@ +#ifndef NALL_STRING_REPLACE_HPP +#define NALL_STRING_REPLACE_HPP + +namespace nall { + +string& string::replace(const char *key, const char *token) { + int i, z, ksl = strlen(key), tsl = strlen(token), ssl = length(); + unsigned int replace_count = 0, size = ssl; + char *buffer; + + if(ksl <= ssl) { + if(tsl > ksl) { //the new string may be longer than the old string... + for(i = 0; i <= ssl - ksl;) { //so let's find out how big of a string we'll need... + if(!memcmp(data + i, key, ksl)) { + replace_count++; + i += ksl; + } else i++; + } + size = ssl + ((tsl - ksl) * replace_count); + reserve(size); + } + + buffer = new char[size + 1]; + for(i = z = 0; i < ssl;) { + if(i <= ssl - ksl) { + if(!memcmp(data + i, key, ksl)) { + memcpy(buffer + z, token, tsl); + z += tsl; + i += ksl; + } else buffer[z++] = data[i++]; + } else buffer[z++] = data[i++]; + } + buffer[z] = 0; + + assign(buffer); + delete[] buffer; + } + + return *this; +} + +string& string::qreplace(const char *key, const char *token) { + int i, l, z, ksl = strlen(key), tsl = strlen(token), ssl = length(); + unsigned int replace_count = 0, size = ssl; + uint8_t x; + char *buffer; + + if(ksl <= ssl) { + if(tsl > ksl) { + for(i = 0; i <= ssl - ksl;) { + x = data[i]; + if(x == '\"' || x == '\'') { + l = i; + i++; + while(data[i++] != x) { + if(i == ssl) { + i = l; + break; + } + } + } + if(!memcmp(data + i, key, ksl)) { + replace_count++; + i += ksl; + } else i++; + } + size = ssl + ((tsl - ksl) * replace_count); + reserve(size); + } + + buffer = new char[size + 1]; + for(i = z = 0; i < ssl;) { + x = data[i]; + if(x == '\"' || x == '\'') { + l = i++; + while(data[i] != x && i < ssl)i++; + if(i >= ssl)i = l; + else { + memcpy(buffer + z, data + l, i - l); + z += i - l; + } + } + if(i <= ssl - ksl) { + if(!memcmp(data + i, key, ksl)) { + memcpy(buffer + z, token, tsl); + z += tsl; + i += ksl; + replace_count++; + } else buffer[z++] = data[i++]; + } else buffer[z++] = data[i++]; + } + buffer[z] = 0; + + assign(buffer); + delete[] buffer; + } + + return *this; +} + +}; + +#endif diff --git a/supergameboy/nall/string/split.hpp b/supergameboy/nall/string/split.hpp new file mode 100644 index 00000000..bb77dfcd --- /dev/null +++ b/supergameboy/nall/string/split.hpp @@ -0,0 +1,56 @@ +#ifndef NALL_STRING_SPLIT_HPP +#define NALL_STRING_SPLIT_HPP + +namespace nall { + +void lstring::split(const char *key, const char *src, unsigned limit) { + reset(); + + int ssl = strlen(src), ksl = strlen(key); + int lp = 0, split_count = 0; + + for(int i = 0; i <= ssl - ksl;) { + if(!memcmp(src + i, key, ksl)) { + strlcpy(operator[](split_count++), src + lp, i - lp + 1); + i += ksl; + lp = i; + if(!--limit) break; + } else i++; + } + + operator[](split_count++) = src + lp; +} + +void lstring::qsplit(const char *key, const char *src, unsigned limit) { + reset(); + + int ssl = strlen(src), ksl = strlen(key); + int lp = 0, split_count = 0; + + for(int i = 0; i <= ssl - ksl;) { + uint8_t x = src[i]; + + if(x == '\"' || x == '\'') { + int z = i++; //skip opening quote + while(i < ssl && src[i] != x) i++; + if(i >= ssl) i = z; //failed match, rewind i + else { + i++; //skip closing quote + continue; //restart in case next char is also a quote + } + } + + if(!memcmp(src + i, key, ksl)) { + strlcpy(operator[](split_count++), src + lp, i - lp + 1); + i += ksl; + lp = i; + if(!--limit) break; + } else i++; + } + + operator[](split_count++) = src + lp; +} + +}; + +#endif diff --git a/supergameboy/nall/string/strl.hpp b/supergameboy/nall/string/strl.hpp new file mode 100644 index 00000000..329e8520 --- /dev/null +++ b/supergameboy/nall/string/strl.hpp @@ -0,0 +1,48 @@ +#ifndef NALL_STRING_STRL_HPP +#define NALL_STRING_STRL_HPP + +//strlcpy, strlcat based on OpenBSD implementation by Todd C. Miller + +//return = strlen(src) +size_t strlcpy(char *dest, const char *src, size_t length) { + char *d = dest; + const char *s = src; + size_t n = length; + + if(n) { + while(--n && (*d++ = *s++)); //copy as many bytes as possible, or until null terminator reached + } + + if(!n) { + if(length) *d = 0; + while(*s++); //traverse rest of s, so that s - src == strlen(src) + } + + return (s - src - 1); //return length of copied string, sans null terminator +} + +//return = strlen(src) + min(length, strlen(dest)) +size_t strlcat(char *dest, const char *src, size_t length) { + char *d = dest; + const char *s = src; + size_t n = length; + + while(n-- && *d) d++; //find end of dest + size_t dlength = d - dest; + n = length - dlength; //subtract length of dest from maximum string length + + if(!n) return dlength + strlen(s); + + while(*s) { + if(n != 1) { + *d++ = *s; + n--; + } + s++; + } + *d = 0; + + return dlength + (s - src); //return length of resulting string, sans null terminator +} + +#endif diff --git a/supergameboy/nall/string/trim.hpp b/supergameboy/nall/string/trim.hpp new file mode 100644 index 00000000..8f218c54 --- /dev/null +++ b/supergameboy/nall/string/trim.hpp @@ -0,0 +1,50 @@ +#ifndef NALL_STRING_TRIM_HPP +#define NALL_STRING_TRIM_HPP + +char* ltrim(char *str, const char *key) { + if(!key || !*key) return str; + while(strbegin(str, key)) { + char *dest = str, *src = str + strlen(key); + while(true) { + *dest = *src++; + if(!*dest) break; + dest++; + } + } + return str; +} + +char* rtrim(char *str, const char *key) { + if(!key || !*key) return str; + while(strend(str, key)) str[strlen(str) - strlen(key)] = 0; + return str; +} + +char* trim(char *str, const char *key) { + return ltrim(rtrim(str, key), key); +} + +char* ltrim_once(char *str, const char *key) { + if(!key || !*key) return str; + if(strbegin(str, key)) { + char *dest = str, *src = str + strlen(key); + while(true) { + *dest = *src++; + if(!*dest) break; + dest++; + } + } + return str; +} + +char* rtrim_once(char *str, const char *key) { + if(!key || !*key) return str; + if(strend(str, key)) str[strlen(str) - strlen(key)] = 0; + return str; +} + +char* trim_once(char *str, const char *key) { + return ltrim_once(rtrim_once(str, key), key); +} + +#endif diff --git a/supergameboy/nall/string/utility.hpp b/supergameboy/nall/string/utility.hpp new file mode 100644 index 00000000..1300d326 --- /dev/null +++ b/supergameboy/nall/string/utility.hpp @@ -0,0 +1,75 @@ +#ifndef NALL_STRING_UTILITY_HPP +#define NALL_STRING_UTILITY_HPP + +size_t strlcpy(nall::string &dest, const char *src, size_t length) { + dest.reserve(length); + return strlcpy(dest(), src, length); +} + +size_t strlcat(nall::string &dest, const char *src, size_t length) { + dest.reserve(length); + return strlcat(dest(), src, length); +} + +nall::string substr(const char *src, size_t start, size_t length) { + nall::string dest; + if(length == 0) { + //copy entire string + dest = src + start; + } else { + //copy partial string + strlcpy(dest, src + start, length + 1); + } + return dest; +} + +/* very simplistic wrappers to return nall::string& instead of char* type */ + +nall::string& strlower(nall::string &str) { strlower(str()); return str; } +nall::string& strupper(nall::string &str) { strupper(str()); return str; } +nall::string& strtr(nall::string &dest, const char *before, const char *after) { strtr(dest(), before, after); return dest; } +nall::string& ltrim(nall::string &str, const char *key) { ltrim(str(), key); return str; } +nall::string& rtrim(nall::string &str, const char *key) { rtrim(str(), key); return str; } +nall::string& trim (nall::string &str, const char *key) { trim (str(), key); return str; } +nall::string& ltrim_once(nall::string &str, const char *key) { ltrim_once(str(), key); return str; } +nall::string& rtrim_once(nall::string &str, const char *key) { rtrim_once(str(), key); return str; } +nall::string& trim_once (nall::string &str, const char *key) { trim_once (str(), key); return str; } + +/* arithmetic <> string */ + +nall::string strhex(uintmax_t value) { + nall::string temp; + temp.reserve(strhex(0, value)); + strhex(temp(), value); + return temp; +} + +nall::string strsigned(intmax_t value) { + nall::string temp; + temp.reserve(strsigned(0, value)); + strsigned(temp(), value); + return temp; +} + +nall::string strunsigned(uintmax_t value) { + nall::string temp; + temp.reserve(strunsigned(0, value)); + strunsigned(temp(), value); + return temp; +} + +nall::string strbin(uintmax_t value) { + nall::string temp; + temp.reserve(strbin(0, value)); + strbin(temp(), value); + return temp; +} + +nall::string strdouble(double value) { + nall::string temp; + temp.reserve(strdouble(0, value)); + strdouble(temp(), value); + return temp; +} + +#endif diff --git a/supergameboy/nall/traits.hpp b/supergameboy/nall/traits.hpp new file mode 100644 index 00000000..0e7e0db3 --- /dev/null +++ b/supergameboy/nall/traits.hpp @@ -0,0 +1,97 @@ +#ifndef NALL_TRAITS_HPP +#define NALL_TRAITS_HPP + +namespace nall { + //== + //is + //== + + template struct is_integral { enum { value = false }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + template<> struct is_integral { enum { value = true }; }; + + template struct is_floating_point { enum { value = false }; }; + template<> struct is_floating_point { enum { value = true }; }; + template<> struct is_floating_point { enum { value = true }; }; + template<> struct is_floating_point { enum { value = true }; }; + + template struct is_bool { enum { value = false }; }; + template<> struct is_bool { enum { value = true }; }; + + template struct is_void { enum { value = false }; }; + template<> struct is_void { enum { value = true }; }; + + template struct is_arithmetic { + enum { value = is_integral::value || is_floating_point::value }; + }; + + template struct is_fundamental { + enum { value = is_integral::value || is_floating_point::value || is_void::value }; + }; + + template struct is_compound { + enum { value = !is_fundamental::value }; + }; + + template struct is_array { enum { value = false }; }; + template struct is_array { enum { value = true }; }; + template struct is_array { enum { value = true }; }; + + template struct is_const { enum { value = false }; }; + template struct is_const { enum { value = true }; }; + template struct is_const { enum { value = true }; }; + + template struct is_pointer { enum { value = false }; }; + template struct is_pointer { enum { value = true }; }; + + template struct is_reference { enum { value = false }; }; + template struct is_reference { enum { value = true }; }; + + template struct is_same { enum { value = false }; }; + template struct is_same { enum { value = true }; }; + + //=== + //add + //=== + + template struct add_const { typedef const T type; }; + template struct add_const { typedef const T type; }; + template struct add_const { typedef const T& type; }; + + template struct add_pointer { typedef T* type; }; + template struct add_pointer { typedef T** type; }; + + template struct add_reference { typedef T& type; }; + template struct add_reference { typedef T& type; }; + + //====== + //remove + //====== + + template struct remove_const { typedef T type; }; + template struct remove_const { typedef T type; }; + template struct remove_const { typedef T type; }; + + template struct remove_extent { typedef T type; }; + template struct remove_extent { typedef T type; }; + template struct remove_extent { typedef T type; }; + + template struct remove_pointer { typedef T type; }; + template struct remove_pointer { typedef T type; }; + + template struct remove_reference { typedef T type; }; + template struct remove_reference { typedef T type; }; +} + +#endif diff --git a/supergameboy/nall/ups.hpp b/supergameboy/nall/ups.hpp new file mode 100644 index 00000000..f255ecb3 --- /dev/null +++ b/supergameboy/nall/ups.hpp @@ -0,0 +1,190 @@ +#ifndef NALL_UPS_HPP +#define NALL_UPS_HPP + +#include + +#include +#include +#include +#include + +namespace nall { + class ups { + public: + enum result { + ok, + patch_unreadable, + patch_unwritable, + patch_invalid, + input_invalid, + output_invalid, + patch_crc32_invalid, + input_crc32_invalid, + output_crc32_invalid, + }; + + ups::result create(const char *patch_fn, const uint8_t *x_data, unsigned x_size, const uint8_t *y_data, unsigned y_size) { + if(!fp.open(patch_fn, file::mode_write)) return patch_unwritable; + + crc32 = ~0; + uint32_t x_crc32 = crc32_calculate(x_data, x_size); + uint32_t y_crc32 = crc32_calculate(y_data, y_size); + + //header + write('U'); + write('P'); + write('S'); + write('1'); + encptr(x_size); + encptr(y_size); + + //body + unsigned max_size = max(x_size, y_size); + unsigned relative = 0; + for(unsigned i = 0; i < max_size;) { + uint8_t x = i < x_size ? x_data[i] : 0x00; + uint8_t y = i < y_size ? y_data[i] : 0x00; + + if(x == y) { + i++; + continue; + } + + encptr(i++ - relative); + write(x ^ y); + + while(true) { + if(i >= max_size) { + write(0x00); + break; + } + + x = i < x_size ? x_data[i] : 0x00; + y = i < y_size ? y_data[i] : 0x00; + i++; + write(x ^ y); + if(x == y) break; + } + + relative = i; + } + + //footer + for(unsigned i = 0; i < 4; i++) write(x_crc32 >> (i << 3)); + for(unsigned i = 0; i < 4; i++) write(y_crc32 >> (i << 3)); + uint32_t p_crc32 = ~crc32; + for(unsigned i = 0; i < 4; i++) write(p_crc32 >> (i << 3)); + + fp.close(); + return ok; + } + + ups::result apply(const uint8_t *p_data, unsigned p_size, const uint8_t *x_data, unsigned x_size, uint8_t *&y_data, unsigned &y_size) { + if(p_size < 18) return patch_invalid; + p_buffer = p_data; + + crc32 = ~0; + + //header + if(read() != 'U') return patch_invalid; + if(read() != 'P') return patch_invalid; + if(read() != 'S') return patch_invalid; + if(read() != '1') return patch_invalid; + + unsigned px_size = decptr(); + unsigned py_size = decptr(); + + //mirror + if(x_size != px_size && x_size != py_size) return input_invalid; + y_size = (x_size == px_size) ? py_size : px_size; + y_data = new uint8_t[y_size](); + + for(unsigned i = 0; i < x_size && i < y_size; i++) y_data[i] = x_data[i]; + for(unsigned i = x_size; i < y_size; i++) y_data[i] = 0x00; + + //body + unsigned relative = 0; + while(p_buffer < p_data + p_size - 12) { + relative += decptr(); + + while(true) { + uint8_t x = read(); + if(x && relative < y_size) { + uint8_t y = relative < x_size ? x_data[relative] : 0x00; + y_data[relative] = x ^ y; + } + relative++; + if(!x) break; + } + } + + //footer + unsigned px_crc32 = 0, py_crc32 = 0, pp_crc32 = 0; + for(unsigned i = 0; i < 4; i++) px_crc32 |= read() << (i << 3); + for(unsigned i = 0; i < 4; i++) py_crc32 |= read() << (i << 3); + uint32_t p_crc32 = ~crc32; + for(unsigned i = 0; i < 4; i++) pp_crc32 |= read() << (i << 3); + + uint32_t x_crc32 = crc32_calculate(x_data, x_size); + uint32_t y_crc32 = crc32_calculate(y_data, y_size); + + if(px_size != py_size) { + if(x_size == px_size && x_crc32 != px_crc32) return input_crc32_invalid; + if(x_size == py_size && x_crc32 != py_crc32) return input_crc32_invalid; + if(y_size == px_size && y_crc32 != px_crc32) return output_crc32_invalid; + if(y_size == py_size && y_crc32 != py_crc32) return output_crc32_invalid; + } else { + if(x_crc32 != px_crc32 && x_crc32 != py_crc32) return input_crc32_invalid; + if(y_crc32 != px_crc32 && y_crc32 != py_crc32) return output_crc32_invalid; + if(x_crc32 == y_crc32 && px_crc32 != py_crc32) return output_crc32_invalid; + if(x_crc32 != y_crc32 && px_crc32 == py_crc32) return output_crc32_invalid; + } + + if(p_crc32 != pp_crc32) return patch_crc32_invalid; + return ok; + } + + private: + file fp; + uint32_t crc32; + const uint8_t *p_buffer; + + uint8_t read() { + uint8_t n = *p_buffer++; + crc32 = crc32_adjust(crc32, n); + return n; + } + + void write(uint8_t n) { + fp.write(n); + crc32 = crc32_adjust(crc32, n); + } + + void encptr(uint64_t offset) { + while(true) { + uint64_t x = offset & 0x7f; + offset >>= 7; + if(offset == 0) { + write(0x80 | x); + break; + } + write(x); + offset--; + } + } + + uint64_t decptr() { + uint64_t offset = 0, shift = 1; + while(true) { + uint8_t x = read(); + offset += (x & 0x7f) * shift; + if(x & 0x80) break; + shift <<= 7; + offset += shift; + } + return offset; + } + }; +} + +#endif diff --git a/supergameboy/nall/utf8.hpp b/supergameboy/nall/utf8.hpp new file mode 100644 index 00000000..c66c341a --- /dev/null +++ b/supergameboy/nall/utf8.hpp @@ -0,0 +1,72 @@ +#ifndef NALL_UTF8_HPP +#define NALL_UTF8_HPP + +//UTF-8 <> UTF-16 conversion +//used only for Win32; Linux, etc use UTF-8 internally + +#if defined(_WIN32) + +#undef _WIN32_WINNT +#define _WIN32_WINNT 0x0501 +#undef NOMINMAX +#define NOMINMAX +#include +#undef interface + +namespace nall { + //UTF-8 to UTF-16 + class utf16_t { + public: + operator wchar_t*() { + return buffer; + } + + operator const wchar_t*() const { + return buffer; + } + + utf16_t(const char *s = "") { + if(!s) s = ""; + unsigned length = MultiByteToWideChar(CP_UTF8, 0, s, -1, 0, 0); + buffer = new wchar_t[length + 1](); + MultiByteToWideChar(CP_UTF8, 0, s, -1, buffer, length); + } + + ~utf16_t() { + delete[] buffer; + } + + private: + wchar_t *buffer; + }; + + //UTF-16 to UTF-8 + class utf8_t { + public: + operator char*() { + return buffer; + } + + operator const char*() const { + return buffer; + } + + utf8_t(const wchar_t *s = L"") { + if(!s) s = L""; + unsigned length = WideCharToMultiByte(CP_UTF8, 0, s, -1, 0, 0, (const char*)0, (BOOL*)0); + buffer = new char[length + 1](); + WideCharToMultiByte(CP_UTF8, 0, s, -1, buffer, length, (const char*)0, (BOOL*)0); + } + + ~utf8_t() { + delete[] buffer; + } + + private: + char *buffer; + }; +} + +#endif //if defined(_WIN32) + +#endif diff --git a/supergameboy/nall/utility.hpp b/supergameboy/nall/utility.hpp new file mode 100644 index 00000000..fa73f8cb --- /dev/null +++ b/supergameboy/nall/utility.hpp @@ -0,0 +1,36 @@ +#ifndef NALL_UTILITY_HPP +#define NALL_UTILITY_HPP + +namespace nall { + template + inline void swap(T &x, T &y) { + T temp(x); + x = y; + y = temp; + } + + template + struct base_from_member { + T value; + base_from_member(T value_) : value(value_) {} + }; + + class noncopyable { + protected: + noncopyable() {} + ~noncopyable() {} + + private: + noncopyable(const noncopyable&); + const noncopyable& operator=(const noncopyable&); + }; + + template + inline T* allocate(size_t size, const T &value) { + T *array = new T[size]; + for(size_t i = 0; i < size; i++) array[i] = value; + return array; + } +} + +#endif diff --git a/supergameboy/nall/varint.hpp b/supergameboy/nall/varint.hpp new file mode 100644 index 00000000..cc3bb17c --- /dev/null +++ b/supergameboy/nall/varint.hpp @@ -0,0 +1,92 @@ +#ifndef NALL_VARINT_HPP +#define NALL_VARINT_HPP + +#include +#include +#include + +namespace nall { + template class uint_t { + private: + enum { bytes = (bits + 7) >> 3 }; //minimum number of bytes needed to store value + typedef typename static_if< + sizeof(int) >= bytes, + unsigned int, + typename static_if< + sizeof(long) >= bytes, + unsigned long, + typename static_if< + sizeof(long long) >= bytes, + unsigned long long, + void + >::type + >::type + >::type T; + static_assert::value> uint_assert; + T data; + + public: + inline operator T() const { return data; } + inline T operator ++(int) { T r = data; data = uclip(data + 1); return r; } + inline T operator --(int) { T r = data; data = uclip(data - 1); return r; } + inline T operator ++() { return data = uclip(data + 1); } + inline T operator --() { return data = uclip(data - 1); } + inline T operator =(const T i) { return data = uclip(i); } + inline T operator |=(const T i) { return data = uclip(data | i); } + inline T operator ^=(const T i) { return data = uclip(data ^ i); } + inline T operator &=(const T i) { return data = uclip(data & i); } + inline T operator<<=(const T i) { return data = uclip(data << i); } + inline T operator>>=(const T i) { return data = uclip(data >> i); } + inline T operator +=(const T i) { return data = uclip(data + i); } + inline T operator -=(const T i) { return data = uclip(data - i); } + inline T operator *=(const T i) { return data = uclip(data * i); } + inline T operator /=(const T i) { return data = uclip(data / i); } + inline T operator %=(const T i) { return data = uclip(data % i); } + + inline uint_t() : data(0) {} + inline uint_t(const T i) : data(uclip(i)) {} + }; + + template class int_t { + private: + enum { bytes = (bits + 7) >> 3 }; //minimum number of bytes needed to store value + typedef typename static_if< + sizeof(int) >= bytes, + signed int, + typename static_if< + sizeof(long) >= bytes, + signed long, + typename static_if< + sizeof(long long) >= bytes, + signed long long, + void + >::type + >::type + >::type T; + static_assert::value> int_assert; + T data; + + public: + inline operator T() const { return data; } + inline T operator ++(int) { T r = data; data = sclip(data + 1); return r; } + inline T operator --(int) { T r = data; data = sclip(data - 1); return r; } + inline T operator ++() { return data = sclip(data + 1); } + inline T operator --() { return data = sclip(data - 1); } + inline T operator =(const T i) { return data = sclip(i); } + inline T operator |=(const T i) { return data = sclip(data | i); } + inline T operator ^=(const T i) { return data = sclip(data ^ i); } + inline T operator &=(const T i) { return data = sclip(data & i); } + inline T operator<<=(const T i) { return data = sclip(data << i); } + inline T operator>>=(const T i) { return data = sclip(data >> i); } + inline T operator +=(const T i) { return data = sclip(data + i); } + inline T operator -=(const T i) { return data = sclip(data - i); } + inline T operator *=(const T i) { return data = sclip(data * i); } + inline T operator /=(const T i) { return data = sclip(data / i); } + inline T operator %=(const T i) { return data = sclip(data % i); } + + inline int_t() : data(0) {} + inline int_t(const T i) : data(sclip(i)) {} + }; +} + +#endif diff --git a/supergameboy/nall/vector.hpp b/supergameboy/nall/vector.hpp new file mode 100644 index 00000000..aeff81c0 --- /dev/null +++ b/supergameboy/nall/vector.hpp @@ -0,0 +1,162 @@ +#ifndef NALL_VECTOR_HPP +#define NALL_VECTOR_HPP + +#include +#include +#include +#include + +namespace nall { + //linear_vector + //memory: O(capacity * 2) + // + //linear_vector uses placement new + manual destructor calls to create a + //contiguous block of memory for all objects. accessing individual elements + //is fast, though resizing the array incurs significant overhead. + //reserve() overhead is reduced from quadratic time to amortized constant time + //by resizing twice as much as requested. + // + //if objects hold memory address references to themselves (introspection), a + //valid copy constructor will be needed to keep pointers valid. + + template class linear_vector : noncopyable { + protected: + T *pool; + unsigned poolsize, objectsize; + + public: + unsigned size() const { return objectsize; } + unsigned capacity() const { return poolsize; } + + void reset() { + if(pool) { + for(unsigned i = 0; i < objectsize; i++) pool[i].~T(); + free(pool); + } + pool = 0; + poolsize = 0; + objectsize = 0; + } + + void reserve(unsigned newsize) { + newsize = bit::round(newsize); //round to nearest power of two (for amortized growth) + + T *poolcopy = (T*)malloc(newsize * sizeof(T)); + for(unsigned i = 0; i < min(objectsize, newsize); i++) new(poolcopy + i) T(pool[i]); + for(unsigned i = 0; i < objectsize; i++) pool[i].~T(); + free(pool); + pool = poolcopy; + poolsize = newsize; + objectsize = min(objectsize, newsize); + } + + void resize(unsigned newsize) { + if(newsize > poolsize) reserve(newsize); + + if(newsize < objectsize) { + //vector is shrinking; destroy excess objects + for(unsigned i = newsize; i < objectsize; i++) pool[i].~T(); + } else if(newsize > objectsize) { + //vector is expanding; allocate new objects + for(unsigned i = objectsize; i < newsize; i++) new(pool + i) T; + } + + objectsize = newsize; + } + + void add(const T data) { + if(objectsize + 1 > poolsize) reserve(objectsize + 1); + new(pool + objectsize++) T(data); + } + + inline T& operator[](unsigned index) { + if(index >= objectsize) resize(index + 1); + return pool[index]; + } + + inline const T& operator[](unsigned index) const { + if(index >= objectsize) throw "vector[] out of bounds"; + return pool[index]; + } + + linear_vector() : pool(0), poolsize(0), objectsize(0) {} + ~linear_vector() { reset(); } + }; + + //pointer_vector + //memory: O(1) + // + //pointer_vector keeps an array of pointers to each vector object. this adds + //significant overhead to individual accesses, but allows for optimal memory + //utilization. + // + //by guaranteeing that the base memory address of each objects never changes, + //this avoids the need for an object to have a valid copy constructor. + + template class pointer_vector : noncopyable { + protected: + T **pool; + unsigned poolsize, objectsize; + + public: + unsigned size() const { return objectsize; } + unsigned capacity() const { return poolsize; } + + void reset() { + if(pool) { + for(unsigned i = 0; i < objectsize; i++) { if(pool[i]) delete pool[i]; } + free(pool); + } + pool = 0; + poolsize = 0; + objectsize = 0; + } + + void reserve(unsigned newsize) { + newsize = bit::round(newsize); //round to nearest power of two (for amortized growth) + + for(unsigned i = newsize; i < objectsize; i++) { + if(pool[i]) { delete pool[i]; pool[i] = 0; } + } + + pool = (T**)realloc(pool, newsize * sizeof(T*)); + for(unsigned i = poolsize; i < newsize; i++) pool[i] = 0; + poolsize = newsize; + objectsize = min(objectsize, newsize); + } + + void resize(unsigned newsize) { + if(newsize > poolsize) reserve(newsize); + + for(unsigned i = newsize; i < objectsize; i++) { + if(pool[i]) { delete pool[i]; pool[i] = 0; } + } + + objectsize = newsize; + } + + void add(const T data) { + if(objectsize + 1 > poolsize) reserve(objectsize + 1); + pool[objectsize++] = new T(data); + } + + inline T& operator[](unsigned index) { + if(index >= objectsize) resize(index + 1); + if(!pool[index]) pool[index] = new T; + return *pool[index]; + } + + inline const T& operator[](unsigned index) const { + if(index >= objectsize || !pool[index]) throw "vector[] out of bounds"; + return *pool[index]; + } + + pointer_vector() : pool(0), poolsize(0), objectsize(0) {} + ~pointer_vector() { reset(); } + }; + + //default vector type + template class vector : public linear_vector {}; +} + +#endif diff --git a/supergameboy/supergameboy.cpp b/supergameboy/supergameboy.cpp new file mode 100644 index 00000000..0c011af7 --- /dev/null +++ b/supergameboy/supergameboy.cpp @@ -0,0 +1,68 @@ +#include "supergameboy.hpp" + +#ifdef _WIN32 + #define dllexport __declspec(dllexport) +#else + #define dllexport +#endif + +#include +#include +#include + +#include + +dllexport void sgb_rom(uint8_t *data, unsigned size) { + supergameboy.romdata = data; + supergameboy.romsize = size; +} + +dllexport void sgb_ram(uint8_t *data, unsigned size) { + supergameboy.ramdata = data; + supergameboy.ramsize = size; +} + +dllexport void sgb_rtc(uint8_t *data, unsigned size) { + supergameboy.rtcdata = data; + supergameboy.rtcsize = size; +} + +dllexport bool sgb_init(bool version) { + return supergameboy.init(version); +} + +dllexport void sgb_term() { + supergameboy.term(); +} + +dllexport void sgb_power() { + supergameboy.power(); +} + +dllexport void sgb_reset() { + supergameboy.reset(); +} + +dllexport void sgb_row(unsigned row) { + supergameboy.row(row); +} + +dllexport uint8_t sgb_read(uint16_t addr) { + return supergameboy.read(addr); +} + +dllexport void sgb_write(uint16_t addr, uint8_t data) { + supergameboy.write(addr, data); +} + +dllexport unsigned sgb_run(uint32_t *samplebuffer, unsigned clocks) { + return supergameboy.run(samplebuffer, clocks); +} + +dllexport void sgb_save() { + supergameboy.save(); +} + +dllexport void sgb_serialize(nall::serializer &s) { + supergameboy.serialize(s); +} diff --git a/supergameboy/supergameboy.hpp b/supergameboy/supergameboy.hpp new file mode 100644 index 00000000..715e4893 --- /dev/null +++ b/supergameboy/supergameboy.hpp @@ -0,0 +1,32 @@ +#ifndef SUPERGAMEBOY_HPP +#define SUPERGAMEBOY_HPP + +#include +#include +#include +#include + +#include +#include +using namespace nall; + +#include +#include + +extern "C" { + void sgb_rom(uint8_t *data, unsigned size); + void sgb_ram(uint8_t *data, unsigned size); + void sgb_rtc(uint8_t *data, unsigned size); + bool sgb_init(bool version); + void sgb_term(); + void sgb_power(); + void sgb_reset(); + void sgb_row(unsigned row); + uint8_t sgb_read(uint16_t addr); + void sgb_write(uint16_t addr, uint8_t data); + unsigned sgb_run(uint32_t *samplebuffer, unsigned clocks); + void sgb_save(); + void sgb_serialize(nall::serializer &s); +} + +#endif diff --git a/supergameboy/sync.sh b/supergameboy/sync.sh new file mode 100644 index 00000000..4bbaf34f --- /dev/null +++ b/supergameboy/sync.sh @@ -0,0 +1,2 @@ +rm -r nall +cp -r ../nall ./nall

8h#g{eU*j`)P7Z&NNJ#ZFq(spgXk1vwaxRfrE z?NHK`Kw2ZkD{v_XWf1Qqa8l9sBlF40L1K}0!)H$?tuk+|7S#hcPwfC`Ewrh@(Ma`TQ-jkP+N<`j zA_up8YYN>sX>F0N6N|KN8pvZbHMLC{)tZV(ft``{M57S`QL1z7c>c50jRTaWq=EpS{CoqIGgfzVYIk( zH=l4Cr)sE&TYly~%V1hKNNmpIt)boYd}X4&PkYrV^tG0j9XPrp7FX#}@5oDgq~7H= zc8k^svWRq}@wq|2Du+k9sdK9i(mXib@+W9Hg>GXrSik=@6#KuLR5w^P#bIeIITo1dDS^?b&ZbM9|M{~+IqV5 zaz03Pery{;(wJVlTDl9o358jX3aZIGIZ@xEr#r8A2H9=K$<^PhoRwq?;BLI3D;{>; z;~bZ#7|^RA|EYyHm(O_?C89yakzc^0Al_gcOBehwG>q$Fctt^eKFglE6#YL7Y|JIX z<%*jKgV^c#M7tz=n7-(hlxswOR_-*ejI4c9V-jlxZ>A0?yW*L}4RB5_SDrYzcwJO9 zzksKZwf6R55f`PHTEdD+mzI^&9D4Pnub-~s55}^U)RfmXxHXP-m|EOz=5K$j$>KHd zeAIQW8{3VQ?&-q~4Lq^DtZ~BhIz327gD^Ta{%C?36cogmoO=2O!;gB7J2U&TMd>eQ z?ahTA*cS>kWikn|fqgdh+7X4}77-{xpT^1@1I@CC*{aAWE#C|{UBmn3`rHY&kNrq0 zJCYMrUSdv|4F60n5q-F;h`snZop<-iI_9|Ukh1eSef^T5Oy)69M%t@c+P8v?dG-wB zZ%Qi#mZBkvVz=iF9d3w;3!u){@!n@w7KUmE#S44$W+m*&pvfh<{4JO9lde)-N<duk5{HW&!_iRpyIz64=Qkb-s z?#?FjIE|K66F7Xq)FnUih~jaQn~s{u?H7%m^y=CiFwh1Z- zx{&N+nT~5H$d`JIKi^5-_e6UIy}>Zk0=<3ys8_JE`o8h+bf-$|Q&`_K`jqs*YauBq z1*7Gd6x};6;+6B*4E(v(Dx~0AN#a+g0=z!yiY0eiZhw4WJOy0AjE|2Epknk{Ur`Ls zUw1B>kE)x^q8Jd<(4^pCHjT;R;NT!-Qv#ah7>p0j)%_F@Kn~(44A=_b!l=G6^-woq z>hW?g+}h}6u1%9U{5U_s=%)xlS>rSj^|@c=z_=uZ)gVVD52KaKmeD8SVSB%U z2g_4eM9QPiCcbf^+c&(8D+!hpi7_#P#s;K)0G&0;0Aez`0M~htk6wWm5G058K^paM zS4(l?7qC!lm>5atp58ITUGq8c{L#Wo`%xLrp|YvJ2G}V#@>Ts9Ayx2G0^a$ z!EdF^=n$%!;14G?UK_QO1UpdvM{7j|>TRFo)i7U(npHegR{G)cWSd|virHnu=RwLT zTu&&W8&?VHe|O4qzN=s-%l`iUg?vrS+{nd6Ad1iT%0; z2_IGD-5ma&B>namBM|A)LxDx%%0wjG*SAO>EOwT-Hj5IR;H<01pb(4=DHIhX_%y}*Bx@rF!-X*5?NO|otecQ5fL zI_W>$J;M-Gk{8Nu#UL#CifH(iA=6fzL5eBLhHDGN{Y)G>9|OT8U;C>9U_?+*F~!%C zL=dh0gecZpM+F{!aUu{!JS0|Cp?ui_Zt7HEYMW32k~$@Q z5K`C}B2<{f5JyNpFFF>S+cb7A+7~pU=-#I%oC~CghZj<(CyP0YwdYoOy{V0Z0;$wQ z$g-0}bV=JXAItS#%cf+WuT=5OWI}OxX@6@Oct1<@v3ay4J;B_vu{NyS@Kele{~unH zas$@T%3dm@wO;0e2d&V^ON4Lz?+78+-vvuDASGP4aaWMs20nZPC#eAy^@ z>MsOMcvdIdq;y()y4WSu?{wbgoSHVhpVzm-UB*7ysYvM?D0r5AXPj|ifNaA~ohq>p zdGba4$u`BJNRvHx@MiR*nsU-VVi`VI2=$2m11^8yM`+#KJCuNXeKNa^$5lD(GU7YW7 zZ>N{$g!TC+wgCMgW+4>Ejpx>fsj*QYRi=7Wj)X4A8TM8q4meU;JSLvaFY8T|KyA=_ zy4X+76S^6#UM{5;q)*?j?-UoV_%HGJ0Qbg zN*h8r#}*16jx7P`hCPmN>LP+At(rtzM@?au-5!--df(jjxhrSNa!nVycTbprDZ?&^ z+`rHAP&b8NZ&H!YW;Pu{&o$d;F-@AkiXkR5y<1w|O=h}QzY}h4W%=|Yo>sLH^hK#{ zkA2z+8ZyG|t&%~OD$I_KTb3-3{$-&D54;&`L6n+@4=K}=6q0`@jdjRQ!ih&%)*&AS zPV0mUkp#JX2w^{&EO@1#-N~Bhn;IuiBxFU%p0|L8T*D~tIiIxt)o0@!&}H;KT=_Sh zKuC%ksC2Uu@}y7yx@GOnC?1B+}_G_@2w@F6XASg)I9QE-R9UzL&q7U1Q za|Vs9{JJ?nbx|F~{rWZL7v0!$e3g6OsC+yXg-$n=+n+d{jY4NL&Q7uzG|*8~euwdx zA2wMO8*U}Tr_bJk`YDtBmHS>MD*Df7M(j?-kG1dH%?^>DAQltDfUVnb8%^!~n!_bs zB=SRj1r;PB0vKpwI`er*67T%at(4705_<{jYuOoHBY&!0&4 z;^F-v2E0SGb3jlw-X)Fr`MXaa8dmFPmSnw+HV#0o@W&MI@WGg;i_;{(>?2I+%23mPuQ?nP2*M#i+xR|=FaDP z7;tSniz;u=rLKOfZcLI>v|i#lC3PVHxTA?QN-n@wTa%~xsf{n(e(N(SDdS%|zZT=8 zh83s3o}u=Us!*T4mTW$#V1^nMp*A=uf3kL!LlE;kVH@v&w8FASa#-FS0-=!9#N7=! z|B`D;(JtZj=XT)?#|fv=&l}~t4Me=41vfPE-RFW=z>#-=om1t7oULa@wxC~!S8>A_(m74f2#tI&lNi$lWioSDaVclKwjv8|Ofqo?Ij67(dK*@lnBYm1G^4?A=T$ zeud4v?cjo4USnp2O=Huww+ZoF$7v4KzhrEc_mdLRq(ca?czTW5Z;HKUDQz?=awjFa zI4ipcosFV?YWQ^JeceOlWUI%YY*M29Ftn>)Fh0GdkU1k!rrkZGjZZ}4`(42Cr#4a& z5s@swyqc!O)Mo}}BgHvDf1L8vjIIF}(`a|UI z8=wZm;6s#4Dw6_cMu*3MSu*_+D^95-Jd`A;f4&?YJN<#;P3Z8AjZ@K2V#Kd}h)+Oi z44Lr!NTi%;R|zcQTxQdA^-F3g?o!?P%r&X@Uh)K`B|MY=X3nF+gT{XNr@grT1o_+8 z$}p#TY_@J;n8Le9?h~;eh2Gr?HB#IGh~~XB3Nw9o`ihKc+r`51nIpD6pTd;F;DWEJ z*r4gjsf1bwo+km`=lje@w_)lIGBYq%x~p&gw>Io~TFG=mr$doXN_0SARSMSIvfBaH z*CehY`&*IQw`fBmtFYFyi2PFJuY*EaS$N^Og{lp(Ti>=O@9#+uss6n`_O=dS=#)T$zH`zi$YkaF z5v;w+@+70qA$%f&#Q^VZGp?nG7^wO<=6>T38zkO6c7*d#al+lfy^wBt>Ciq9t2*d# zgP0;#q59|MN`M%%c82zO^_3{acfa~=R6;;t$;55xAamV?`79U{oN-E-riMB@;O$G117hRdGK240&4i&;z2 z@t0|V?gZSst3F|plhC64+qXQ(xzvDJ4;36R2q22XEjo5naNSOt+~b!*xLR+*4L8o` zt?5dL_7J{i+O5pEiao$0R-dd`7H>CO+-@dgjTtcG!Rel*JSm9AGek+)wJx?b|<$i91jdcx3 zdKZ7(b~D_&Ngi^5+~^F(`eF6AZhQ%;#8jT^j=rfATa_mK`Zmqm0DS{>%dyy=uqZpJ zS_Q1quZpM6pCKRRYpdpm=}*eiZoe(yU7^QlKXfRd+8a!gmdj3-e-@@mG=A)~ardQ> zrD%hMv0@%J$aQHcNN>EK-t}y3S=7dz#z*riCaUFEZWS@<+-cEoZxx<3*pgWiE-b!w zru2p|HLTG`{oYdSuX-$>>R@Il_X9CTk}3Ve#GH+ z5BJC)PBH#&A+}R)ZqGVz!NrJII5<>-V&4^I?4nK`{}VXHe~d`rUYW~!t_&~~aM{7o zx4%3Gbr8$HwG$<;4|{3#B0&51EMoyXypfl3rlIVAtp(w+_)&Jxt?sNi!#qd!od3YU z9Hr@t_alJ^9fVl8-V~6F67#oE9}sU0+AAIUSp7@9LLL%KI-1qfBYFhygp_;u2oX<} zm0oqv7}~nck*}srA^p3rz|(5;4JSa-4%QhQ2=TxN=>EK69o{`0<97dk40ny|4w^+4 zXCJz;+Di+1HFzC3mo`xgw0QD4m@^?Qgkr=mpr)UL_iO*Ko3Pb#XS@%Sg*b7?LZ=69 z{$}$Aw{yLL5TJR(9o5`9_Z+AG-{?%S_2yeHyemayXaNpVB_>0~o=MD`VZhwe1FC-6dq7%}*N+5HPoNWk3VzsJWorb(6&h)m551Qg?I(ga2LEg(j$9GHM`XJkf!IV2s=w5&Boen0MlosT%~sROtcRlFk<|^zaJ5^G|4q~0{iWoY3T|$ya6>jfK{wx} z9PX{bHs|4+(;S;4oSXd}^4?Dnn-5W1!t6Cyb6ilw-%}c`{MA;!4S5r&J9NXnk+pT* z^E~M*KQ?oao9TRN={TjWu~KgSfC7OBGW(>a3EYM2T{!QZVfIC@3PQ>7Z zY_7mOAm>NTudp=(GH)9RcL+SE`FU0;I4EJ3Ha46PnX%;*nBPJke7IR-(sR+14e|Gd+LfaeDbm02=vFCAdo~6*79p12HRk;L z7{QbEN2pKiKq`_54SmfoO-c#x(5u2+2`$v3V)L-tjvhzWwFY}zV3;{0Fh6Vbh&RN!~KD02Z7l7t=3qWfe~#o4*hcoK*IZVugPsF9z?QbosNsq-9!Y; zD^>I3JH0Qt+eHly$#}$lc_6X5WKPfIrG*Z*(+7s;nM!#VQ+e$LbsM#D4yz0Q_g`tZyB+ zME%d$X6@FLA%rL6m8sv=89NXk2m|jTO&#fMKGXo-AHEf5;6UU|xOIzosySm=StBru zs}A|~2)J4zcZe{*jWvM>mMl7QdV1*1M9T4T%>V7OVde>0vP-fR7%IcmuI89r@jqF9 zjjNKx{TU2TUs6nG#C%^H%I*l{-9k-G+YhO&4S|c{vVbyUPDz`DrGEwurr<*l5_@N!#t7`&p)&x0t+@BWgjUU3+=$8y^Cti+SpNm zcJ5=Nud44tB^RR$=eU17#9C_CTL23Lh)Vw6A0{AT+5KNBWbJBmxJ%c3Y?;$be0_gy}rMW3qX9>zjklYtia6V__U>v zp*7x6;wlNMWLPkuC!auE?i4Tszqd_4GKfzG*`5ZO+^R-dzTPw(U%`e&D7oOHvLb;4 z&D(d*oW$c_%_RT*w(a`D@CgF*i;O6%@jXQC7}<(d=pQEV9$O!iL6wG_JlSGuOGbXH zboI&ipW_5Jv>%e0xw+p1XSxLR2RUl@bA&WEwArg(n!Z^_wvfU8J8_j+?)ncIx>{8E zq4&=*A?B7KN;LSKie+{(>2hhi)(ym}vrP7T3&T{1V`W1O18Ts01FQ@)K7=Ll_v`Ug zu>Aw5m}u@wqX=;3h8gKQJIE;1ssG2${wII``3qY+xw-pm7~N(n7ke`xwNPU66Nh!XPb^x8m(>Bg-Q$0>T!P`&9;McY$9=Urfb`VRhjRuc9=P zFKo3=gG+>8l~bw->S#82@l{8mO=#Txt0Qwq*Pq}1bsFqe<&!DiAN(Z9MnH-J%<6X_ zTV(V~6khrYWk2;jci54%DTYb0`7QS>Qn)U2A3qJi#c~4a=AZn3B||{pYwnreN`PNH zSqZ5@BAy)vTzkh$G4sjci{J^N{gQg(8GVU>KX3-w%Z2bm`0pM);e0w4;D9yuc5t z!lP6mpaY4#(Q*Qb5CDpxKq?VmX%E2*VLH!#d8#3_pn8Tdyq)J(yBV8EEMm_4#;>dE-DO9A2E4di@^yzd5iRdh-J+Xf^$X621nXHzZyM#dWWa$KuzcKgLb<9 zi1}2ocyw5`R|yhvd=|kdPQPkHIm5Cw-TU*v=A_*zz%fkh5j(=6%WUn7drrQ0%^&RL z27d7A8Z4i##EyNP@`53LoET}`coU9b-`MM%1@a*U(AEY?G!Zp>RImWr%3dx>Mh2(E z;)E$t)6z4nvNfo{n?1I)oo2z{I=XsTN+55Hg9E`kVL9YzQ#LgKV9C%8#_iQ@`X-!{ zE>0G>Ia;@PIc?;17JPwdYQw;K&+Ca=stPlp1Rw}ZAbF!9Pz-Ai#s-8D!b^m;cze5T z>&xGjOp~FaiEO-t-Cl`9Gba!Qtm&0Iy=XO-)o1Iqm>7%vjk8F? zA0g7dQ1|2Ng}66*11%S>yT`p$Gali&QLZ#Dq%^m^sgn=g%PGa$J(YJcM{51YWIgqP zUZB{d%Ff3V25}z`&t?T{{aBj*@bK&dQvS+BmlR!Sh2wgMEPPhH`BgbqbFcq$S%;cX z84?oXHdp$Ps;oFaK?F69lRn*&&-g$d<(D@3b-^G`C(dF5|Lq?JFD#Z*EM=NIrkAvX zob(-eGu}2o3$lKkQ{mP4I01dj%esvyr$m{4oMwNtlkU2H{~Y@;%^DFP23RY&^;8kg@x4>9^u_ zSLa9D+K~-G)~!e+Qn5G48Yw`Pub{HXQ<&B&6#^n6tfU4OeMFxt-qhr+%YB6Wb_wH8 z-MiNJYhEVrx~+->+TPG_SWN4VOgtzdJusi$O{H=Eear>^jT6u%7CC4wLpRy~))XwXm(P8VO_6&qEv2iMe-9ojTzk7jVtVc`MGDr-G}w&(BET-7 zq926k5aQHlQcZ;sV*S?<&Ryb1+jv$65iSu^Rw}m`kA(RMMVx}np8KEzef;dhdsT_| z*@<;l#6T_0v&horqQ7`g(*hbL=*Qz9Ya9jR#88C_Juj8uJYG&4Y4fX2q1D1lL zNh*xHCio?EP31xv(8Xp~c(nxh+X~ z$&6IA895>gzi;ks4zTtb?GxPZx?1GknqiqEq)s=8(@+)|_H|hJ<@hg-t0Q4)>mQ03 zn*aogbmqsOs7+D%C|AF=pM$uj@q!VIa)AU~esi~UcL4d%)O;B44}ZS^wjuR2^EQJc zEJYa{b2R9D#M)Dpizzzd<=+}m&)Ij7CtcX@{KrD-Fx`QUSbaDTN?&0cH;2*Z?r=%1 z>*XJ!3oBYAT##ygd;coIemWFm;x)X_+P#R(R7`A2!mZ0&Qs%3aJiB&9vN@zcNi7uu zUVc(z(To47M&_;&_|8*%H}9^(3Ftk(0=qAc?wPT%4P*NV1FiwtcsyQebgJIDHxBYN z;hw8X8T@4u@_m_2Js}y*EW+>o@mBa2nL$tbFHuQxDz^bMputwxb2M zfqai#MZquS*+b5Yytx@WVVuLAE|QbZkvgR9y($Ddh7p4yY}v)Wva<>Ro}2q6PDv$9|zx5sAkFpfS4ka~E*VtZQtDpN)YucsV7^MiKxpLT$id6ClrJ zV23nPsq??|UAFmFLp5b?5+=9(Vo%dz{Wd%C)XUX|LjPcar~KiZ8|h+W^wp!==kYTm zJ$|*bC*Sf4wQAJNdo=SElprH)meMT1KDmO(Z?=u~{YT#va=2Xm2Ik`$US8c=Om-~LcCb^Ei z+$yaD>;Z}g>=Rc&2RS|=e!E%+SHY>ui#Cn9ZIAB@kd(bC>Dw}^?C_<5NkMt zmwqmDhR}&WgGLir5hN0Rh9%(;2x~_M1S;k}LjVFZe_Q#7AZcGa?wg5J@$_{`0YT|U zdO2|IZV~eM>xM9{{v09dU*Sty&dK!8y!~x+ef6Z zSdCQEiToKk?XQHcXXgn5(Zjz_tO}V$wmX@6$V#mv@5QPL$7@5`Fp#G-n>7L${_+&k zxz}6ay#bo}gFsr-Cu-}mb!e&D&1rW+cX$FU1-4K?^Ik%SkVjf{cqt&?r#87{kbzi%`Qyg8Im zbM-s3*Q3g?ktDo2`VpJ;mzM3F!*fC4)ttg;$Pb>(63|v(t|0GA{*v{G*pDA&M~85t zB6s>#p9u=v3J&KHubKoirg{AD^UoOwrv3e*?}xj(KZh2Uc(amlbb}K8w_KDDLj$LE zw?7qT%S2IAswYvq8Ckb2?X^N&fgEY>4D+M!#R(?d=6eNz=|i5w#m8Io&XBJHKW^@= zGD}tE)LMFB?0rSm$v=9ti&uL=5}@qZW$SZb2`~iTXQ}{Up~`pvDmVNQD{&6BhnIvX z{)pYpXjxkHl6Z)E`0I7l*8il$Lv?Qdc1zmT@2_)a47Kvec_n-3;pmg-DYhGcV(ROY z`sx3%`gUsp4N;1P)27y(wOo*f0fb&x6||WjzFuOr-u66@P15zoO~A)b0Mb_hSy*)+ zFSN7-Q5|-#!y}OQJZcrZIQ&EX*V*V6|Bu>nKlDj+2PgSs=F!CBsoK=)W7eCeW5MgX zolx6>-9J~Ddv9SUwmo=kBJ?|{tAh0_ZnOJE$TyglB6e@xS6=gE9D?HqMWp%`Ah4G#OlrQ z7ERQdJP8c{SnS`$pOt%O{|rO_dj3Q|RbjO)4F1v*SqcxUKf%P_1r!C2 zWM))Rz!BhFFj$|pToIfJ4j2bA20>tdEGuORzyzg(80`9(G!Q44jaB9us2cQ3JGY1m zRLe0P$HSd9V#EuCDY2#`u;7=ZLyMchTwt6DI7phP)W*ci-Lu^gKK60+FEhLb^t~VI z=I{RVGd_zce)t=p58;6&-2QvpBn|Z((5J^g+4z?q4tBgbP_{3`Hh7!ImEYhZ0VS((sveNVZJ_LCv;S$lbYz!NjePV`=CAIP$G zH1%dM=EtFD&bLy5!PpyS4J1y}TU?V9xlFXxzw^h1Q53d+IbX#)&P>P_b{k|%PEgn; zyrjba<)p2a8~)3YAeE&r8ddFsDc}bx+_5jC+27xmv$oE0IVnHBkVPV^^OVj3b8`mG zc9e~MS{H3iV{93icr=WmJJR##71s;jNh#HA`mdpQ=pv9gw0-h}>>JG5TTFjpgv8o~ zwRf1-Pd*cC-!W^`>4nnnlS%Mc!qNac61XEbzmhY|F!h5IE*=7i$(J}~5`}u2zS!Ih zK3MT?J${M>Uf)uNWR9Q%a)rbQedWRncm_pLRL<5ga5gCkG|4(H*aj^MA z0pPjideeRSNeMM}Akno@pIsURau%gbfx!^S1-t?n27?Y^aF)=bJ4Ia?G5j?Wyy|tm zLuu{Cg$O4Am*6m1UxQIBI0P1?gBj>EFu_5vU^hyX`4lYJ43^BPKSYY-!Lxek7&LMxaUXr!ld%fEd_eUio82@dj^18p&>3f>V>t~e^` z`Y!IylD2<7iH#S0PR`FUwp+OgwURLf`_^0DlU zmINDbmj#5yOu=}{!V&Ox7VUir1|w}0q-pOV5UUGJDw+v}-pltU;J?9O8U}ob#rKk? z|2=>^_wqevW7~e!Io%lxbs(*B;jeElz_-6{eSv+u)Tg%t{4H|%@{=Z2Ss7u8tiSK# zZg&fDtEV12ywlsfviU%AL28~QuSm^EKAAjyX_Fu^g0gZ7jX_40b<0)_HZC;Fcp&ns zWL#$`B*&(bBIR~=<5Z~=nDY$dT=4}B2!%BzSV3eU|GV!EAodVNh(9_B-3%6h7o?p& zH8-^YcQz&b+Z+Esimp5!s_zZYZpIA87z_qu-}gOYFveIy2%(~^5weRkjAa(f*q0NbjpYaVXsq=KC7*@)20YmOy*&T~ zjMdT!3aW@+!${14Rd9AO*nc_;B&clxh)hs?^j;Zvh^c>M@I8RW=7BaOKLU{2<89;= z04D%>hs=Lg8`@Z1#Y4>`BWUOS1aq98|u5*@G(%SJyFvhN@!k zx6c3BM@$1}));?E;gIudCMl0Agy9scvutbi1>U-k_d)@KohiXKAP}T+0(u>y0E1yO zJz-F2ue|72>#-uf80d$iNkODs+RWLuD4!^xlYfp*$MbyRo{v$2l$8M3=h@D`1Sr*X z>t%a<43JrRL7t9{(i;@F-B2Er9XcSF4|v!XY@CBCWmKts2iKek!)uKQ^Fcm?vSdS0 z6gGRo4Lw+VUZTK13hgfPbmz}SM)(u2eInK`I$nUDeDAinSANkA)?z>Qs(gzyV{-f6 zgAa!Ux6}r+T5jledomtQ$NlPQsTVbLfn<5D^%(meEb&82(hD=9i8xP1A3ztnW#b3t z0#??cDX#K-+U|?#8~*0M5|c$tb$?MYNdEZ~_ocHibQhIYqa1@rmlLssY?fBM_0po{ zV=LOBFal#tYlSt?DB7E8-muxKOU1ENADpwXiOvt(ziF`LW84MPm0JO>aKVXv&%+*; z3!UblS^pH4f^l|*Gh2I}*;PC|yVTjb_fG>C%Gc@`VER7WLhl9v`3iI99#~V z$>tuMFxu%m|4ck@TOP<)iG|X6K zL~BO?`AH6I;96#lbSUuG?7N%$%Ue^4Wj#)dFY0|%>`!}2VxFe1=dt^u%fGhtbW)1#7{0-_P) zkZg{N5*$CTC5XWTdDDR+%EV3sRp=uyn6meN#<$o|&(k5F1OUF(%~6CEk!U^bdB8}) zQ|g@MXkbG5OXd|JLVNv(-h={{_baGsULaw8hjFjFSybL0OJu;tIS%?wTTWV~i2=y8C_I`cC z>9Dg^MD>-6YuXnk?Ke0{ii{WA^BTqv$1WMawd@71KLw8NNR7R4+H?#7dK=ZiW_->I zTIQII$G=WY5+kDHurJk1}Ec-NPQ8>LfF9R&OdL$4tX20dEl4iA3;<7jnYPAI2vu{4OVJ3oU&1b zqYWj)F~=dqoutGU3J$6)H{E#u`Y>f^bHcGPm!ZV7<1BHo=CV0GgFsK zIWPIdcbl~en^?=#y6~4FxC}X{k?v1up65P^=X~KPtiN@u z-=o6=bqmg`AM=;>JX0TV&@d5QX+Z0n?hYxoZQ_0OIp33Di$JzP5aABM>^umfcPOBt z^ZpSX=aUcYYOzzafQ+&;<$uEc7j;j^dXA}n$Q3A3>n+LEQUcaTq^dhiZS6=MqM(S9 zr!CTxLiJ%7J=hjT-2KGK9gF1g_pe2ctCADQEIVBlBazzWuz1aa5Vr9@=Zu>cuf^n9 zgN#GecWAZ?Ke0J@W9T$2~wtJD5pgPr