Firmware
for Megaswitch HD

Update

1. Upload the files MSHD_FW_Updater.exe and CORE.bin into the same folder. It is recommended to use the latest version of CORE.bin.
2. Connect the USB Type-C cable to the console and the computer.
3. While holding down the RESET button, power on the console.
4. Run MSHD_FW_Updater.exe and select the latest COM port.
5. Press the "Init Port" button and wait for the update process to complete.  Do not turn off the console or computer.
6. Upon completion of the update, press the "Close Port" button and close the program. The update is complete.
7. If you are downgrading to a version below 24.0.1, be sure to reset the settings (System/Default).

Download:

If you are updating the firmware for the first time, install the drivers from the STM32 Virtual COM Port Driver.zip archive.
If you're experiencing issues launching MSHD_FW_Updater on Win11, install AccessRuntime_x86_en-us.exe

v25.0

Scanlines:

In the Post-Processing page, a link to the Scanlines page has been added.
An emulation of CRT scanlines has been added by darkening parts of the HDMI sub-lines.
The final HDMI colors are input into the gamma and brightness function. Therefore, any changes to HDMI colors on the Colors page will immediately reflect on the scanlines . 

ATTENTION:
- It is recommended to use only integer scaling Height 5x or 4x.
- For a closer resemblance to CRT, enable Limited RGB range. 

Displayed:   (Added)
Added the ability to enable and disable scanlines. 

Gamma:   (Added)
Added gamma function for editing scanlines. Gamma does not change the maximum and minimum brightness values, but alters the relationship between shades.  
"1.00" linear increase in brightness.  
"0.50" differences between shades deteriorate. The image becomes darker.
"0.80" default.

Brightness:   (Added)
Added brightness adjustment function for scanlines. It linearly adjusts the brightness value of all shades. .  
"1.00" maximum brightness.  
"0.00" minimum brightness.
"0.96" default.

v24.2

RGB Steps:

Gen/MD mini:   (Added)
The brightness step range from 16 to 220. This range was present in Mini Consoles. The values are not entirely linear.
It is not recommended to use the "Limited RGB" option simultaneously with this preset because these values are already limited. 

The firmware version display has been modified.
Major version "1" has been added at the beginning, followed by the familiar numbering, such as "24.2".

v24.0.1

Automatic reset to defaults added (on first boot after firmware update) if the version differs from the previous one.

Added restriction when selecting Custom Levels values. It is not possible to choose values less than 0 and greater than 255.

v24.0.0

The scheme for creating HDMI color in the FPGA has been modified. 

In the Post-Processing page, the HDMI Color menu item has been removed, and a link to the Color page has been added.

Color:

The ability to extensively edit the output color has been added, including the option to specify brightness levels for each step manually.

Limited RGB:   (Added)
Added the ability to limit the range of HDMI output RGB color. Useful if your TV doesn't support the full spectrum. 
"Disabled" uses the full range of values from 0 to 255.  
"Enabled" limits it to a range from 16 to 235.  

Separate Gamma:   (Added)
Added joint and separate editing of gamma.  
"Disabled" joint editing of RGB channels.  
"Enabled" editing each channel separately.  

Red, Green, Blue:   (Added)
Added gamma function for editing each RGB channel. Gamma does not change the maximum and minimum brightness values, but alters the relationship between shades.   
"1.00" linear increase in brightness.  
"2.00" intensifies the differences between shades. The image becomes brighter.
"0.50" differences between shades deteriorate. The image becomes darker

RGB Steps:   (Added)
Added the ability to select brightness steps from preset values.  
"Non-linear" corresponds to the voltage values of analog RGB generated by the DAC on real hardware.
"Linear" this is a linear increase in brightness with a range of values from 0 to 252.  
"Custom" allows fully manual editing of each brightness bit for each color. 

Custom Levels:   (Added)
Added a page for manual editing of brightness levels in Custom mode.    
Using the D-Pad, you can select a row in the table and change the values.
Pressing the A button allows you to choose the editing mode (separate or joint).
This tool is intended for those who know exactly what values they need or for fine-tuning purposes. 

HDMI Colors:   (Added)
Added a page to display the final brightness values that were obtained after all calculations and sent to the HDMI transmitter.
You can perform a check of the brightness values obtained after applying different editing modes: after changing gamma, range limitation, or after manual input of values (in the Custom Levels page). 

v23.1.0

The output data from the FPGA for the HDMI transmitter has become more resilient to interference.

Buffer:

Added a one-time inputlag reset in Single buffer mode.
Upon powering up the console, 1080p synchronizes once with 240p, and thereafter the video buffer operates normally.
Previously, the console would start with a random inputlag within the video buffer range.
This allows starting the game with minimal inputlag. The phase of video generation may be shifted depending on the game itself. 

v23.0.0

Audio:

Added support for the Audio-ADC board, which enables digitizing analog audio and outputting it to the HDMI transmitter (24-bit, 48Khz or 96Khz).

