Menu ▾ ▴

Tree [728768] master /
 History

HTTPS access


File Date Author Commit
 android 2025-03-27 Michael Pavone Michael Pavone [530989] Fix generating shader list on Android
 icons 2016-04-24 Michael Pavone Michael Pavone [464b36] Inclue menu.bin in release directories. Added a...
 images 2020-11-22 Michael Pavone Michael Pavone [f9d543] Add Genesis 6-button contoller image
 lzma 2026-09-15 Michael Pavone Michael Pavone [7b7148] Hopefully fix nightly builds
 notes 2022-01-23 Michael Pavone Michael Pavone [d5f025] Move old notes into a subdir and add CDD MCU notes
 nuklear_ui 2026-09-12 Michael Pavone Michael Pavone [c258a7] Update version number, copyright date, CHANGELO...
 shaders 2025-03-04 Michael Pavone Michael Pavone [9d85a7] Make xBRZ shader be WebGL compatible
 zlib 2025-06-15 Michael Pavone Michael Pavone [3117a1] Add zlib LICENSE file to zlib subdir
 zstd 2026-09-25 Michael Pavone Michael Pavone [d81a15] Implement zstd codecs in CHD implementation
 .hgignore 2026-05-01 Michael Pavone Michael Pavone [439b43] Add generated SH2 files to .hgignore
 32x.c 2026-07-03 Michael Pavone Michael Pavone [4a2791] Fix issue that made Golden Axe 32X unplayable
 32x.h 2026-06-14 Michael Pavone Michael Pavone [d09840] Implement turbo/slo mo for 32X
 32x_video.c 2026-09-12 Michael Pavone Michael Pavone [b7dd72] Fix libretro build and fix mixing for Sega CD a...
 32x_video.h 2026-07-03 Michael Pavone Michael Pavone [c59520] Fix graphical glitch in Golden Axe 32X attract ...
 68kinst.c 2023-10-08 Michael Pavone Michael Pavone [f1760d] Fix some issues identified by asan/ubsan
 68kinst.h 2022-08-30 Michael Pavone Michael Pavone [671553] More 68K disassembler refactoring and fix Windo...
 Android.mk 2025-03-26 Michael Pavone Michael Pavone [c09714] Updated Android port using gradle toolchain and...
 CHANGELOG 2026-09-12 Michael Pavone Michael Pavone [c258a7] Update version number, copyright date, CHANGELO...
 COPYING 2013-09-11 Mike Pavone Mike Pavone [7be628] Added copyright notice to source files and adde...
 Makefile 2026-09-25 Michael Pavone Michael Pavone [d81a15] Implement zstd codecs in CHD implementation
 README 2026-09-25 Michael Pavone Michael Pavone [d81a15] Implement zstd codecs in CHD implementation
 analyze.py 2013-07-07 Mike Pavone Mike Pavone [aa929b] Last set of changes to analyze.py from when I w...
 analyze_olp.py 2019-01-05 Michael Pavone Michael Pavone [3bf8cb] Old changes to OLP analyzer script for analyzin...
 arena.c 2016-08-12 Michael Pavone Michael Pavone [01aa29] Fix a memory leak in try_alloc_arena
 arena.h 2015-11-14 Michael Pavone Michael Pavone [314f74] It is now possible to switch back and forth bet...
 arrow.spec 2015-11-06 Michael Pavone Michael Pavone [0a55ff] Get everything needed to build menu.bin either ...
 arrow.xcf 2015-08-06 Michael Pavone Michael Pavone [5b6615] Add selection arrow to menu
 backend.c 2026-09-11 Michael Pavone Michael Pavone [9c83b7] Add missing return statement in interp_write_ma...
 backend.h 2026-08-21 Michael Pavone Michael Pavone [2dd605] Fix a warning when building for non-x86 that is...
 backend_x86.c 2026-07-04 Michael Pavone Michael Pavone [67f196] Fix 32X regression
 bindings.c 2026-04-20 Michael Pavone Michael Pavone [f6243e] Move some stuff out of util.c so it can be used...
 bindings.h 2025-03-04 Michael Pavone Michael Pavone [f7ef36] Persist save states and config in emscripten bu...
 blastcpm.c 2026-07-03 Michael Pavone Michael Pavone [30407b] Get blastcpm to compile for Windows
 blastem.c 2026-08-21 Michael Pavone Michael Pavone [3979b5] Fix some crash bugs with CD lock-on
 blastem.exe.manifest 2023-02-20 Michael Pavone Michael Pavone [d93a07] Add Windows application manifest to opt-in to U...
 blastem.h 2024-01-03 Michael Pavone Michael Pavone [0123c6] Fix reload of zipped and gzipped ROMS
 blastem.rc 2023-02-20 Michael Pavone Michael Pavone [d93a07] Add Windows application manifest to opt-in to U...
 build_nightly 2025-01-03 Michael Pavone Michael Pavone [a60c86] Get CD titles sort of working in libretro target
 build_release 2026-09-25 Michael Pavone Michael Pavone [d81a15] Implement zstd codecs in CHD implementation
 build_upload_nightly 2019-03-26 Michael Pavone Michael Pavone [329b0d] Fix and update JSON payload for webhook in buil...
 build_upload_web_nightly 2025-02-23 Michael Pavone Michael Pavone [a5d575] Fix web nightly script
 build_upload_win_nightly 2025-01-09 Michael Pavone Michael Pavone [93a0d6] Fix Windows nightly versions
 button.spec 2016-03-09 Michael Pavone Michael Pavone [bd7e1e] Draw button labels
 button.xcf 2016-05-02 Michael Pavone Michael Pavone [0af10a] Get rid of little divot on top of buttons in me...
 cd_graphics.c 2026-07-17 Michael Pavone Michael Pavone [47c49b] Cleanup a bunch of Sega CD debug cruft
 cd_graphics.h 2022-01-31 Michael Pavone Michael Pavone [ed49b3] Initial attempt at implementing the Sega CD gra...
 cdd_fader.c 2023-01-08 Michael Pavone Michael Pavone [294308] Implement savestate support for Sega CD
 cdd_fader.h 2023-01-08 Michael Pavone Michael Pavone [294308] Implement savestate support for Sega CD
 cdd_mcu.c 2026-07-17 Michael Pavone Michael Pavone [47c49b] Cleanup a bunch of Sega CD debug cruft
 cdd_mcu.h 2023-01-08 Michael Pavone Michael Pavone [294308] Implement savestate support for Sega CD
 cdimage.c 2026-09-20 Michael Pavone Michael Pavone [03251a] Use "Audio CD" as title when loading CD image w...
 cdimage.h 2026-09-10 Michael Pavone Michael Pavone [6c1aac] Added partial CHD support
 chd.c 2026-09-25 Michael Pavone Michael Pavone [d81a15] Implement zstd codecs in CHD implementation
 chd.h 2026-09-25 Michael Pavone Michael Pavone [d81a15] Implement zstd codecs in CHD implementation
 coleco.c 2026-04-20 Michael Pavone Michael Pavone [f6243e] Move some stuff out of util.c so it can be used...
 coleco.h 2024-01-05 Michael Pavone Michael Pavone [db0fd4] Forgot to commit the colecovision files
 comparetests.py 2025-02-23 Michael Pavone Michael Pavone [069779] Improve comparetests script
 config.c 2026-09-25 Michael Pavone Michael Pavone [728768] Add chd to extension list
 config.h 2026-05-11 Michael Pavone Michael Pavone [cc701e] Give the user a choice on how to handle "machin...
 controller_info.c 2025-02-25 Michael Pavone Michael Pavone [acbaf3] Make Hori Fighting Commander controllers work o...
 controller_info.h 2023-04-03 Michael Pavone Michael Pavone [4ba606] Make deadzones configurable and bump up the def...
 cpu_dsl.py 2026-07-03 Michael Pavone Michael Pavone [d396fe] [WIP] More work towards assembly interpreter fr...
 cursor.spec 2015-12-05 Michael Pavone Michael Pavone [eff49e] Added mouse support to menu ROM
 cursor.xcf 2015-12-05 Michael Pavone Michael Pavone [eff49e] Added mouse support to menu ROM
 debug.c 2026-09-24 Michael Pavone Michael Pavone [3ab97b] Add version register to io namespace in debugger
 debug.h 2026-05-06 Michael Pavone Michael Pavone [e292fb] Lots of 32X progress. Doom boots to title scree...
 default.cfg 2026-09-25 Michael Pavone Michael Pavone [728768] Add chd to extension list
 dis.c 2026-05-02 Michael Pavone Michael Pavone [bfca5b] Add sh2dis target and fix some SH2 decoder/disa...
 disasm.c 2026-08-21 Michael Pavone Michael Pavone [2dd605] Fix a warning when building for non-x86 that is...
 disasm.h 2026-05-08 Michael Pavone Michael Pavone [324f4c] Add vector table support for 32X header parsing...
 emscripten_pre.js 2025-03-04 Michael Pavone Michael Pavone [f7ef36] Persist save states and config in emscripten bu...
 event_log.c 2026-04-20 Michael Pavone Michael Pavone [f6243e] Move some stuff out of util.c so it can be used...
 event_log.h 2025-04-01 Michael Pavone Michael Pavone [f78b51] WIP attempt to move VDP rendering to a separate...
 fake_cpm.sz8 2015-07-29 Michael Pavone Michael Pavone [ebd3d2] Implement a tiny bit of CPM BDOS and add a corr...
 fib.s68 2018-03-24 Michael Pavone Michael Pavone [f62ed0] Updated fibonacci benchmark code to work with c...
 flac.c 2026-09-11 Michael Pavone Michael Pavone [bcec00] Fix calculation of mid-side and left-side stere...
 flac.h 2026-09-10 Michael Pavone Michael Pavone [6c1aac] Added partial CHD support
 font.spec 2016-03-08 Michael Pavone Michael Pavone [6b2639] WIP buttons in menu ROM
 font.xcf 2016-03-08 Michael Pavone Michael Pavone [6b2639] WIP buttons in menu ROM
 font_interlace_variable.spec 2015-11-06 Michael Pavone Michael Pavone [0a55ff] Get everything needed to build menu.bin either ...
 font_interlace_variable.xcf 2015-07-25 Michael Pavone Michael Pavone [9084bc] Initial work on silly Genesis based menu
 gamecontrollerdb.txt 2025-02-23 Michael Pavone Michael Pavone [f8ab29] Update gamecontrollerdb.txt and tweak the entri...
 gdb_remote.c 2026-04-20 Michael Pavone Michael Pavone [f6243e] Move some stuff out of util.c so it can be used...
 gdb_remote.h 2025-03-16 Michael Pavone Michael Pavone [cdfb71] Implement breakpoints in new 68K core
 gen.c 2015-11-25 Michael Pavone Michael Pavone [5b9451] Partially working change to do proper stack ali...
 gen.h 2017-03-25 Michael Pavone Michael Pavone [a7d5f9] Prevent blowing past our native translated inst...
 gen_arm.c 2015-07-26 Michael Pavone Michael Pavone [70ca19] Use a new fatal_error function instead of calli...
 gen_arm.h 2015-01-08 Michael Pavone Michael Pavone [e44044] Added ldr and str instructions to gen_arm
 gen_player.c 2025-01-29 Michael Pavone Michael Pavone [38bcc7] Fix libretro build
 gen_player.h 2020-05-16 Michael Pavone Michael Pavone [8951b0] Fix libretro target
 gen_test_hv.s68 2014-12-15 Michael Pavone Michael Pavone [debb9e] Added HV counter test ROM source
 gen_x86.c 2026-06-14 Michael Pavone Michael Pavone [ca934c] Fix encoding of SSE instructions with REX prefix
 gen_x86.h 2026-06-12 Michael Pavone Michael Pavone [1d5bc6] Generate a native, SSE optimized 16-byte burst ...
 genesis.c 2026-09-11 Michael Pavone Michael Pavone [061c1e] Fix regression in E-clock penalty that occurs w...
 genesis.h 2026-05-13 Michael Pavone Michael Pavone [89a555] Fix some issues with Z80 access to 32X-related ...
 gentests.py 2025-02-10 Michael Pavone Michael Pavone [22811e] populate registers at full size in test generat...
 gst.c 2026-04-15 Michael Pavone Michael Pavone [9ba479] Add support for Unicode and paths longer than M...
 gst.h 2013-09-11 Mike Pavone Mike Pavone [7be628] Added copyright notice to source files and adde...
 hash.c 2023-10-08 Michael Pavone Michael Pavone [f1760d] Fix some issues identified by asan/ubsan
 hash.h 2017-03-29 Michael Pavone Michael Pavone [658736] Allow games to be specified in ROM DB via sha1 ...
 i2c.c 2026-05-31 Michael Pavone Michael Pavone [ca974c] Implement Acclaim mapper/I2C EEPROM for 32X games
 i2c.h 2026-05-31 Michael Pavone Michael Pavone [ca974c] Implement Acclaim mapper/I2C EEPROM for 32X games
 i8255.c 2024-10-11 Michael Pavone Michael Pavone [18191f] Initial SC-3000 support
 i8255.h 2024-10-11 Michael Pavone Michael Pavone [18191f] Initial SC-3000 support
 img2tiles.py 2021-12-31 Michael Pavone Michael Pavone [2ad26d] Update img2tyles to use Python 3
 io.c 2025-08-09 Michael Pavone Michael Pavone [693d72] Fix out of bound read in mouse IO delay array
 io.h 2024-01-21 Michael Pavone Michael Pavone [b4face] Expose gamepad state in debugger
 jag_video.c 2016-11-06 Michael Pavone Michael Pavone [4007a8] Fix Jaguar video interrupt cycle calculation
 jag_video.h 2016-11-05 Michael Pavone Michael Pavone [228f82] Get Jaguar video interrupt working
 jagcpu.c 2016-12-19 Michael Pavone Michael Pavone [b9ce05] WIP Jaguar GPU/DSP emulation
 jagcpu.h 2025-02-14 Michael Pavone Michael Pavone [c2ca15] Fix some older targets that are maybe still useful
 jagcpu_x86.c 2018-06-29 Michael Pavone Michael Pavone [03a81f] Fix some issues identified by cppcheck
 jagdis.c 2016-10-31 Michael Pavone Michael Pavone [e8eddd] Initial stab at jaguar disassemler
 jaguar.c 2016-12-19 Michael Pavone Michael Pavone [a84b05] Fix blastjag target
 jaguar.h 2016-11-05 Michael Pavone Michael Pavone [228f82] Get Jaguar video interrupt working
 jcart.c 2024-04-30 Michael Pavone Michael Pavone [e27c3b] Make some progress on compiling full emulator w...
 jcart.h 2018-08-14 Michael Pavone Michael Pavone [0eb12b] Added J-Cart support
 korean_sms_multi.c 2026-04-26 Michael Pavone Michael Pavone [a629fe] [WIP] Support for Super Game 138 mapper
 korean_sms_multi.h 2025-11-25 Michael Pavone Michael Pavone [499400] Forgot a couple of new files in the last commit
 laseractive.c 2026-09-12 Michael Pavone Michael Pavone [b7dd72] Fix libretro build and fix mixing for Sega CD a...
 laseractive.h 2025-08-06 Michael Pavone Michael Pavone [d1b6d4] Get PD0178 mecha controller comms sort of working
 lc8951.c 2026-07-17 Michael Pavone Michael Pavone [47c49b] Cleanup a bunch of Sega CD debug cruft
 lc8951.h 2024-09-06 Michael Pavone Michael Pavone [791c68] Clear EDT on DTTRG. Fixes Cliffhanger and Orion...
 libblastem.c 2026-09-12 Michael Pavone Michael Pavone [2104ef] get 32x working in libretro core
 libretro.h 2025-01-03 Michael Pavone Michael Pavone [a60c86] Get CD titles sort of working in libretro target
 m68k.cpu 2026-01-19 Michael Pavone Michael Pavone [9bc908] Implement mapper used in Radica Plug & Play sys...
 m68k_core.c 2026-07-03 Michael Pavone Michael Pavone [4a2791] Fix issue that made Golden Axe 32X unplayable
 m68k_core.h 2026-01-19 Michael Pavone Michael Pavone [9bc908] Implement mapper used in Radica Plug & Play sys...
 m68k_core_x86.c 2026-05-23 Michael Pavone Michael Pavone [1658f5] Generate baked memory handler functions for SH2...
 m68k_internal.h 2025-03-16 Michael Pavone Michael Pavone [cdfb71] Implement breakpoints in new 68K core
 m68k_util.c 2025-07-27 Michael Pavone Michael Pavone [48a81e] Fix crash bug in step/next/over that occurred i...
 maketests.py 2024-02-14 Michael Pavone Michael Pavone [a9dcb0] Update some 68K test harness scripts to Python 3
 mediaplayer.c 2025-07-07 Michael Pavone Michael Pavone [6fbd37] Implement speed control and reset for media pla...
 mediaplayer.h 2025-07-07 Michael Pavone Michael Pavone [6fbd37] Implement speed control and reset for media pla...
 megawifi.c 2020-10-17 Michael Pavone Michael Pavone [ce68bb] Fix build breakage on OS X
 megawifi.h 2018-01-15 Michael Pavone Michael Pavone [e9e00d] Initial work on MegaWiFi support
 mem.c 2024-01-03 Michael Pavone Michael Pavone [b46f51] Remove debug print statement
 mem.h 2013-09-11 Mike Pavone Mike Pavone [7be628] Added copyright notice to source files and adde...
 mem_win.c 2015-07-26 =?UTF-8?q?Higor=20Eur=C3=ADpedes?= =?UTF-8?q?Higor=20Eur=C3=ADpedes?= [3de5d8] Fix mingw-w64 build and cross-compilation
 memmap.h 2026-06-19 Michael Pavone Michael Pavone [56555a] Initial pass on implementing SH2 memory access ...
 menu.c 2024-04-30 Michael Pavone Michael Pavone [e27c3b] Make some progress on compiling full emulator w...
 menu.h 2017-07-01 Michael Pavone Michael Pavone [5a7df1] Make drag and drop play nice with the menu
 menu.s68 2019-03-31 Mike Pavone Mike Pavone [979b2d] Update version number for nightly builds
 multi_game.c 2024-04-30 Michael Pavone Michael Pavone [e27c3b] Make some progress on compiling full emulator w...
 multi_game.h 2017-08-28 Michael Pavone Michael Pavone [db9e69] Save/restore mapper state in native save states
 mw_commands.c 2020-05-03 doragasu doragasu [4c34ba] megawifi: refactor and update commands
 net.c 2026-04-20 Michael Pavone Michael Pavone [f6243e] Move some stuff out of util.c so it can be used...
 net.h 2026-04-20 Michael Pavone Michael Pavone [f6243e] Move some stuff out of util.c so it can be used...
 net_win.c 2026-04-20 Michael Pavone Michael Pavone [f6243e] Move some stuff out of util.c so it can be used...
 nor.c 2024-04-30 Michael Pavone Michael Pavone [e27c3b] Make some progress on compiling full emulator w...
 nor.h 2017-06-24 Michael Pavone Michael Pavone [9cc5c7] Move I2C EEPROM and NOR Flash functions out of ...
 oscilloscope.c 2025-03-30 Michael Pavone Michael Pavone [5eb09f] Add a compile-time flag to use RGB565 instead o...
 oscilloscope.h 2022-11-23 Michael Pavone Michael Pavone [a78cb8] Add missing files
 osd_font.c 2025-07-21 Michael Pavone Michael Pavone [c8001c] Implement LaserActive OSD overlay
 paths.c 2026-05-16 Michael Pavone Michael Pavone [488a61] Fix regression in 32-bit Windows release builds
 paths.h 2026-04-20 Michael Pavone Michael Pavone [f6243e] Move some stuff out of util.c so it can be used...
 pd0178.c 2025-08-06 Michael Pavone Michael Pavone [df9721] Some mecha con fiddling to get some more intere...
 pd0178.h 2025-08-06 Michael Pavone Michael Pavone [d1b6d4] Get PD0178 mecha controller comms sort of working
 pico_pcm.c 2024-04-14 Michael Pavone Michael Pavone [fd82c1] Implement turbo/slow for Pico and Copera
 pico_pcm.h 2024-04-14 Michael Pavone Michael Pavone [fd82c1] Implement turbo/slow for Pico and Copera
 pixel.h 2026-05-31 Michael Pavone Michael Pavone [e67a7f] Scale H32 MD layer to H40 when 32X is present
 png.c 2025-03-30 Michael Pavone Michael Pavone [5eb09f] Add a compile-time flag to use RGB565 instead o...
 png.h 2025-03-30 Michael Pavone Michael Pavone [5eb09f] Add a compile-time flag to use RGB565 instead o...
 ppm.c 2025-03-30 Michael Pavone Michael Pavone [5eb09f] Add a compile-time flag to use RGB565 instead o...
 ppm.h 2025-03-30 Michael Pavone Michael Pavone [5eb09f] Add a compile-time flag to use RGB565 instead o...
 psg.c 2024-11-11 Michael Pavone Michael Pavone [77576b] Log Game Gear PSG Pan to VGM
 psg.h 2022-12-13 Michael Pavone Michael Pavone [3ed486] Proper calculation of sample rate for YM2612/PS...
 radica.c 2026-01-19 Michael Pavone Michael Pavone [9bc908] Implement mapper used in Radica Plug & Play sys...
 radica.h 2026-01-19 Michael Pavone Michael Pavone [9bc908] Implement mapper used in Radica Plug & Play sys...
 realtec.c 2025-04-01 Michael Pavone Michael Pavone [ce2266] Fix some uninitiazed date in realtec_configure_rom
 realtec.h 2017-08-28 Michael Pavone Michael Pavone [db9e69] Save/restore mapper state in native save states
 render.h 2026-05-09 Michael Pavone Michael Pavone [a2f7d9] Fix Windows build
 render_audio.c 2025-01-12 Michael Pavone Michael Pavone [90c90a] Fix a couple of bugs with AV recording
 render_audio.h 2023-03-16 Michael Pavone Michael Pavone [cbe626] Save audio to a wave file when saving video to ...
 render_fbdev.c 2020-05-01 Michael Pavone Michael Pavone [83191a] Properly initialize Genesis reset cycle on star...
 render_sdl.c 2026-06-12 Michael Pavone Michael Pavone [c1a34f] Fix building on Ubuntu 16.04 and/or against old...
 render_sdl.h 2025-06-20 Michael Pavone Michael Pavone [97202e] WIP Nuklear UI in VDP debug windows
 rf5c164.c 2024-10-08 Michael Pavone Michael Pavone [99d3d3] Update PCM cur_ptr to ST when channel is not pl...
 rf5c164.h 2023-01-08 Michael Pavone Michael Pavone [294308] Implement savestate support for Sega CD
 rom.db 2026-05-31 Michael Pavone Michael Pavone [559a1e] Add a ROM DB entry for Shadow Squadron because ...
 romdb.c 2026-07-03 Michael Pavone Michael Pavone [4a2791] Fix issue that made Golden Axe 32X unplayable
 romdb.h 2026-05-03 Michael Pavone Michael Pavone [2eb7b8] Initial implementation of 32X cart remapping
 runtime_win.S 2014-04-02 Michael Pavone Michael Pavone [3a64ba] Initial work on Windows port
 saves.c 2017-11-25 Michael Pavone Michael Pavone [3aafb7] Fix genesis save state loading via Nuklear UI, ...
 saves.h 2020-04-29 Michael Pavone Michael Pavone [491fbb] WIP netplay support
 sega_mapper.c 2026-05-30 Michael Pavone Michael Pavone [c7bb1f] Fix 32X cart SRAM access
 sega_mapper.h 2026-05-02 Michael Pavone Michael Pavone [b146d5] [WIP] Very early work on 32X hardware
 segacd.c 2026-07-17 Michael Pavone Michael Pavone [47c49b] Cleanup a bunch of Sega CD debug cruft
 segacd.h 2023-11-22 Michael Pavone Michael Pavone [d134e9] Handle changes to sample rate while content is ...
 serialize.c 2020-04-29 Michael Pavone Michael Pavone [491fbb] WIP netplay support
 serialize.h 2024-01-05 Michael Pavone Michael Pavone [8167cd] Initial support for Colecovision emulation
 sft_mapper.c 2022-12-13 Michael Pavone Michael Pavone [b67835] Add support for mapper used in Super Fighter Te...
 sft_mapper.h 2022-12-13 Michael Pavone Michael Pavone [b67835] Add support for mapper used in Super Fighter Te...
 sh2.cpu 2026-09-10 Michael Pavone Michael Pavone [af7352] Avoid conflict between OS sleep function and SH...
 sh2_decode.c 2026-05-23 Michael Pavone Michael Pavone [9d2b4c] Fix disassembly of gbr-relative mov
 sh2_decode.h 2026-05-02 Michael Pavone Michael Pavone [bfca5b] Add sh2dis target and fix some SH2 decoder/disa...
 sh2_util.c 2026-06-20 Michael Pavone Michael Pavone [a65710] Fix 32X regression in non-x86 targets
 sh2dis.c 2026-05-31 Michael Pavone Michael Pavone [e90318] Handle initial SH2 VBR in ROM rather than SDRAM...
 sh7095.c 2026-06-20 Michael Pavone Michael Pavone [56440c] Fix build on older gcc
 sh7095.h 2026-06-13 Michael Pavone Michael Pavone [53d1d9] Implement SH2 cache
 sms.c 2026-09-13 Michael Pavone Michael Pavone [144b72] Fix some SMS sega mapper cart RAM bugs
 sms.h 2025-02-14 Michael Pavone Michael Pavone [86dccf] Give sega 8-bit consoles separate system_type e...
 special_keys_evdev.h 2019-03-11 Michael Pavone Michael Pavone [cbe898] Added raw fbdev/evdev/ALSA render backend
 street_fighter_vram_100mhz_hsync_trig_2.ols 2012-11-06 Mike Pavone Mike Pavone [f8dd39] Add some logic analyzer captures, a Python scri...
 street_fighter_vram_50mhz_hsync_trig.ols 2012-11-06 Mike Pavone Mike Pavone [f8dd39] Add some logic analyzer captures, a Python scri...
 street_fighter_vram_50mhz_write_trig.ols 2012-11-06 Mike Pavone Mike Pavone [f8dd39] Add some logic analyzer captures, a Python scri...
 svp.cpu 2018-10-09 Michael Pavone Michael Pavone [90c4be] Added some SVP register arrays for PMC stuff
 svp_util.c 2018-10-07 Michael Pavone Michael Pavone [2c56a9] Implement program ROM reads
 system.c 2026-09-16 Michael Pavone Michael Pavone [844735] Fix regression in SMD ROM loading
 system.h 2026-09-10 Michael Pavone Michael Pavone [6c1aac] Added partial CHD support
 systems.cfg 2024-10-11 Michael Pavone Michael Pavone [18191f] Initial SC-3000 support
 termhelper.c 2015-07-26 Michael Pavone Michael Pavone [0be4c7] Spawn a terminal for the debugger when needed i...
 terminal.c 2026-04-20 Michael Pavone Michael Pavone [f6243e] Move some stuff out of util.c so it can be used...
 terminal.h 2015-10-20 Michael Pavone Michael Pavone [f7493a] Added a command line option to force BlastEm to...
 terminal_win.c 2015-10-20 Michael Pavone Michael Pavone [f7493a] Added a command line option to force BlastEm to...
 tern.c 2022-08-31 Michael Pavone Michael Pavone [233873] Allow tern_foreach on an empty (NULL) ternary tree
 tern.h 2022-08-28 Michael Pavone Michael Pavone [327749] Mostly fix label sorting post-refactor
 test.s68 2012-12-13 Mike Pavone Mike Pavone [58063e] Add vector table to test.s68
 testcases.txt 2025-03-02 Michael Pavone Michael Pavone [3d3bac] Add testcases for memory shift instructions
 testtern.c 2013-09-11 Mike Pavone Mike Pavone [7be628] Added copyright notice to source files and adde...
 tmss.s68 2023-08-24 Michael Pavone Michael Pavone [788373] Fix missing init in fake TMSS
 todo.txt 2017-02-04 Michael Pavone Michael Pavone [bc1a49] Update TODO to reflect MULU/MULS improvements
 trans.c 2026-04-20 Michael Pavone Michael Pavone [f6243e] Move some stuff out of util.c so it can be used...
 upd78k2.cpu 2025-08-06 Michael Pavone Michael Pavone [d1b6d4] Get PD0178 mecha controller comms sort of working
 upd78k2_dis.c 2025-07-19 Michael Pavone Michael Pavone [c31a68] Fix order of saddr/sfr operands in multi-saddr/...
 upd78k2_dis.h 2025-07-16 Michael Pavone Michael Pavone [33aebd] Add upd78k2 disassembler
 upd78k2_util.c 2025-08-06 Michael Pavone Michael Pavone [d1b6d4] Get PD0178 mecha controller comms sort of working
 upd78k2run.c 2026-04-20 Michael Pavone Michael Pavone [f6243e] Move some stuff out of util.c so it can be used...
 upddis.c 2026-05-04 Michael Pavone Michael Pavone [5f83fb] Fix compile error on the older gcc used on the ...
 util.c 2026-06-17 Michael Pavone Michael Pavone [1c8b64] Fix some memory management issues with CD games
 util.h 2026-06-14 Michael Pavone Michael Pavone [f1a04b] Ensure 32X SDRAM, cart and BIOS areas are 16-by...
 vdp.c 2026-09-12 Michael Pavone Michael Pavone [b7dd72] Fix libretro build and fix mixing for Sega CD a...
 vdp.h 2026-06-20 Michael Pavone Michael Pavone [586a5e] make 32X compositing work in experimental audio...
 version.inc 2026-09-13 Michael Pavone Michael Pavone [e561dd] Update version for next nightly build
 vgm.c 2026-04-15 Michael Pavone Michael Pavone [9ba479] Add support for Unicode and paths longer than M...
 vgm.h 2025-01-19 Michael Pavone Michael Pavone [2f8e4b] Initial work on YMF262 (aka OPL3) emulation
 vgmsplit.c 2015-11-02 Michael Pavone Michael Pavone [16bc74] Make vgmsplit smarter about how it handles dela...
 vos_prog_info.c 2014-10-12 Michael Pavone Michael Pavone [c6e497] Add support for disassembling VOS program modules
 vos_program_module.c 2014-10-12 Michael Pavone Michael Pavone [c6e497] Add support for disassembling VOS program modules
 vos_program_module.h 2014-10-12 Michael Pavone Michael Pavone [c6e497] Add support for disassembling VOS program modules
 wave.c 2026-05-01 Michael Pavone Michael Pavone [1d4bcc] Fix wave header when recording "video"
 wave.h 2025-02-16 Michael Pavone Michael Pavone [e1b514] Fix handling of wave files with additional RIFF...
 xband.c 2024-04-30 Michael Pavone Michael Pavone [e27c3b] Make some progress on compiling full emulator w...
 xband.h 2017-08-28 Michael Pavone Michael Pavone [db9e69] Save/restore mapper state in native save states
 ym2612.c 2026-09-11 Michael Pavone Michael Pavone [fd97ca] Fix broken whistle effect in Strikers
 ym2612.h 2025-01-19 Michael Pavone Michael Pavone [2f8e4b] Initial work on YMF262 (aka OPL3) emulation
 ym_common.c 2025-01-27 Michael Pavone Michael Pavone [045ed0] More work on OPL3 emulation
 ym_common.h 2025-01-27 Michael Pavone Michael Pavone [045ed0] More work on OPL3 emulation
 ymf262.c 2025-01-27 Michael Pavone Michael Pavone [045ed0] More work on OPL3 emulation
 ymf262.h 2025-01-19 Michael Pavone Michael Pavone [2f8e4b] Initial work on YMF262 (aka OPL3) emulation
 ymz263b.c 2024-04-14 Michael Pavone Michael Pavone [fd82c1] Implement turbo/slow for Pico and Copera
 ymz263b.h 2024-04-14 Michael Pavone Michael Pavone [fd82c1] Implement turbo/slow for Pico and Copera
 z80.cpu 2026-08-21 Michael Pavone Michael Pavone [4da640] Fix zero flag for inc ixh/ixy and dec ixh/ixy
 z80_to_x86.c 2026-05-23 Michael Pavone Michael Pavone [1658f5] Generate baked memory handler functions for SH2...
 z80_to_x86.h 2025-03-14 Michael Pavone Michael Pavone [48f3c1] Implement Z80/PSG clock speed test register bit
 z80_util.c 2025-03-14 Michael Pavone Michael Pavone [48f3c1] Implement Z80/PSG clock speed test register bit
 z80inst.c 2023-11-07 Michael Pavone Michael Pavone [7a44b9] Refactor debugger a bit. Allow types other than...
 z80inst.h 2023-11-07 Michael Pavone Michael Pavone [7a44b9] Refactor debugger a bit. Allow types other than...
 zcompare.py 2025-02-15 Michael Pavone Michael Pavone [8a5a4c] Update zcompare for Python 3, to use another bl...
 zdis.c 2026-04-20 Michael Pavone Michael Pavone [f6243e] Move some stuff out of util.c so it can be used...
 zip.c 2026-06-14 Michael Pavone Michael Pavone [a86a87] Make sure ROM buffers loaded from ZIP files are...
 zip.h 2026-06-14 Michael Pavone Michael Pavone [a86a87] Make sure ROM buffers loaded from ZIP files are...
 zruntime.S 2014-06-23 Mike Pavone Mike Pavone [249384] Ensure proper stack alignment when the Z80 call...
 ztestgen.c 2025-02-14 Michael Pavone Michael Pavone [c2ca15] Fix some older targets that are maybe still useful
 ztestrun.c 2026-04-20 Michael Pavone Michael Pavone [f6243e] Move some stuff out of util.c so it can be used...

