Repository navigation
Releases
MINIPRO-RS v0.10.0
[0.10.0] - 2026-11-06
Fixed
-
GUI: gate aborts no longer double-logged as failures — a pin-contact or chip-ID pre-op gate used to emit its reason and then appear again as
Read failed: Pin contact check failed: …from the operation wrapper. Gates now return a terse abort marker and the log shows a singleRead aborted (pin contact check)-style line, matching the TUI. -
GUI: pin-check gate now shows pass results on the ZIF diagram — the pre-operation pin contact check only emitted its result to the diagram on failure, so a passing check left the socket display unchanged (ambiguous — did it run?). It now emits unconditionally: a pass colors the tested pins green, matching the standalone Pin Test button and the TUI.
-
GUI: phantom "Chip ID check passed" / "erased successfully" after aborted ops — a cosmetic frontend log printed
Chip ID check passedwhenever the chip-ID option was on and the device had an ID flag — with no hardware check — and it ran unconditionally after the operation promise resolved, even when a pre-op gate had aborted it. Also removed the same lie-pattern on erase:Chip erased successfullynow only prints when the erase actually completes. -
GUI: 15 latent type errors fixed;
npm run checkgate added — cleared the accumulated svelte-check backlog: nullable-store derefs that could throw at runtime (DiagnosticsPanelfirmware update,IcspConnectorDiagram, App.svelte),defaultOptions()missing fiveOperationOptionsfields,icsp_mode/serial-config union mismatches, andSettingsPanel's windowsetSizecall corrected to theLogicalSizeAPI (the object form didn't satisfy Tauri 2'sSizetype — the "Reset layout" resize may have been silently failing).cd gui && npm run checknow runs svelte-check and reports 0 errors; it's documented in AGENTS.md as the required gate for frontend changes. -
T76: reads silently shifted the whole image by one block after an abandoned stream — T76 bulk reads are firmware-pushed streams on EP82; an op that stops early (
blank_checkhitting a non-blank byte, a failed verify, an aborted read) left one buffered chunk behind, which the next read consumed as block 0 — returning real chip data displaced by one 4 KiB block and losing the last block. Every frontend was affected (observed via TUI blank-check → read producing a rotated dump of a W25X20CL; confirmed byte-exact against a TL866A read). Streamed reads now drain the endpoint before starting. Seedocs/KNOWN-BUGS.md. -
TUI: device list unreachable while searching — with the search input focused, every non-editing key was swallowed, so ↑/↓/PgUp/PgDn couldn't navigate results and Tab did nothing. Arrows now move the results cursor while typing (fzf convention), Tab/BackTab exit the field and cycle panes, and Enter selects the highlighted device directly instead of only leaving edit mode (Esc still cancels without selecting).
-
TUI: log pane truncated long messages with no way to see them — the fixed-width pane clipped entries at the right edge. Entries now word-wrap to the pane width (continuation rows indent under the message) and scroll (
k/PgUp) works in wrapped rows. Line format also matches the GUI log — colored[INFO]/[WARN]/[ERROR]tag + message — instead of timestamps. -
TUI: pre-op gate aborts logged the same failure twice — a failed pin-contact or chip-ID gate printed its reason, then the generic op-completion line repeated it as "✗ read failed: …" (also wrong: the op never ran). Gates now return a dedicated
OpOutcome::Aborted— the log shows the gate's reason once plus one short status line, e.g.✗ read aborted (pin contact check). -
TUI: library
eprintln!output leaked onto the frame — core protocol paths print progress/diagnostic lines to stderr (Using T76 … algorithm, pin-test progress, OVC results); in the TUI that text painted over the keybar mid-op. Core now routes them through a newoutln!macro —eprintln!by default (CLI/GUI output unchanged),log::info!when a frontend setsPRINT_TO_LOG. The TUI opts in, so those lines land in its log pane instead. -
GUI ZIF diagram: bad-pin label spacing — "PIN n" callouts sat 4px from the socket while "ZIF PIN 1" sits 8px; all labels now share the same 8px column.
-
T76 logic-IC test reported good chips as failed (all-high vectors only) — the shared TL866 two-pass path ran both vector passes against whatever bitstream
begin_transactionhad loaded (for logic devices,Test_100M— the SRAM tester), so outputs read low and every vector expectingHerrored. Matching upstreamt76_logic_ic_test, the pull direction is now baked into the FPGA per pass:TestLgcPullis uploaded before the pull-up pass andTestLgcDownbefore the pull-down pass (utility algorithms 0x0300/0x0200 fromalgorithm.xml), and the bitstream cache is invalidated afterwards. 7408 and other logic ICs now test correctly on T76. T56 was unaffected (its TTL1/TTL2 bitstream honors the runtime pull flag). Hardware-verified with a 7408. -
Pin-test result Clear moved to the card's top-right — matches the Log panel header and IdentifyResults conventions (result-card actions live top-right); the button no longer trails the status text at bottom-left.
-
Accent hover cue extended to the remaining
preset-tonalbuttons — SPI Auto Detect (8-pin/16-pin), Scroll/Paginate toggle, Prev/Next pagination, and the Settings gear now use the Settings-modal hover convention (accent-tinted background/border with transition). Everypreset-tonalbutton in the app now cues on hover. -
Log panel Copy button now gives feedback — it silently swallowed both success and clipboard-API failures, and had no tooltip or hover cue unlike every other button. It now swaps to a checkmark "Copied" state for ~1.5 s (ChatGPT/Claude-style), keeps a warning in the log on failure, and both Log buttons carry tooltips plus the Settings-modal hover convention (accent-tinted background/border).
-
Firmware-update confirm no longer raises a bogus hardware-revision warning on T48/T56/T76 — those models always report hardware version
0(it's a display constant), while downloadedfirmware-<model>-*.datfilenames carry XGecu's product-line prefix (firmware-T48-01.1.35.datvs installed00.1.03), so the first-component comparison fired on every T48 update. The note now compares the real firmware version (major.minor, the low u16 of the file header) and only evaluates the hardware-revision warning on models reporting a real hw byte (TL866A/II+). -
TL866A/CS firmware update now warns about clone-brick risk — MiniPro 6.82+ firmware (3.2.85/3.2.86, the last TL866A release) contains clone detection that disables the bootloader on counterfeit units; recovery requires forcing boot mode in hardware. The firmware-update confirmation now spells this out for TL866A/CS models, on both the auto-found and manually-picked file paths.
-
T56/T76 algorithm.xml bitstreams always rejected — chip ID and reads returned zeros — upstream's
crc_32is a reflected CRC-32 with no final complement, but the port usedCRC_32_ISO_HDLC(which XORs the result with0xFFFFFFFF), so every embedded bitstream CRC mismatched andalgorithm.xmlcould never load. On the T76 every operation needs an uploaded FPGA bitstream; without it reads/clocks returned garbage. Verified on real T76 hardware (firmware 00.1.18): W25X20CL and PM25LV010 chip ID (0x00ef3012/0x00009d7c) and full reads now work. The same wrong-profile CRC also broke T56/T76 firmware-update image verification. Both now use the ported no-xor-outcrc_32. -
T76 level-2 bitstream decompression rejected valid algorithms — the declared output size can be odd (SPI25F11 declares 701,145 bytes while the stream emits 701,144 u16 words); upstream tolerates the slack via
callocbut the port errored on the mismatch and dropped a boundary word. The decoder now rounds the buffer to even, decodes fully, and truncates. -
Missing/failed T56/T76 algorithm lookup now fails
begin_transaction— upstream C minipro callsget_algorithm()unconditionally and aborts when it fails; the port logged a warning (or nothing, whenalgorithm.xmlwas absent) and continued with a blank FPGA, producing silent zero reads. Lookup is now attempted for all T56/T76 devices and any failure aborts with a clear error. -
T48 rejected at connect with "firmware too old" — the firmware minimum check grouped the T48 with the TL866II+ minimum (
0x255), but the T48 runs its own firmware line (latest0x127/ 01.1.39), so every released T48 firmware was refused. The T48 now has its own minimum (0, no hard floor), matching upstream C minipro which warns on version mismatch but never refuses to connect. -
minipro -tpanic and bogus results on T48 — the hardware self-test used the TL866II+ pin tables and byte-per-pin parsing, but the T48 has its own pin-driver domain (56 drivers, bit-packed pin states, swapped pull-up/pull-down opcodes, different self-test tables). This reported every VPP pin as Bad and panicked withindex out of boundson pin 9. Ported the upstreamt48_hardware_check— VPP/VCC/GND driver tests, logic-level drive tests at both levels, cross-short detection, and the overcurrent-protection tail. Output now matches upstream (17 VPP / 34 VCC / 35 GND / 2×53 logic pinsand per-pinstate is Good/Badlines). -
T48 reads/writes over 64 bytes failed with USB errors — reads and writes of chips with
read_buffer_size/write_buffer_size> 64 bytes (e.g. ATMEGA328P@DIP28, BY25Q128@SOIC8) died on the first block withhardware fault or protocol violationortransfer was cancelled, because the code used the TL866II+ dual-endpoint (EP2+EP3) payload path which the T48 firmware never services. T48 now routes all block payloads through EP2 only, matching upstreamt48_read_block/t48_write_block(read_payload2/`write_paylo...
MINIPRO-RS v0.9.0
[0.9.0] - 2026-09-25
Added
-
ICSP wiring diagrams (GUI + CLI) — scratch-built SVG wiring diagrams shown for devices with a verified ICSP wiring class: per-model connector layouts (TL866A/II+ 1×6, T56 1×8, T48 2×8, T76 2×14 zigzag), a signal-labeled pin table, and safety notes in a collapsible, scrollable panel. The CLI prints an ASCII wiring table via
-d <DEVICE> -q <MODEL>. All verified classes are covered on TL866A, TL866II+, T48, T56, and T76; unverified classes show a safe fallback note. No proprietary Xgpro assets are used. -
ZIF socket placement hints (CLI) —
-dprints a one-line insertion hint for direct-DIP devices, resolved from per-model socket rules inminipro_core::zif(e.g.ZIF placement (T76): bottom of socket — occupies ZIF 21-24 + 25-28 (chip pin 1 at ZIF pin 21)). Adapter packages print a "requires an adapter" note instead; without-q, a--programmerhint is shown. -
ZIF-pin annotation in
-zoutput — pin-contact failures now printBad contact on pin: N (ZIF pin M), resolved through the connected model's insertion rule. -
Model-filtered favorites — favorites whose exact name doesn't exist in the connected programmer's database section are hidden while that model is connected (device naming differs per programmer family, e.g.
PIC16F628AvsPIC16F628A@DIP18). Stored favorites are untouched and reappear when a compatible model connects. -
MINIPRO_FAKE_PROGRAMMERdev hook — set to a model name (TL866A,TL866CS,TL866II+,T48,T56,T76) to fake a connected programmer for hardware-free GUI testing of device search/selection and the ICSP/ZIF diagrams. -
Man page & completions in GitHub release tarballs — macOS/Linux CLI releases are now
.tar.gzarchives containing the binary,man/man1/minipro.1.gz, and bash/zsh/fish completions (generated by the existing--generate-man/--generate-completionsflags, matching what the GitLab.deb/.rpmpackages already install).
Fixed
-
ZIF diagram wrong socket geometry on several models — corrected against XGPro's own placement diagrams: the T48 uses a 40-pin socket (was drawn as 48-pin) with the lever at bottom-right; T56/T76 levers are top-left (were drawn bottom); T56/T76 chips are bottom-justified — the chip's lower-left pin sits at ZIF pin 24, so a DIP-8 occupies ZIF 21–24 + 25–28 — rather than top-justified. Chip overlay, pin stubs, occupied slots, bad-pin highlighting, and "PIN N" labels all follow the corrected per-model rules.
-
ZIF diagram flicker on device change — the chip overlay briefly disappeared and the socket could snap to a 48-pin fallback while the layout refetched. The last valid layout is now kept until the new one arrives, and resolved layouts are cached per (model, pin count).
-
Device search results collapsed to just the selection — selecting a device from the search results list overwrote the search field with the full device name and re-ran the search, hiding all other matches. Selections made inside DeviceSelector are now marked as already synced so the
$selectedDevice→searchQuerysync effect only applies to external selections (e.g. IdentifyResults). -
--helpfooter pointed at unreachable URLs — the GitLab Pages links advertised in the long help text 404/redirect to sign-in (Pages access control is on and no HTML man page is published). The footer now links to the repo and the GitHub releases page, and points at--generate-manfor the manual.
Installers
- Linux:
.deb(Debian/Ubuntu) - Windows users: Download
.msi/.exefrom GitHub Releases — native MSVC builds scan clean. The GitLab Windows binaries are cross-compiled and may trigger AV heuristics. - macOS users: If you see "MINIPRO-RS-GUI is damaged and can't be opened," this is Gatekeeper, not real corruption — the app is unsigned. Drag the app to Applications, then run
xattr -cr /Applications/MINIPRO-RS-GUI.appin Terminal to strip the quarantine attribute.
CLI Binaries
Standalone minipro CLI binaries for Linux and Windows are attached below.
See CHANGELOG.md for full history.
MINIPRO-RS v0.8.2
[0.8.2] - 2026-09-09
Added
-
ZIF socket diagram in logic identify mode — the ZIF socket diagram now shows in "Select a logic IC" mode, with an empty socket (including lever position and ZIF PIN 1 label) before a pin count is selected, and a chip outline in the correct position once a pin count is chosen. Helps users orient the chip before clicking Identify.
-
Always-visible ZIF PIN 1 label — the "ZIF PIN 1" label now renders whenever the socket diagram is shown, not only when a chip overlay is present. Pin 1 is a property of the socket, not the chip.
Fixed
-
PIC config word truncation to 8 bits — PIC 12-, 14-, and 16-bit configuration words were silently truncated to 8 bits on read and write. The fuse element size is now determined from the config name (
pic_*= 2 bytes),FuseValue.valueis widened tou16, and the read/write paths pack/unpack 2-byte little-endian values for PIC devices. AVR one-byte fuse behavior is unchanged. -
TL866A config write did not persist — the TL866A
write_fusespacket was missing thecode_memory_size - 0x38field at bytes[4..6](upstream firmware bug workaround). The write packet now matches upstreamtl866a.cexactly. The read packet also now sets[4..6] = code_memory_sizeper upstream. -
Write-side fuse value normalization — fuse values are now normalized before writing (
value |= ~mask,value &= compare_mask,value &= 0xfffor 1-byte), matching upstream Cminipro. Without this, values with bits set outside the device mask or chip width were sent raw and rejected by the firmware. -
FuseBitDecoder rejected valid PIC config values —
maxValuewas(1 << width) - 1(e.g.0x3FFFfor 14-bit PIC), but PIC config words have unused upper bits filled with 1s via mask normalization, so valid values like0xFDFFwere silently rejected. NowmaxValueis0xFFfor 8-bit configs and0xFFFFfor all wider configs. -
Collapsed fuse input truncated PIC 4-digit hex — the collapsed config panel and fallback hex inputs had
maxlength="2"hardcoded, truncatingFDFFtoFDfor PIC devices. Now usesfuseHexDigits()(4 for 2-byte elements) and dynamic input width. -
Model-aware pin 1 instruction in logic identify panel — the instruction text now correctly reflects lever position per programmer model. TL866A/CS/TL866II+ (lever at top): "pin 1 at the top, aligned with the lever". T48/T56/T76 (lever at bottom): "pin 1 at the top, opposite the lever". Previously the instruction always said "pin 1 aligned with lever", which was wrong for T48/T56/T76.
-
Logic identify silently returns "no matches" when USB is suspended — after laptop sleep/wake, the programmer's USB connection can be suspended without the GUI detecting it (the status badge still shows green). Clicking Identify would silently test all candidates against a dead USB connection and return "no matches found" instead of an error. USB communication errors now abort the scan immediately with a clear error message, and the stale programmer state is cleared so the user knows to replug.
-
Device list showed chips unsupported by the connected programmer — the GUI loaded device names from all database sections (INFOIC, INFOIC2PLUS, INFOICT76) instead of filtering by the connected programmer's model. This allowed selecting chips that the firmware cannot program (e.g. PIC12F1822 on TL866A), resulting in silent write failures. The device list is now reloaded with model-specific filtering when a programmer connects, and
select_deviceno longer falls back to searching all database sections when the model-specific lookup fails. -
FuseBitDecoder hex input limited to 3 digits for 12-bit PIC — the hex input field in the expanded fuse bit decoder used
width <= 12 ? 3for the maxlength, preventing entry of 4-digit values like0xFFFEfor 12-bit PIC config words. PIC config values are stored as 2-byte values with unused upper bits filled to 1s via mask normalization, so they always need 4 hex digits. Now uses 4 for any width > 8. -
Pasted text in device search field reverted to previous value — the
$effectsyncingsearchQueryfrom$selectedDevicealso reacted toselectedNamechanges. WhendoSearchclearedselectedName(line 79), the effect re-ran and overwrotesearchQuerywith the old device name. Now only reacts to$selectedDevicechanges via alastSyncedDeviceguard. -
Device selection lost when search results refresh —
doSearchclearedselectedNameandselectedInfoafter every search, causing the selection highlight to disappear when the$selectedDevice→searchQuerysync effect triggered a re-search (e.g. selecting from IdentifyResults, or clicking a device whose name triggers a new search). The selection should persist across searches;doSearchno longer clears selection state.
Installers
- Linux:
.deb(Debian/Ubuntu) - Windows users: Download
.msi/.exefrom GitHub Releases — native MSVC builds scan clean. The GitLab Windows binaries are cross-compiled and may trigger AV heuristics. - macOS users: If you see "MINIPRO-RS-GUI is damaged and can't be opened," this is Gatekeeper, not real corruption — the app is unsigned. Drag the app to Applications, then run
xattr -cr /Applications/MINIPRO-RS-GUI.appin Terminal to strip the quarantine attribute.
CLI Binaries
Standalone minipro CLI binaries for Linux and Windows are attached below.
See CHANGELOG.md for full history.
MINIPRO-RS v0.8.1
[0.8.1] - 2026-08-26
Re-release of v0.8.0. The v0.8.0 GitHub Actions release failed due to a bash quoting bug in the release notes script, compounded by a GitHub Actions outage on Aug 26, 2026. GitLab CLI binaries for v0.8.0 were published successfully. This release re-publishes the same features with the fix. No code changes from v0.8.0.
Added
-
Logic IC identify operation (GUI) — automatically identify an unknown logic IC by testing it against all database entries with a matching pin count. The Logic Test tab is now always enabled; when no Logic device is selected, a "Select a logic IC" panel shows pin count buttons, VCC selector, and an Identify button. Results show only passing matches in a table with Select and favorite-star buttons. Selecting a result syncs the main DeviceSelector (searches for the device name and highlights it). An "Identify unknown logic IC" link returns to identify mode from a selected-device state. The results table persists after selection and has a Clear button that empties contents without hiding the table.
-
Logic IC identify (CLI) —
--logic-identify --pin-count Ntests an unknown logic IC against all database entries with the matching pin count and prints passing matches. Optional--vccoverrides the test voltage. Progress is reported asTesting candidates... N/Mon stderr. Results are printed asname manufacturerto stdout, matching the SPI autodetect output format. Supported pin counts: 8, 14, 16, 20, 24, 28, 40. -
Structured logic test grid (GUI) — the logic test result is now rendered as a zoomable color-coded grid (Ctrl+Scroll to zoom) instead of raw text. Input cells are blue, passing output cells are green, mismatched outputs are red with a
-suffix, and ignore cells are gray. A copy button exports the full grid as TSV (tab-separated values) for pasting into spreadsheets, word processors, or online posts. The grid uses a header-outside-scroll-container layout to prevent sticky-header overlap. -
Shared favorites store — device favorites logic extracted from
DeviceSelector.svelteto a sharedfavoriteswritable store indevice.ts. Both the DeviceSelector and IdentifyResults components read/write the same store, so starring a device from either place updates both UIs immediately. Uses a reactive$derivedSet for O(1) favorite-name lookups in templates. -
macOS Gatekeeper workaround documented — the unsigned
.dmgtriggers macOS Gatekeeper's "'MINIPRO-RS-GUI' is damaged and can't be opened" alert. Documented thexattr -crworkaround in README, release notes, and ROADMAP. Code signing and notarization require an Apple Developer Program membership ($99/year) — added to ROADMAP as a future improvement. -
Pre-operation pin contact check (CLI + GUI) — the CLI
-z/--pin-checkflag now doubles as both a standalone test and a pre-operation gate, matching upstream C minipro. When combined with-w/-r/-E/-m/-b/-D/-a, the pin test runs first and the operation only proceeds if all pins are good. The GUI adds a "Pin Contact Check" checkbox in the operations panel (default on, matching XGPro's "Pin Detect"). When checked, the pin test runs afterbegin_transactionand before the operation. If bad pins are found, the operation is aborted and the bad pins are highlighted on the ZIF diagram. The checkbox is disabled on unsupported models (TL866A/CS, T56, T76), in ICSP mode, or when the device has no pin-map data. Located right of "Chip ID check" for read/write/verify/erase; replaces "No options for this operation." for blank check and chip ID; thin options row above the fuse editor for config. Logic test has no checkbox (uses test vectors, not pin-contact mechanism). -
Automatic pin check before SPI autodetect — on TL866II+/T48 in ZIF mode, a pin contact check runs automatically before SPI autodetect (no checkbox needed). If bad pins are found, autodetect is aborted with a clear diagnostic message instead of returning a garbage JEDEC ID. Matches upstream minipro's
auto_detectfunction behavior. -
Symmetric operation tab gating — when a logic IC is selected, Read/Write/Verify/Erase/Blank Check/Chip ID tabs are disabled with "Not applicable for logic ICs" tooltip. When a non-Logic device is selected, the Logic Test tab is disabled with "Not applicable for this device type" tooltip. A dedicated
$effectauto-switches to the appropriate tab when the device type changes. -
Click-to-deselect in DeviceSelector — clicking an already-selected device row toggles it off, providing an intuitive way to deselect without using the Clear button. Keyboard (Enter/Space) also toggles.
Changed
-
CLI
-zflag behavior — previously exited immediately after the pin test regardless of other flags. Now falls through to operation handlers after a successful test, allowing-zto gate subsequent operations. Standalone-z(no other operation) still exits after the test. -
CLI
--logic-identifyprogress bar — uses indicatif progress bar instead of manual\rcounter, matching the style of read/write/verify operations. Bar clears on completion.
Fixed
-
Suppress per-candidate logic test noise during identify scans — removed
eprintln!calls from the protocol layer'slogic_ic_testintl866iiplus.rsandtl866a.rs. These fired on every candidate during an identify scan, producing 100+ lines of noise. The structuredLogicTestResultalready contains pass/fail and error count — the caller decides what to print. The CLI--logic-testhandler now prints the summary message itself. -
Release notes bash quoting — fixed a single-quote escaping bug in the GitHub Actions release notes script that prevented the v0.8.0 GitHub release from completing.
Installers
- Linux:
.deb(Debian/Ubuntu) - Windows users: Download
.msi/.exefrom GitHub Releases — native MSVC builds scan clean. The GitLab Windows binaries are cross-compiled and may trigger AV heuristics. - macOS users: If you see "MINIPRO-RS-GUI is damaged and can't be opened," this is Gatekeeper, not real corruption — the app is unsigned. Drag the app to Applications, then run
xattr -cr /Applications/MINIPRO-RS-GUI.appin Terminal to strip the quarantine attribute.
CLI Binaries
Standalone minipro CLI binaries for Linux and Windows are attached below.
See CHANGELOG.md for full history.
MINIPRO-RS v0.7.0
[0.7.0] - 2026-08-23
Added
- GUI custom database directory — Settings → Database now has a directory picker for custom
infoic.xml,logicic.xml, andalgorithm.xmlfiles. The selected directory overrides the standard search path, persists across restarts, and reloads the device list immediately.algorithm.xmlis optional — picked up if present, not required. If the saved directory is later moved or deleted, the app silently falls back to default search paths and shows a warning in Settings. The CLI's--infoic/--logicic/--algorithmsflags andMINIPRO_HOMEenv var are now documented in the README alongside this GUI feature. - GUI model-specific voltage override dropdowns — the Advanced voltage section now shows only the voltage values supported by the connected programmer model and selected device, instead of a hardcoded list. VPP and VDD dropdowns are hidden for logic ICs. Custom-protocol devices on T56/T76 show "Voltage overrides not supported for this device" instead of invalid options. Override values reset when switching devices or reconnecting the programmer. The logic test panel now includes a VCC dropdown for logic ICs, with backend support for applying the override before testing.
- GUI ICSP connector pin-numbering diagram — when ICSP mode is selected, the right sidebar shows a physical diagram of the ICSP connector with pin numbers instead of the ZIF socket diagram. Layouts are model-specific: TL866A/II+ (1×6 linear), T56 (1×8 linear), T48 (2×8 zigzag), T76 (2×14 zigzag). TL866CS shows "ICSP not supported." A note directs users to Xgpro for chip-specific signal assignment.
- GUI AVR fuse bit decoder — the config panel now breaks out each AVR fuse/lock byte into individual named bits (CKSEL, SUT, BODLEVEL, SPIEN, RSTDISBL, etc.) with human-readable descriptions and clickable bit cells. Covers all 18 AVR config variants in the database (
avr_1throughavr_18), with chip-prefix overrides for configs that span multiple architectures (avr_4, avr_6, avr_13, avr_15, avr_17). Bit definitions sourced from avr-libc device headers and Microchip datasheets. Dangerous bits (RSTDISBL, DWEN, SPIEN, OCDEN, JTAGEN) are highlighted in red. Raw hex input remains visible and stays in sync with bit toggles. - GUI PIC fuse bit decoder — the config panel now decodes PIC configuration words into individual named bits for all database-referenced PIC config variants. Covers PIC10F/PIC12F5 baseline (12-bit), PIC12F/PIC16F mid-range (14-bit), PIC16F baseline (12-bit), and PIC18F (16-bit packed words). Bit definitions verified against gputils configuration documentation and Microchip datasheets. 5 configs with database/datasheet mask discrepancies (
pic_14,pic_19,pic_20,pic_22,pic_26) remain as hex-only fallback — seedocs/XGPRO-DATABASE-DISCREPANCIES.md. Also fixes a pre-existing CPB/CPD and WRTC/WRTD bit position swap in shared PIC18F protection word definitions. - GUI hex viewer Ctrl+mousewheel font size — Ctrl+scroll now adjusts the hex viewer font size (10-16px, 1px per notch) in addition to the existing dropdown. Normal scrolling is unaffected. Also adds 15px to the dropdown options so the range is continuous.
- Write protect integration (CLI + GUI) —
-u/-Pflags and GUI checkboxes now integrate into the write flow matching upstream C minipro. T76 auto-unprotects chips withoff_protect_beforebefore erase (firmware requirement for parallel NOR). Non-T76 unprotects only if-u/"Unprotect before write" checkbox AND the device flag is set. Protect-on after write only if-P/"Re-protect after write" checkbox ANDprotect_afterflag is set. Warnings printed when a chip may be write-protected. GUI checkboxes are context-specific: visible only when the device has the relevant flag and the programmer model supports protect operations (hidden for T48). "Unprotect before write" is checked by default matching XGPro behavior. Batch mode (CLI--batchand GUI batch) also applies protect logic per-chip with the same flag checks and T76 auto-unprotect. - GUI logic test vector symbol help — the logic test options panel now has an info (i) button that opens a help modal explaining the single-character vector symbols used in the test result table (0=Input Low, 1=Input High, L=Output Low, H=Output High, C=Pulse, Z=High-Z, X=Ignore, G=GND, V=VCC). Notes that only L, H, and Z pins are tested; input/power/ground/ignored pins are never marked as errors.
- SPI flash autodetect (CLI + GUI) —
-a/--spi-autodetectCLI flag now searchesinfoic.xmlfor devices with matching JEDEC ID and pin count, printing device names instead of just a raw hex ID. Output matches upstream C minipro format:Autodetecting device (ID:0xXXXX)+ device names + count. GUI adds "Auto Detect" buttons (8-pin / 16-pin) in the DeviceSelector header — reads JEDEC ID via firmware command 0x37, searches the database, and shows clickable matching device names. Disabled for T56/T76 (protocol support pending). Handles no-chip-detected (ID=0), no-database-match, and multiple-match cases. - GUI pin-contact test with ZIF diagram highlighting — the Diagnostics panel now has a functional "Pin Test" button (previously disabled) that runs the ZIF socket contact test and highlights bad pins on the socket diagram. Bad pin slots render red with "PIN N" labels. A result panel below the diagram shows pass/fail status with a pin list and Clear button. Stale results are cleared on device or programmer change. Supported on TL866II+ and T48 only; disabled on TL866A/CS, T56, and T76. Also disabled in ICSP mode and when no device is selected. Core
Protocol::pin_test()refactored fromResult<()>(stderr-only) toResult<PinTestResult>with structuredbad_pins: Vec<u16>— CLI-zoutput format preserved.
Fixed
- T76 pin-contact test removed — the T76 is FPGA-based and lacks the direct ZIF pin bit-banging hardware (commands 0x2D-0x36) that the TL866II+/T48 use for contact testing. The T76's
0x3Ecommand is an adapter-init pin-driver configuration step, not a standalone contact test. Running it standalone returns meaningless data and can corrupt subsequent reads by disrupting FPGA state. XGPro itself removed pin detect from the T76 UI. The upstream C minipro'st76_pin_testis also broken (never reads the response, reports every pin as bad). The xgecu-pro project confirmed on real hardware that it "measured nothing and corrupted every read." T76 now returnsUnsupportedOperationfor pin test, matching TL866A/CS and T56. - ICSP bitmask sent incorrectly as boolean —
begin_transactionwas sendingicsp as u8(0 or 1) instead of the upstream bitmask (0x80 = ICSP enable, 0x81 = ICSP with VCC). This meant ICSP mode was likely not activating correctly at the firmware level, and "ICSP no VCC" was indistinguishable from "ICSP with VCC". Now sends the correct bitmask matching upstream C minipro. Also adds auto-activation of ICSP for ICSP-only chips, a warning when ICSP is selected for ZIF-only chips, and skips pin contact check in ICSP mode (pin test drives ZIF socket pins, not ICSP header pins).
Installers
- Linux:
.deb(Debian/Ubuntu) - Windows users: Download
.msi/.exefrom GitHub Releases — native MSVC builds scan clean. The GitLab Windows binaries are cross-compiled and may trigger AV heuristics.
CLI Binaries
Standalone minipro CLI binaries for Linux and Windows are attached below.
See CHANGELOG.md for full history.
MINIPRO-RS v0.6.2
v0.6.2 — 2026-08-13
v0.6.2 supersedes v0.6.1, which failed to publish due to a macOS build error.
All v0.6.1 fixes are included.
Fixed
- macOS build error (nusb MaybeFuture) —
set_configurationin nusb 0.1.14 returnsResult<(), Error>directly, notimpl MaybeFuture. TheMaybeFuturetrait was introduced in nusb 0.2.x. The previous fix (v0.6.1) moved theMaybeFuture/.wait()code from "all non-Windows" to "macOS-only", which fixed Linux but moved the failure to macOS. Now callsset_configurationdirectly withoutMaybeFutureor.wait(), gated to all non-Windows platforms - TL866II+ DIP28 EPROM write timeout — DIP28 devices (e.g. 2764, 27128, 27512) have a 128-byte write buffer, but the TL866II+ write path passed
write_buffer_sizeas the EP2/EP3 split limit. Upstream C minipro uses a fixed 64-byte split. Passing 128 sent the entire payload to EP2 instead of splitting between EP2 and EP3, causing write timeouts. Now uses the standard 64-byte split, matching upstream - UV EPROM padding unnecessarily increases programming time —
write_chip,write_chip_bytes,verify_chip, andverify_chip_bytespadded undersized files to full device size before transfer. For a 2 KiB file on a 4 KiB UV EPROM, minipro-rs transferred 4 KiB while upstream transferred approximately 2 KiB. Now computes an effective transfer size based onmin(file_size, device_size), rounded up to the relevant buffer size. Standalone blank checks still operate over the complete device - USB recv timeout too short for slow EPROM writes — single 5-second USB timeout was too short for slow EPROM writes (e.g. 27512). Split into separate send (5s) and recv (30s) timeouts so slow device responses aren't cut off
- T76 NAND chip ID returns 0x00000000 —
get_chip_idon T76 didn't callbegin_transactionfirst, so the NAND wasn't selected when the ID read was issued. Also fixes USB config 0 after power-cycle (T76 needsset_configuration(1)after device reset) - macOS database search path — database resolution didn't check macOS-specific paths. Now searches
~/Library/Application Support/minipro-rs/,/usr/local/share/minipro-rs/, and/opt/homebrew/share/minipro-rs/on macOS - macOS Tauri resource directory — GUI couldn't find the chip database on macOS because Tauri's resource directory wasn't in the search path. Now includes the Tauri resource directory in database resolution
- GUI voltage display uses wrong lookup tables —
VoltagesDtoandapply_voltage_overridesused a single hardcoded 16-entry table that only matched T48/T56 firmware encoding. TL866A and TL866II+ use different encodings (e.g. TL866A VPP code0x00= 12.5V, not 9V). Now uses per-model voltage tables (vcc_voltage_table(),vpp_voltage_table()) selected byProgrammerModel - Logic IC voltage display shows VPP/VDD as inapplicable — logic ICs don't have VPP or VDD, but the GUI displayed numeric values for them. Now shows "inapplicable" for VPP/VDD on logic ICs
- ZIF socket diagram pin placement — diagram used the pin-contact test mask instead of
pin_countfor chip footprint width, showing incorrect chip placement for some devices - Logic test and config panels shown for incompatible devices — switching from a logic IC to an EPROM left the "Start logic test" button active, producing "no test vectors for this device" errors. Now hides logic test and config panels for devices that don't support those operations
- WebKitGTK log content invisible after horizontal scroll — on Linux, log window content became invisible after horizontal scrolling. WebKitGTK doesn't repaint when the entire
<pre>innerHTMLis replaced via{@html}in a scrolled container. Switched to{#each}per-entry rendering with individual DOM nodes, which WebKitGTK repaints correctly - GUI build warnings eliminated — suppressed Rust
non_snake_casewarnings from Tauri camelCase parameters, added Svelte a11y attributes to splitters and modals, and fixed Svelte 5 ignore syntax for visual-only elements
Changed
- CLI database override flags renamed —
--infoic-path/--logicic-pathrenamed to--infoic/--logicicto match upstream C minipro flag names - MSRV discrepancy corrected — README previously stated Rust 1.85+ for all builds, but the GUI requires 1.88+ due to the Tauri v2 dependency tree. README and docs now distinguish CLI (1.85+) from GUI (1.88+)
Installers
- Linux:
.deb(Debian/Ubuntu) - Windows users: Download
.msi/.exefrom GitHub Releases — native MSVC builds scan clean. The GitLab Windows binaries are cross-compiled and may trigger AV heuristics.
CLI Binaries
Standalone minipro CLI binaries for Linux and Windows are attached below.
See CHANGELOG.md for full history.
MINIPRO-RS v0.6.0
[0.6.0] - 2026-08-04
Added
- Hex editor standard hotkeys — Ctrl+S (save buffer), Ctrl+C/V (copy/paste bytes as hex), Ctrl+A (select all), Ctrl+Z/Ctrl+Shift+Z/Ctrl+Y (undo/redo), Ctrl+Home/End (jump to first/last byte), Tab (switch hex/ASCII panes). Copy uses Tauri clipboard plugin to avoid WebView2 permission prompts
- Hex editor find/search — Ctrl+F opens find dialog with hex and ASCII search modes. Match highlighting with F3/Shift+F3 navigation. Context-sensitive F3 navigates whichever mode (find or diff) was most recently activated
- Entropy indicator in hex viewer — per-row Shannon entropy bar in the gutter between offset and hex columns. Green=uniform/repetitive, red=high entropy (random/encrypted/compressed). Toggle in Settings panel (off by default)
- Hex viewer help overlay — ?/F1 key or "i" toolbar icon opens a modal with keyboard shortcuts and feature descriptions
- Config/fuses help overlay — "i" icon in config panel opens a modal explaining fuse basics, dangerous fuses (RSTDISBL, SPIEN, JTAGEN, DWEN), and lock bits
- Favorites show manufacturer — device favorites in the search panel now display the manufacturer alongside the device name. Old favorites auto-migrate to the new format
- ZIF socket placement diagram — visual diagram in the right sidebar showing correct chip orientation and placement in the programmer's ZIF socket. Supports 40-pin (TL866A/CS/II+) and 48-pin (T48/T56/T76) sockets with model-specific lever position. Uses
pin_mapdata from the chip database for accurate chip footprint, withpin_countfallback. DIP packages only; non-DIP shows "adapter required" message - Logic IC test voltage selection —
--vccnow works for logic IC tests (valid: 1.8, 2.5, 3.3, 5 V), e.g.minipro -p 7404 -T --vcc 3.3. Upstream C minipro advertises these voltages in device info but provides no way to select them
Fixed
- USB transfer timeout — 5-second timeout on USB transfers prevents indefinite hangs when the programmer is unresponsive. Applies to both CLI and GUI
- Pending edits overwrite protection — Read and Open operations now prompt before replacing the hex buffer if pending edits or unsaved applied changes exist. Svelte-based confirm modal avoids WebView2 JS event loop freeze.
bufferDirtyflag tracks applied-but-unsaved changes (set by Apply/Trim/Pad, cleared by Save/load) - Trim/pad buffer dirty flag —
trimTrailingandpadToSizenow mark the buffer as dirty, so a subsequent Read prompts about unsaved changes instead of silently discarding them - Hex edit blur — clicking outside the hex viewer (e.g., the device search field) now commits the active edit and releases keyboard focus.
suppressBlurflag prevents blur during programmatic focus changes (overflow) - Config panel stale fuses — switching devices no longer shows the previous device's fuse names. Changed
$effectto$effect.presoconfigDatarefreshes before DOM re-render - Chip ID read —
get_chip_idnow reads the correct type byte (resp[0]notresp[1]), useschip_id_bytes_countfor the ID length instead of always reading 4 bytes, and applies correct endianness based on ID type (LE for type 3/4, BE otherwise). Fixes "Response too short" errors on TL866II+ when reading chips with 2-byte IDs (e.g. 27512@DIP28). Affects all programmer models (TL866A, TL866II+, T56, T76) - CLI voltage overrides sent wrong codes —
--vcc/--vdd/--vppmapped voltage names to sequential table indices, but programmer firmware expects model-specific encoded values. Overrides are now validated against per-model tables (TL866A/CS, TL866II+, T48, T56, T76), so invalid voltages error out instead of silently applying the wrong voltage - Logic IC voltage attribute parsing — logicic.xml
voltage="5V"was never matched ("5" expected), so all logic ICs silently defaulted to 5 V - CLI VCC override warning — when
--vccchanges VCC from the database default, the CLI prints a warning that results may be unreliable (e.g. blank-checking a 5V chip at 3.3V produces a false "BLANK" result) --skip-id/--skip-device-idconsolidation — removed--skip-device-id(internal flag).-x/--skip-idnow controls all chip ID check code paths, matching upstream minipro.-xis rejected for write/erase actions (matching upstream); use-y/--continue-idto warn-but-continue on chip ID mismatch instead-y/--continue-idpropagation — the top-level chip ID check now covers write, read, erase, and verify. Per-operationcheck_device_idparameters arefalse— the single top-level check handles-x(skip),-y(warn + continue), and the default (error) in one place. Previously-yprinted "continuing" but per-operation checks still aborted with a hard error. Also fixes batch mode: ID is checked once at the start instead of re-checked for every chiperase_chipnow checkscan_eraseflag — UV EPROMs (e.g. 27512) havecan_erase=falsebut were receiving erase commands anyway, potentially applying VPP pulses to pins not meant for electrical erase. Now silently skips erase for non-erasable chips (matching upstream). Explicit-Eon a non-erasable chip prints an informative message. Auto-erase before write is silently skipped- Test fixture race condition —
fixture_pathsused a shared temp directory keyed by process ID. Parallel tests overwrote each other's files, causing intermittent Linux CI failures. Now uses a unique subdirectory per call (atomic counter) and creates a minimalinfoic.xmlto prevent fallback search failures
Installers
- Linux:
.deb(Debian/Ubuntu) - Windows users: Download
.msi/.exefrom GitHub Releases — native MSVC builds scan clean. The GitLab Windows binaries are cross-compiled and may trigger AV heuristics.
CLI Binaries
Standalone minipro CLI binaries for Linux and Windows are attached below.
See CHANGELOG.md for full history.
MINIPRO-RS v0.5.1
[0.5.1] - 2026-07-05
Fixed
- Linux
.deb/.rpmpackages now include chip database files —infoic.xmlandlogicic.xmlare installed to/usr/share/minipro-rs/. Previously, the packages contained only the binary, and the CLI would fail to find the database unless the Cminiprowas also installed. - Database search path now checks
minipro-rsdirectory first —DatabasePaths::resolvetries/usr/share/minipro-rs/(Linux) or%PROGRAMDATA%\minipro-rs\(Windows) before falling back to the Cminipro's/usr/share/minipro/or%PROGRAMDATA%\minipro\. This allows side-by-side installation without package manager conflicts while still finding existing database files from the C version. - README corrected — data directory paths were documented as
%APPDATA%\minipro-rs\(wrong env var, didn't match code). Now correctly says%PROGRAMDATA%\minipro-rs\.
Installers
- Linux:
.deb(Debian/Ubuntu) - Windows users: Download
.msi/.exefrom GitHub Releases — native MSVC builds scan clean. The GitLab Windows binaries are cross-compiled and may trigger AV heuristics.
CLI Binaries
Standalone minipro CLI binaries for Linux and Windows are attached below.
See CHANGELOG.md for full history.
MINIPRO-RS v0.5.0
[0.5.0] - 2026-06-27
Added
- Algorithm XML parser for T56/T76 — parses
algorithm.xmlto load FPGA bitstream algorithms required by T56/T76 programmers. Computes algorithm names fromprotocol_id+variant(with special cases for ATmega ICSP, AT89C ICSP, eMMC voltage, reversed packages, and logic chips), base64-decodes and gunzips bitstreams, verifies CRC32, and performs T76 level-2 zero-run decompression. Integrated intoMiniproHandle::begin_transaction— automatically looks up the algorithm when a T56/T76 device needs one - T56 firmware update — ported from C
miniprot56_firmware_update(). Handles file version/CRC validation, bootloader magic switch, erase, block-by-block reflash (0x814-byte blocks), and reset back to normal mode. Routed throughoperations::firmware_update() - eMMC partition selection for T76 —
T76_EMMC_PARTITIONenv var selects eMMC hardware partitions:user(default),boot1,boot2,rpmb. Uses CMD6 SWITCH to set EXT_CSD[179] PARTITION_CONFIG. Capacity detection uses the correct EXT_CSD field per partition: SEC_COUNT[212] for USER, BOOT_SIZE_MULT[226] for BOOT, RPMB_SIZE_MULT[168] for RPMB - T76 OVC status for NAND/eMMC —
Protocol::get_ovc_statusnow takes&Deviceparameter. T76 implementation repacks chip-parameter header (protocol_id, variant, voltages, chip_info, pin_map) into the 0x39 status request for NAND/eMMC, mirroring vendor behavior. A zeroed 0x39 deselects the NAND; the repacked header keeps it selected. OVC checks enabled inbegin_transactionandcheck_ovc
Installers
- Linux:
.deb(Debian/Ubuntu) - Windows users: Download
.msi/.exefrom GitHub Releases — native MSVC builds scan clean. The GitLab Windows binaries are cross-compiled and may trigger AV heuristics.
CLI Binaries
Standalone minipro CLI binaries for Linux and Windows are attached below.
See CHANGELOG.md for full history.
MINIPRO-RS v0.4.1
[0.4.1] - 2026-06-27
Fixed
- Programmer serial number display — control characters (e.g., ETX
0x03) were not stripped from the serial number and device code strings returned by the programmer. Only null bytes were trimmed, but some programmers pad unused bytes with other control characters. Now all ASCII control characters (0x00–0x1F, 0x7F) are stripped. Affects both CLI and GUI display
Installers
- Linux:
.deb(Debian/Ubuntu) - Windows users: Download
.msi/.exefrom GitHub Releases — native MSVC builds scan clean. The GitLab Windows binaries are cross-compiled and may trigger AV heuristics.
CLI Binaries
Standalone minipro CLI binaries for Linux and Windows are attached below.
See CHANGELOG.md for full history.