Files
viktorиClaude Opus 4.8 ae36c3b729 RT-4D: реверс прошивки, русификация, кастомный UI, флешеры
- Полный RE стока V3.25 (Cortex-M4F) + FM100B: карта памяти, протокол, codeplug, UI-архитектура
- Русификация: свой CP1251-шрифт + патч рендера, перевод меню и надписей, ребренд Ru-4D V3.25
- Блюпринт переделки UI + C-тулчейн (clang thumbv7em), доказан инъекцией
- Готовые флешеры: WebSerial .html и Windows .exe со вшитой прошивкой
- Дамп SPI рации, стоковая прошивка, инструменты сборки

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 15:47:22 +09:00

30 строки
1.2 KiB
Python

import io
data = open(r"C:/Users/vikto/Documents/Claude/rt-4d/radio-spi-dump.bin","rb").read()
out=io.open(r"C:/Users/vikto/Documents/Claude/rt-4d/analyze/out11.txt","w",encoding="utf-8")
# The font bitmap likely starts on a clean boundary. Find where the pinyin/CJK code
# table ends and bitmap begins. The 0x19c000 area had a leading block of zeros then bitmaps.
# Let's find a good glyph base by scanning for a 32-byte-aligned region where rendering
# 16 rows x 2 bytes gives connected shapes. Test several bases and stride 32.
def render(off, w_bytes, rows):
lines=[]
for r in range(rows):
line=""
for cb in range(w_bytes):
b=data[off+r*w_bytes+cb]
for bit in range(8):
line += "#" if (b>>bit)&1 else "."
lines.append(line)
return lines
# Render 4 consecutive 16x16 glyphs side by side starting at a base, for several bases
for base in (0x19c400, 0x1a0000, 0x1b0000, 0x200000):
out.write("=== base %#x, four 16x16 glyphs (32B each) ===\n"%base)
gs=[render(base+g*32,2,16) for g in range(4)]
for r in range(16):
out.write(" ".join(gs[g][r] for g in range(4))+"\n")
out.write("\n")
out.close()
print("done")