Read Me

BlastEm 1.0.0
-------------

Installation
------------

Extract this archive to a directory of your choosing.

NOTE: Prior to version 0.4.1, BlastEm was still using Unixy locations for config
and save files. If you're upgrading from a previous version on Windows, you will
need to move them manually. For config files, the relevant paths are in the
previous paragraph. For save files, move all the directories found in
%userprofile%\.local\share\blastem to %localappdata%\blastem

Usage
-----

This version of BlastEm has a GUI that allows access to most configuration options.
Simply start BlastEm without passing a ROM filename on the command line to access
the main menu. You can also access the menu by hitting the button mapped to the ui.menu
action (default Esc).

If you explicitly request it, you can still use the old ROM-based UI instead. This UI does
not support configuration so you will need to modify the configuration file manually if you
use it. See the rest of this README for instructions on modifying the configuration file.

Some operations are currently only supported through the command line. To get a
list of supported command line options on Linux or OSX type:

    ./blastem -h

From within your BlastEm directory. On Windows type:

    blastem.exe -h

Lock-On Support
---------------

This version of BlastEm has some preliminary support for Sonic & Knuckles lock
on technology. This is available via both the menu and the command line. To use
it from the menu, first load Sonic & Knuckles normally. Enter the menu (mapped
to the Escape key by default) and select the "Lock On" option to select a ROM
to lock on. The system will then reload with the combined game. To use it from
the command line, specify the Sonic & Knuckles ROM as the primary ROM and
specify the ROM to be locked on using the -o option. As an example:

    ./blastem ~/romz/sonic_and_knuckles.bin -o ~/romz/sonic3.bin