Sampling:   (Added)
Added the option to select the sound sampling frequency in the HDMI transmitter and ADC chip.
"48Khz" uses down-sampling through a divider by 2.
"96Khz" does not use down-sampling. 

Left ADC gain:   (Added)
Right ADC gain:   (Added)
Added the option for amplifying the input analog audio signal for the left and right channels.
"0dB" gain is disabled.  
"-12dB" gain reduced to minimum .
"+12dB" gain up to maximum . The ADC chip allows amplification up to +40dB, but this would involve digital amplification, whereas up to +12dB is only analog. 

Swap Channel:   (Added)
Added an option to swap the left and right channels for the HDMI transmitter.
"Disabled" The swap function is disabled.  
"Enabled" The swap function is enabled .

v21.1.0

Resolution:

Timings:   (Added)
Added the option to choose between two custom timings for 1920x1080p resolution.
"0"  represents timings of version 21.0.0. These generate HDMI lines synchronously with 240p by multiplying them 5x. The duration of one HDMI frame is equivalent to that of a 240p console frame. This method is used in the line doubling algorithm. However, this resolution is not compatible with all TVs.
"1"  represents timings that also have an HDMI frame duration equivalent to that of a 240p console frame. However, HDMI lines are generated for a longer duration compared to 240p lines. This allowed the timings to approach the SMPTE 274M standard, though not completely (due to differences in pixel frequency). As a result, compatibility with TVs increased, but not with all of them. 

Buffer:

Inputlag:   (Added)
Displays the delay within the video buffer when it's in the "Single buffer" mode. When switching resolutions from 320x224 to 256x224, the VDP can briefly interrupt the 240p generation. In some cases, the VDP might shift the phase of 240p generation. With each resolution switch in 240p, input lag can accumulate. Therefore, in the "Single buffer" mode, the input lag is dynamic. And for a more precise understanding of the accumulated delay at any given time, I added a display of this value. The duration of the input lag is represented in terms of 240p lines. There are a total of 262 lines. This means the lag can range from 0 to 261 and constantly change with each new resolution. 

Post-processing:

HInterpolation:   (Added)
This is horizontal smoothing that affects one subpixel of 1080p, situated at the junction between two original 240p pixels.

v21.0.0

Resolution:

HDMI output:
Displays the current generated resolution.
"1080p" signifies 1920x1080p with custom timings.
"@60" or "@50" indicates a refresh rate of 60/50Hz. 

Apply:
After changing the resolution (not available in this firmware version), you need to select "Apply"

Screen size:

Aspect ratio:
Allows selecting aspect ratio horizontally between "4:3" and "16:9"

Height:
Enables vertical image scaling using multiplication factors with fractional values. Ranges from "4x" to "5x". A factor of "4.834x" closely approximates displaying 224 original lines on 1080 visible HDMI lines. 

Buffer:

Output mode:
"Single buffer" is a HDMI generation mode without synchronization with the 240p console. This allows continuous HDMI generation even if the VDP is turned off, changes resolution, or shifts the 240p generation phase. This frequently occurs in UMK3 (switching between 320x224 and 256x224) or Sonic 2 (switching between 240p and 480i).  
"Zero delay" is a synchronized HDMI generation mode. Synchronization occurs either at the initial visible lines of 240p and 1080p, or at the final visible lines. This depends on the rate at which 1080p visible lines are generated. If they are generated faster than 240p lines, synchronization occurs at the lower lines. If 1080p is generated slower than 240p, HDMI synchronization takes place at the upper line. This approach achieves a zero delay. 

Advanced features:

Mask:
Allows clipping of colored garbage frames around the image. On CRT televisions, the area around the image was not displayed. However, during upscaling, especially with an aspect ratio of 4:3 or when the height is less than 4.834x, these backgrounds become visible. Therefore, displaying them is optional. 

CRAM dots:
These are artifacts that appear on the hardware version of the VDP. They are usually visible in the lower part of the image or in the middle during palette cycling (such as water levels in Sonic). In the original, they cannot be disabled. However, the mod reconstructs some of the VDP's functions and is not affected by such artifacts. But I have added additional conditions for their occurrence. Therefore, the artifact is optional.

Post-processing:

HDMI Color:
The original color depth is 4 bits per one of the RGB channels (12 bits in total). HDMI allows outputting 8 bits per channel (24 bits). Therefore, it's possible to distribute the 4-bit value to the 8-bit one in different ways, thus upscaling the color depth.
"Full RGB 0-255" is a linear distribution of the 4-bit value across an 8-bit number, ranging from 0 to 255.
"test1 0-244" is also a linear distribution of the 4-bit value across an 8-bit number, but ranging from 0 to 244.

System:

Hardware:
Supports all regions and provides detailed information about the current VDP video mode. The HDMI frequency depends on the refresh rate. 

Hotkey:
To invoke the OSD, you hold down the selected buttons on the gamepad. 

Gamepad test:
Can you check the functionality of the gamepad. 

Default:
Absolutely all settings will be set to default. 

About:
Concise information about the board and links.