Please note that Sonic 2 lock-on does not work at this time.

The lock-on menu option and command line switch are also used to combine a CD
image with a cartridge for Sega CD "Mode 1 Boot" scenarios as seen in titles
like Flux Mega CD and Doom 32X Resurrection Fusion. To use this feature, load
the cartridge as the main ROM and "lock-on" the CD image.

Configuration
-------------

Configuration is read from the file at $HOME/.config/blastem/blastem.cfg on
Unix-like systems and %localappdata%\blastem\blastem.cfg if it exists.
Othwerise it is read from default.cfg from the same directory as the BlastEm
executable. Sections are denoted by a section name followed by an open curly
bracket, the section's contents and a closing curly bracket. Individual
configuration values are set by entering the value's name followed by a space
or tab and followed by the desired value.

Bindings
--------

The keys subsection of bindings maps keyboard keys to gamepad buttons or UI
actions. The key name goes on the left and the action is on the right.
Most keys are named for the character they produce when pressed. For keys that
don't correspond to a normal character, check the list below:

  Name       | Description
  -----------------
  up           Up arrow
  down         Down arrow
  left         Left arrow
  right        Right arrow
  space
  tab
  backspace    Backspace on PC keyboards, Delete on Mac keyboards
  esc
  delete
  lshift       Left shift
  rshift       Right shift
  lctrl        Left control
  rctrl        Right control
  lalt         Left alt on PC keyboards, Option on Mac keyboards
  ralt         Right alt on PC keyboards, Option on Mac keyboards
  home
  end
  pageup
  pagedown
  f1
  f2
  f3
  f4
  f5
  f6
  f7
  f8
  f9
  f10
  f11
  f12
  select
  play
  search
  back
  np0          Number Pad 0
  np1          Number Pad 1
  np2          Number Pad 2
  np3          Number Pad 3
  np4          Number Pad 4
  np5          Number Pad 5
  np6          Number Pad 6
  np7          Number Pad 7
  np8          Number Pad 8
  np9          Number Pad 9
  np/          Number Pad /
  np*          Number Pad *
  np-          Number Pad -
  np+          Number Pad +
  npenter      Number Pad Enter
  np.          Number Pad .

The pads subsection is used to map gamepads and joysticks. Gamepads that are
recognized, can have their buttons and axes mapped with semantic names.
Xbox 360, PS4 and PS3 style names are supported. Unrecognized gamepads can be
mapped using numeric button and axis ids. The following button names are
recognized by BlastEm:
	a, cross
	b, circle
	x, square
	y, trinagle
	start, options
	back, select, share
	guide
	leftbutton, l1
	rightbutton, r1
	leftstick, l3
	rightstick, r3
The following axis names are recognized by BlastEm:
	leftx
	lefty
	rightx
	righty
	lefttrigger, l2
	righttrigger, r2


The mice subsection is used to map mice to emulated Mega/Sega mice. The default
configuration maps both the first and second host mice to the first emulated
mouse. This should not need modification for most users.

One special mapping deserves a mention. By default, the 'r' key is mapped to
ui.release_mouse. When operating in windowed mode the mouse has a capture
behavior. Mouse events are ignored until you click in the window. The mouse
will then be "captured" and the cursor will be both made invisible and locked
to the window. The ui.release_mouse binding releases the mouse so it can be
used normally.

UI Actions
----------

This section lists the various "UI" actions that can be triggered by a key or
gamepad binding.

ui.release_mouse             Releases the mouse if it is currently captured
ui.plane_debug               Toggles the VDP plane debug view
ui.vram_debug                Toggles the VDP VRAM debug view
ui.cram_debug                Toggles the VDP CRAM debug view
ui.compositing_debug         Toggles the VDP compositing debug view
ui.oscilloscope              Toggles an oscilloscope visualization
ui.cd_graphics_debug         Toggles the Sega CD graphics ASIC debug view
ui.vdp_debug_mode            Cycles the mode/palette of the VDP debug view
                             that currently has focus
ui.enter_debugger            Enters the debugger for the main CPU of the
							 currently emulated system
ui.screenshot                Takes an internal screenshot
ui.record_video              Toggles video recording. Videos are recorded as an
                             animated PNG paired with a WAV file.
ui.vgm_log                   Toggles VGM file logging
ui.menu                      Opens the in-game menu, or exits the menu if it
                             is currently open.
ui.exit                      Quits the emulator
ui.save_state                Saves a savestate to the quicksave slot
ui.load_state                Loads a savestate from the quicksave slot
ui.set_speed.N               Selects a specific machine speed specified by N
                             which should be a number between 0-9. Speeds are
                             specified in the "clocks" section of the config
ui.next_speed                Selects the next machine speed
ui.prev_speed                Selects the previous machine speed
ui.pause                     Pauses emulation
ui.advance                   Advances a single frame if paused. Pauses if not.
ui.toggle_fullscreen         Toggles between fullscreen and windowed mode
ui.soft_reset                Resets a portion of the emulated machine
                             Equivalent to pushing the reset button on the
                             emulated device
ui.reload                    Reloads the current ROM from a file and performs
                             a hard reset of the emulated device
ui.sms_pause                 Triggers a press of the pause button when in SMS
                             mode
ui.toggle_keyboard_captured  Toggles the capture state of the host keyboard
                             when an emulated keyboard is present
ui.release_mouse             Release the mouse from the captured state
ui.paste                     Pastes the contents of the clipboard into the
                             emulated system by simulating keypresses.
							 Currently, this is only implemented for SC-3000
ui.pause                     Pause emulation
ui.advance                   Advance emulation a single frame

Cassette Actions
----------------

When emulating the SC-3000, cassette emulation is supported via the lock-on
functionality. The following binding names can be triggered by a key or gamepad
binding.

cassette.play                Start playing the virtual tape
cassette.record              Starting recording on the virtual tape
cassette.stop                Stop the virtual tape at the current position
cassette.rewind              Rewind the virtual tape

IO
--

This section controls which peripherals are attached to the emulated console.
IO assignments can be overridden by the ROM database when appropriate. For
instance, games with mouse support can automatically use the mouse and games
that only support 3-button pads can automatically force an appropriate pad.
Unforunately, the ROM database is not yet exhaustive so manual configuration
may be needed here in some cases. The following IO devices are recognized

gamepad.2           SMS gamepad
gamepad.3           3-button Gen/MD gamepad
gamepad.6           6-button Gen/MD gamepad
heartbeat_trainer   Special peripheral used for the Heartbeat Personal Trainer
mouse               Sega/Mega mouse
saturn_keyboard     Saturn keybord or keyboard adapter
xband_keyboard      Xband keyboard
sega_parallel       PC Parallel port connection used by some of Sega's devtools
generic             Generic pipe-based device emulation for use with external
                    software.
serial              Generic pipe-based serial emulation
sega_multitap       Sega's 4-player Multitap
ea_multitap_port_a  First port of EA's 4-way Play multitap
ea_multitap_port_a  Second port of EA's 4-way Play multitap

Video
-----

The video section contains settings that affect the visual output of BlastEm.

"aspect" is used to control the aspect ratio of the emulated display. The
default of 4:3 matches that of a standard definition television.

"width" is used to control the window width when not in fullscreen mode.

"height" is used to control the window height when not in fullscreen mode. If
left unspecified, it will be calculated from "width" and "aspect".

"vertex_shader" and "fragment_shader" define the GLSL shader program that
produces the final image for each frame. Shaders can be used to add various
visual effects or enhancements. Currently BlastEm only ships with the default
shader and a "subtle" crt shader. If you write your own shaders, place them in
$HOME/.config/blastem/shaders and then specify the basename of the new shader
files in the "vertex_shader" and "fragment_shader" config options. Note that
shaders are not available in the SDL fallback renderer.

"scanlines" controls whether there is any emulation of the gaps between display
lines that are present when driving a CRT television with a 240p signal. This
emulation is very basic at the moment so this option is off by default.

"vsync" controls whether the drawing of frames is synchronized to the monitor
refresh rate. Valid values for this setting are "off", "on" and "tear". The
latter will attempt to use the "late tear" option if it's available and normal
vsync otherwise. Currently it's recommended to leave this at the default of
"off" as it may not work well with the default "audio" sync method and the
"video" sync method will automatically enable "vsync". See "Sync Source and
VSync" for more details.

"fullscreen" controls whether BlastEm starts in fullscreen or windowed mode.
This can be overridden on the command line with the -f flag. If fullscreen
is set to "off", -f will turn it on. Conversely, if fullscreen is set to "on"
in the config, -f will turn it off.

"gl" controls whether OpenGL is used for rendering. The default value is on.
If it is set to off instead, the fallback renderer which uses SDL2's render API
will be used instead. This option is mostly useful for users on hardware that
lacks OpenGL 2 support. While BlastEm will fall back automatically even if gl
is set to on there will be a warning. Disabling gl eliminates this warning.

"integer_scaling" controls whether the vertical video scaling ratio is forced
to be an integer value or not. When set to "off", the video output will fill
the screen vertically. When set to "on" the largest integer multiple that fits
will be used instead.

"scaling" controls the type of scaling used for textures in both the GL and
SDL renderers. Valid values are "nearest" and "linear". Note that shaders also
impact how pixels are scaled. This option is deprecated. Use the "sharp" shader
if you want sharp pixels rather than using "nearest".

"npot_textures" controls whether non-power of 2 textures are used. Some old GL
implementations don't support these or have a performance hit, but some weak
SoC GPUs seem to have better performance when this is turned on.

The "ntsc" and "pal" sub-sections control overscan settings for the emulated
video output for NTSC and PAL consoles respectively. More details are available
in the Overscan section. The "gamegear" section controls the video crop for
Game Gear games.

Overscan
--------

Analog televisions generally don't display the entirety of a video frame. Some
portion is cropped at the edges of the display. This is called overscan.
Unfortunately, the amount of cropping performed varies considerably and is even
adjustable on many TV sets. To deal with this, BlastEm allows overscan to be
customized.

Overscan values are specified in the "ntsc" and "pal" sub-sections of the
"video" section of the config file. The "overscan" sub-section contains four
settings for specifying the number of pixels cropped on each side of the
display: "top", "bottom", "left" and "right".

The default settings hide the horizontal border completely for both NTSC and
PAL consoles. For the vertical borders, the NTSC overscan settings are chosen
to give square pixels with the default aspect ratio of 4:3. For PAL, the
default settings are set so that the PAL-exclusive V30 mode will produce a
visible border that is the same size as what is shown in V28 mode in NTSC. This
results in a slightly squished picture compared to NTSC which is probably
appropriate given that a PAL display has more lines than an NTSC one.

Audio
-----

The audio section contains settings that affect the audio output of BlastEm.

"rate" selects the preferred sample rate for audio output. Your operating
system may not accept this value in which case a different rate will be chosen.
This should generally be either the native sample rate of your sound card or an
integral divisor of it. Most modern sound cards have a native output rate that
is a multiple of 48000 Hz so the default setting should work well for most users.

"buffer size" controls how large of a buffer uses for audio data. Smaller values
will reduce latency, but too small of a value can lead to dropouts. 512 works
well for me, but a higher or lower value may be more appropriate for your system.

"lowpass_cutoff" controls the cutoff, or knee, frequency of the RC-style
low-pass filter. The default value of 3390 Hz is supposedly what is present in
at least some Genesis/Megadrive models. Other models reportedly use an even
lower value.

"gain" specifies the gain in decibels to be applied to the overall output.

"fm_gain" specifies the gain to be applied to the emulated FM output before
mixing with the PSG.

"psg_gain" specifies the gain to be applied to the emulated PSG output before
mixing with the FM chip.

"rf5c164_gain" specifies the gain to be applied to the emulated Ricoh RF5C164
before mixing with other sources.

"cdda_gain" specifies the gain to be applied to CDDA tracks before mixing with
other sources.

"fm_dac" controls the characteristics of the DAC in the emulated FM chip. If
this is set to "linear", then the DAC will have precise linear output similar
to the integrated YM3438 in later Gen/MD consoles. If it is set to "zero_offset",
there will be a larger gap between -1 and 0. This is commonly referred to as the
"ladder effect". This will also cause "leakage" on channels that are muted or
panned to one side in a similar manner to a discrete YM2612.


Clocks
------

The clocks section contains settings that affect how fast things run.

"m68k_divider" describes the relationsip between the master clock (which is
53693175 Hz for NTSC mode and 53203395 Hz for PAL mode). The default value of 7
matches the real hardware. Set this to a lower number to overclock the 68000
and set it to a higher number to underclock it.

"max_cycles" controls how often the system is forced to synchronize all
hardware. BlastEm generally uses a sync on demand approach to synchronizing
components in the system. This can provide perfect synchronization for most
components, but since the Z80 can steal cycles from the 68000 at unpredictable
times 68000/Z80 synchronization is imperfect. The default value of 3420
corresponds to the number of master clock cycles per line. Larger numbers may
produce a modest performance improvement whereas smaller numbers will improve
68000/Z80 synchronization.

"speeds" controls the speed of the overall emulated console at different
presets. Preset 0 is the default speed and should normally be set to 100. The
other presets enable the slow/turbo mode functionality.

UI
--

The UI section contains settings that affect the user interface.

"rom" determines the path of the Genesis/Megadrive ROM that implements the UI.
Relative paths will be loaded relative to the BlastEm executable.

"initial_path" specifies the starting path for the ROM browser. It can contain
the following special variables: $HOME, $EXEDIR. Additionally, variables
defined in the OS environment can be used.

"remember_path" specifies whether BlastEm should remember the last path used in
the file browser. When it is set to "on", the last path will be remembered and
used instead of "initial_path" in subsequent runs. If it is set to "off",
"initial_path" will always be used.

"screenshot_path" specifies the directory "internal" screenshots will be saved
in. It accepts the same special variables as "initial_path".

"screenshot_template" specifies a template for creating screenshot filenames.
It is specified as a format string for the C library function strftime

"vgm_path" specifies the directory where VGM logs will be recorded

"vgm_template" specifies a template for creating VGM log filenames. It uses the
same format as "screenshot_template"

"save_path" specifies the directory that savestates, SRAM and EEPROM data will
be saved in for a given game. It can contain the following special variables:
$HOME, $EXEDIR, $USERDATA, $ROMNAME. Like "initial_path" it can also reference
variables from the environment.

"extensions" specifies the file extensions that should be displayed in the file
browser.

"state_format" specifies the preferred format for saving save states. Valid
values are "native" (the default) and "gst". "native" save states do a better
job of preserving the state of the emulated system, but "gst" save states are
compatible with other emulators like Kega and Gens. This setting has no effect
for systems other than the Genesis/Mega Drive

"use_native_filechooser" specifies whether the native file chooser or builtin
Nuklear UI file chooser will be used. This option has no effect on Mac OS.

Path Variables
--------------

This section explains the meaning of the special path variables referenced
in the previous section.

$HOME      The home directory of the current user. On most Unix variants, it
           will be a subdirectory of /home. On Windows it will typically be a
           subdirectory of C:\Users
$EXEDIR    The directory the BlastEm executable is located in
$USERDATA  This is an OS-specific path used for storing application specific
           user data. On Unix variants, it will be  $HOME/.local/share/blastem
           On Windows it will be %LOCALDATA%/blastem
$ROMNAME   The name of the currently loaded ROM file without the extension

System
------

"ram_init" determines how the RAM in the emulated system is initialized. The
default value of "zero" will cause all RAM to be zeroed out before the system
is started. Alternatively, "random" can be used to initialize RAM with values
from a pseudo-random number generator. This option is mostly useful for
developers that want to debug initialization issues in their code.

"default_region" determines the console region that will be used when region
detection fails and when there are multiple valid regions. The default of 'U'
specifies a 60Hz "foreign" console.

"sync_source" controls whether BlastEm uses audio or video output to control
execution speed. "video" can provide a smoother experience when your display
has a similar refresh rate to the emulated system, but has some limitations
in the current version. The default value is "audio".

"megawifi" enables or disables support for MegaWiFi cart emulation. MegaWiFi
is a cartridge that contains WiFi hardware for network functionality. Enabling
this means that ROMs potentially have access to your network (and the internet)
which obviously has security implications. For this reason, it is disabled by
default. If you wish to try out MegaWiFi emulation, set this to "on". Note that
the support for MegaWiFi hardware is preliminary in this release.

"model" selects wich model of Genesis/Mega Drive is emulated. This feature is
still a work in progress and not all model quirks are currently implemented.

Debugger
--------

BlastEm has an integrated command-line debugger loosely based on GDB's
interface. It contains a turing complete language to support complex
breakpoint conditions and to allow some basic scripting. 

The -d flag can be used to cause BlastEm to start in the debugger.
Alternatively, you can use the ui.enter_debugger action (mapped to the 'u' key
by default) to enter the debugger while a game is running. To debug the menu
ROM, use the -dm flag.


Top level debugger commands take the following form:

    COMMAND[/FORMAT_CHAR] [ARGS]
	
Where COMMAND is the name of the command, an unambiguous prefix or an explict
alias. FORMAT_CHAR is a single character specifying the desired format for
certain commands. ARGS is a list of arguments separated by spaces. Arguments
must be syntactically valid as an expression and are generally evaluated as
such, but there are some exceptions. For instance, the "function" command
expects its first argument to be the bare name of the function. This is used
directly rather than evaluated.

To get a list of commands valid in the current context use the help command.
The help command will also list explicit aliases for a command and its expected
arguments.

The commands available in all contexts are:
    quit
	help
	breakpoint ADDRESS             Add a new breakpoint at ADDRESS for the
	                               current CPU
    watchpoint ADDRESS [SIZE]      Set a watchpoint at ADDRESS with an optional
	                               size in bytes. If not specified, the default
								   size is context dependent.
	continue                       Resume execution
	advance ADDRESS                Resume execution until ADDRESS is reached
	step                           Advance to the next instruction, stepping
	                               into subroutines.
	next                           Advance to the next instruction, stepping
	                               over subroutine calls.
	over                           Similar to next, but ignores branches to
	                               a lower address. Good for skipping over
								   loops.
	backtrace                      Attempts to print a backtrace. Note that
	                               this uses heuristics and will not provide
								   correct results in all cases.
	frames EXPRESSION              Resume execution for EXPRESSION video frames
	print[/FORMAT] EXPRESSION      Print the value of EXPRESSION using FORMAT
	printf FORMAT EXPRESSION...    Basically the same as the C function
	softreset                      Equivalent to the ui.soft_reset binding
	display[/FORMAT] EXPRESSION... Print one ore more expressions every time
	                               this debug context is entered
    deletedisplay                  Removes an entry added via "display"
	commands BREAKPOINT            Set a list of commands to execute when a
	                               breakpoint is hit. End the list with "end"
	function NAME [ARGS...]        Creates a user-defined named NAME with
								   arguments ARGS. Enter the body of the
								   function on subsequent lines. End with "end"
    return VALUE                   Returns a value inside a function
	set MEM|NAME VALUE             Sets a register, symbol or memory location
	                               to VALUE
	variable NAME [VALUE]          Create a new variable called NAME and set it
	                               to VALUE or 0 if no value provided
	array NAME [VALUE...]          Create a new array called NAME if it doesn't
								   already exist. The array is initialized with
								   the remaining parameters.
    append NAME VALUE              Appens VALUE to the array NAME
	bindup NAME                    Simulate a keyup for binding NAME
	binddown NAME                  Simulate a keydown for binding NAME

For a list of functions available in specific contexts, use the builtin help
command.

Debugger expressions are formed from literals, operators, paren grouping, array
access and function calls.

The following types of literals are supported:
 - Decimal integers
 - Hex integers using 0x and $ prefixes
 - Strings surrounded by "
 - Floating point numbers

The following operators are available:
 + addition
 - subtraction, unary negation
 * multiplication
 / division
 & bitwise and
 | bitwise or
 ^ bitwise xor
 = equality checking
 != inequality checking
 > greater than
 >= greater equal
 < less than
 <= less equal
 ! logical not
 ~ bitwise not

The following builtin functions are available:
	sin, cos, tan, asin, acos, atan, atan2: sames as their C equivalents
	pop: pops a value from the end of an array
	size: returns the size of an array

GDB Remote Debugging
--------------------

In addition to the native debugger, BlastEm can also act as a GDB remote
debugging stub. To use this, you'll want to configure your Makefile to produce
both an ELF executable and a raw binary. Invoke an m68k-elf targeted gdb with
the ELF file. Once inside the gdb session, type:

    target remote | BLASTEM_PATH/blastem ROM_FILE.bin -D

where BLASTEM_PATH is the relative or absolute path to your BlastEm
installation and ROM_FILE.bin is the name of the raw binary for your program.
BlastEm will halt at the beginning of your program's entry point and return
control to GDB. This will allow you to set breakpoints before your code runs.

On Windows, the procedure is slightly different. First run
    blastem.exe ROM_FILE.bin -D
This will cause BlastEm to wait for a socket connection on port 1234. It will
appear to be frozen until gdb connects to it. Now open the ELF file in gdb
and type:

    target remote :1234

Trace points and watch points are not currently supported.

Included Tools
--------------

BlastEm ships with a few small utilities that leverage portions of the emulator
code.

    dis       - 68K disassembler
    zdis      - Z80 disassembler

Note that the Windows build no longer includes these due to Windows Defender
false positives.

Sync Source and VSync
-----

This section includes information about using VSync with BlastEm. Currently,
the best way to use VSync is to set the sync source to "video". This will force
VSync on and use video output for controlling the speed of emulation. In this
mode, audio will have it's rate automatically adjusted to keep pace with video.
The code for this is still a bit immature, so you may experience dropouts or
pitch changes in this mode.

If you experience problems, please switch back to the "audio" sync source,
which is the default. You can also enable vsync when using the "audio" sync
source by changing the "vsync" setting. This will generally work okay as long
as the emulated refresh rate is below your monitor refresh rate (even if only
slightly), but you will occassionally get a doubled frame (or frequently if
the refresh rates are very different).

Turbo mode will currently not work when vsync is on, regardless of which sync
source is used. Slow mode will work with "audio" sync, but not "video" sync.

--------------

My work has been made much easier by the contributions of those in the Genesis
community past and present. I'd like to thank the people below for their help.

Nemesis            - His work reverse engineering and documenting the VDP and
                     YM-2612 has saved me an immeasurable amount of time. I've
                     found both his sprite overflow test ROM and VDP FIFO
                     Testing ROM to be quite helpful.

Charles MacDonald  - While it hasn't been updated in a while, I still find his
                     VDP document to be my favorite reference. His Genesis
                     hardware document has also come in handy.

Eke-Eke            - Eke-Eke wrote a great document on the use of I2C EEPROM in
                     Genesis games and also left some useful very helpful
                     comments about problematic games in Genesis Plus GX

Sauraen            - Sauraen has analyzed the YM2203 and YM2612 dies and written
                     a VHDL operator implementation. These have been useful in
                     improving the accuracy of my YM2612 core.

Alexey Khokholov   - Alexey (aka Nuke.YKT) has analyzed the YM3438 die and written
                     a fairly direct C implementation from that analysis. This
                     has been a useful reference for verifying and improving my
                     YM2612 core.

Bart Trzynadlowski - His documents on the Genecyst save-state format and the
                     mapper used in Super Street Fighter 2 were definitely
                     appreciated.

KanedaFR           - Kaneda's SpritesMind forum is a great resource for the
                     Sega development community.

Titan              - Titan has created what are without a doubt the most
                     impressive demos on the Megadrive. Additionally, I am very
                     grateful for the documentation provided by Kabuto and the
                     assistance of Kabuto, Sik and Jorge in getting Overdrive 2
                     to run properly in BlastEm.

flamewing          - flamewing created a very handy exhaustive test ROM for 68K
                     BCD instructions and documented the proper behavior for
                     certain BCD edge cases

r57shell           - r57shell created a test ROM for 68K instruction sizes that
                     was invaluable in fixing the remaining bugs in my 68K instruction
                     decoder

I'd also like to thank the following people who have performed compatibility
testing or submitted helpful bug reports

micky, Sasha, lol-frank, Sik, Tim Lawrence, ComradeOj, Vladikcomper

I have unfortunately not been good of keeping track of this since the 0.6.2
release. I have received help from quite a few people since, but have stopped
updating this list. If you're one of those people please accept my apologies
and know that your help is definitely still appreciated.

License
-------

BlastEm is free software distributed under the terms of the GNU General Public
License version 3 or higher. This gives you the right to redistribute and/or
modify the program as long as you follow the terms of the license. See the file
COPYING for full license details.

Binary releases of BlastEm are packaged with GLEW, SDL2, zlib and zstd which have
their own licenses. See GLEW-LICENSE and SDL-LICENSE for details. For zlib license
information, please see zlib/zlib.h or zlib/LICENSE in the source code release. zstd
is available under two different licenses GPLv2 (see ZSTD-COPYING) and BSD (see
ZSTD-LICENSE).