2026-10-14 21:42:24 +00:00
<!DOCTYPE html>
2026-10-18 00:38:48 +00:00
< html lang = "en" data-theme = "colorful" >
2026-10-14 21:42:24 +00:00
< head >
< meta charset = "UTF-8" >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" >
2026-10-18 00:19:21 +00:00
< title > Lab & Experiment Notebook — Ertunç Özbay< / title >
< meta name = "description" content = "Workshop lab notebook of Ertunç Özbay: ESP32-S3 hardware protection notes, RLE MIDI-to-C compression tools, Linux Wine/DX11 experiments, and reverse-engineering study logs." >
2026-10-14 21:42:24 +00:00
< link rel = "icon" type = "image/svg+xml" href = "assets/images/favicon.svg" >
2026-10-18 00:38:48 +00:00
< link rel = "stylesheet" href = "assets/css/style.css?v=2" >
2026-10-14 21:42:24 +00:00
< / head >
< body >
2026-10-18 00:38:48 +00:00
< a class = "skip-link" href = "index.html#main-content" > Skip to main content< / a >
2026-10-14 21:42:24 +00:00
< header class = "site-header" >
< div class = "container header-inner" >
< a class = "site-brand" href = "index.html" >
< span class = "brand-mark" aria-hidden = "true" > EÖ< / span >
< span >
Ertunç Özbay
2026-10-18 00:19:21 +00:00
< span class = "brand-subtitle" > embedded // hardware // open-source< / span >
2026-10-14 21:42:24 +00:00
< / span >
< / a >
2026-10-18 00:38:48 +00:00
< div class = "header-controls" >
< div class = "theme-switcher" role = "group" aria-label = "Select UI Theme" >
< button type = "button" class = "theme-btn" data-set-theme = "colorful" aria-pressed = "true" > 🎨 Colorful< / button >
< button type = "button" class = "theme-btn" data-set-theme = "neon" aria-pressed = "false" > 🌈 Neon< / button >
< button type = "button" class = "theme-btn" data-set-theme = "blueprint" aria-pressed = "false" > 📐 Blueprint< / button >
< / div >
< button class = "nav-toggle" type = "button" data-nav-toggle aria-expanded = "false" aria-controls = "primary-navigation" >
< span aria-hidden = "true" > ☰< / span >
< span data-nav-label > Menu< / span >
< / button >
2026-10-14 21:42:24 +00:00
2026-10-18 00:38:48 +00:00
< nav id = "primary-navigation" class = "site-nav" data-site-nav aria-label = "Main navigation" >
< ul class = "nav-list" >
< li > < a class = "nav-link" href = "index.html" > Home< / a > < / li >
< li > < a class = "nav-link" href = "about.html" > About< / a > < / li >
< li > < a class = "nav-link" href = "projects/index.html" > Projects< / a > < / li >
< li > < a class = "nav-link" href = "blog/index.html" > Blog< / a > < / li >
< li > < a class = "nav-link" href = "lab.html" aria-current = "page" > Lab< / a > < / li >
< li > < a class = "nav-link" href = "contact.html" > Contact< / a > < / li >
< / ul >
< / nav >
< / div >
2026-10-14 21:42:24 +00:00
< / div >
< / header >
< main id = "main-content" >
< div class = "container" >
< section class = "workshop-hero" aria-labelledby = "lab-heading" >
2026-10-18 00:19:21 +00:00
< span class = "workshop-eyebrow" > 🔬 WORKSHOP BENCH // LAB NOTEBOOK< / span >
< h1 id = "lab-heading" > < span class = "gradient-title" > Lab & Experiment Notebook< / span > < / h1 >
2026-10-14 21:42:24 +00:00
< p class = "hero-lead" >
2026-10-18 00:19:21 +00:00
Welcome to my open workbench. This page tracks my real engineering experiments, hardware debugging breakthroughs, Python/Rust tooling scripts, and reverse-engineering study notes.
2026-10-14 21:42:24 +00:00
< / p >
< / section >
<!-- Section 1: Current experiments -->
< section class = "section-block" aria-labelledby = "lab-current" >
< div class = "section-header" >
< div >
2026-10-18 00:19:21 +00:00
< span class = "section-label" > 01 // Active Bench Breakthroughs< / span >
< h2 id = "lab-current" > Recent Hardware & Firmware Experiments< / h2 >
2026-10-14 21:42:24 +00:00
< / div >
< / div >
< div class = "card-grid-2" >
2026-10-18 00:19:21 +00:00
< div class = "card card-synth" >
2026-10-14 21:42:24 +00:00
< div class = "card-top" >
< div class = "card-meta" >
2026-10-18 00:19:21 +00:00
< span class = "badge badge-experimental" > Solved on Breadboard< / span >
< span > ESP32 Dual-Core • Python RLE< / span >
2026-10-14 21:42:24 +00:00
< / div >
2026-10-18 00:19:21 +00:00
< h3 > Defeating the 30 Hz MIDI "Strobe-Light" Bug & Piezo Bass Roll-Off< / h3 >
2026-10-14 21:42:24 +00:00
< p >
2026-10-18 00:19:21 +00:00
While building the < a href = "projects/midi-breadboard-instrument.html" > 16-Track MIDI Breadboard Instrument< / a > , raw MIDI delta-slices caused the LEDs and 1.3" SPI OLED to strobe violently. Writing a custom Run-Length Encoding (RLE) compressor in Python (< code > midi_to_c.py< / code > ) and transposing bass-heavy tracks like < em > Seven Nation Army< / em > +2 octaves solved both flash exhaustion and piezo acoustic roll-off.
2026-10-14 21:42:24 +00:00
< / p >
< / div >
2026-10-18 00:38:48 +00:00
< div class = "card-actions" >
2026-10-18 00:40:30 +00:00
< a class = "btn btn-cyan" href = "assets/downloads/midi_to_c.py" download = "midi_to_c.py" > 🐍 Download midi_to_c.py< / a >
< a class = "btn btn-emerald" href = "assets/downloads/desk_rave_16track_esp32.c" download = "mmcontroller.c" > ⬇ Download 16-Track C Code< / a >
2026-10-18 00:38:48 +00:00
< a class = "btn btn-secondary" href = "projects/midi-breadboard-instrument.html" > Full MIDI Project →< / a >
< / div >
2026-10-14 21:42:24 +00:00
< / div >
2026-10-18 00:19:21 +00:00
< div class = "card card-amber" >
2026-10-14 21:42:24 +00:00
< div class = "card-top" >
< div class = "card-meta" >
2026-10-18 00:19:21 +00:00
< span class = "badge badge-progress" > Hardware Rev 0.1 → Phase 2< / span >
< span > ESP32-S3-N16R8 • SPI2 Bus< / span >
2026-10-14 21:42:24 +00:00
< / div >
2026-10-18 00:19:21 +00:00
< h3 > ESP32-S3 Octal PSRAM Pin Collisions & Shared SPI2 Arbitration< / h3 >
2026-10-14 21:42:24 +00:00
< p >
2026-10-18 00:19:21 +00:00
On the < a href = "projects/multi-functional-controller.html" > Multi-Functional RC Controller< / a > , the ESP32-S3-N16R8 reserves < code > GPIO 35– 37< / code > for internal Octal PSRAM/Flash. We remapped the shared SPI2 bus (< code > MOSI: 11, MISO: 13, SCK: 12< / code > ) with dedicated hardware CS lines for the nRF24L01+ (< code > CSN: 10< / code > ), MicroSD (< code > CS: 39< / code > ), and ST7789 IPS TFT (< code > CS: 40< / code > ).
2026-10-14 21:42:24 +00:00
< / p >
< / div >
2026-10-18 00:38:48 +00:00
< div class = "card-actions" >
2026-10-18 00:40:30 +00:00
< a class = "btn btn-cyan" href = "assets/downloads/mfc-1.kicad_sch" download = "mfc-1.kicad_sch" > 📐 Download KiCad Schematic< / a >
< a class = "btn btn-emerald" href = "assets/downloads/mfc_esp32s3_firmware.c" download = "mmcontroller.c" > ⬇ Download S3 Firmware< / a >
2026-10-18 00:38:48 +00:00
< a class = "btn btn-secondary" href = "projects/multi-functional-controller.html" > Full Controller Page →< / a >
< / div >
2026-10-14 21:42:24 +00:00
< / div >
< / div >
< / section >
2026-10-18 00:19:21 +00:00
<!-- Section 2: Software and conversion tools -->
2026-10-14 21:42:24 +00:00
< section class = "section-block" aria-labelledby = "lab-software" >
< div class = "section-header" >
< div >
2026-10-18 00:19:21 +00:00
< span class = "section-label" > 02 // Code & Systems Tooling< / span >
< h2 id = "lab-software" > Custom Compilers & Linux Runtime Tools< / h2 >
2026-10-14 21:42:24 +00:00
< / div >
< / div >
2026-10-18 00:19:21 +00:00
< div class = "card-grid-2" >
< div class = "card card-coral" >
2026-10-14 21:42:24 +00:00
< div class = "card-top" >
2026-10-18 00:19:21 +00:00
< div class = "card-meta" >
< span class = "badge badge-coral" > Rust • Linux x86_64< / span >
< span > Wine & DirectX 11< / span >
< / div >
< h3 > 16-Byte TLS Alignment for DirectX 11 on Linux< / h3 >
2026-10-14 21:42:24 +00:00
< p >
2026-10-18 00:19:21 +00:00
In < a href = "projects/pointblank-linux.html" > pointblank-linux< / a > , we engineered a standalone Rust launcher that automatically provisions a 16-byte TLS-aligned < code > ntdll.dll< / code > runtime and < code > vcrun2022< / code > / < code > d3dx11_43< / code > components so Point Blank runs at 200 FPS in DirectX 11 on Linux with unmodified official CheatBlocker anti-cheat.
2026-10-14 21:42:24 +00:00
< / p >
< / div >
2026-10-18 00:38:48 +00:00
< div class = "card-actions" >
2026-10-21 16:42:52 +00:00
< a class = "btn btn-emerald" href = "/assets/downloads/pointblank-linux-v1.0.0-linux-x86_64.tar.gz" > ⬇ Download v1.0.0 Binary< / a >
2026-10-18 00:38:48 +00:00
< a class = "btn btn-secondary" href = "projects/pointblank-linux.html" > Read Technical Notes →< / a >
< / div >
2026-10-14 21:42:24 +00:00
< / div >
2026-10-18 00:19:21 +00:00
< div class = "card card-emerald" >
2026-10-14 21:42:24 +00:00
< div class = "card-top" >
2026-10-18 00:19:21 +00:00
< div class = "card-meta" >
< span class = "badge badge-active" > Python 3 • mido< / span >
< span > Embedded Audio Tooling< / span >
< / div >
< h3 > RLE MIDI-to-C Struct Compiler (< code > midi_to_c.py< / code > )< / h3 >
2026-10-14 21:42:24 +00:00
< p >
2026-10-18 00:38:48 +00:00
Converts multi-channel `.mid` files into compact C99 < code > SequenceStep< / code > struct arrays (< code > {frequency, duration, kick_drum, hi_hat}< / code > ), automatically routing MIDI Channel 10 and low bass notes (< code > < MIDI 50< / code > ) to hardware percussion buzzers.
2026-10-14 21:42:24 +00:00
< / p >
< / div >
2026-10-18 00:38:48 +00:00
< div class = "card-actions" >
2026-10-21 16:42:52 +00:00
< a class = "btn btn-secondary" href = "http://34.57.151.250:3000/ertunc-ozbay/midi-breadboard-instrument/src/branch/main/scripts/midi_to_c.py" rel = "noopener noreferrer" > View Script on GitHub →< / a >
2026-10-18 00:38:48 +00:00
< / div >
2026-10-14 21:42:24 +00:00
< / div >
< / div >
< / section >
2026-10-18 00:19:21 +00:00
<!-- Section 3: Reverse - engineering learning -->
2026-10-14 21:42:24 +00:00
< section class = "section-block" aria-labelledby = "lab-re" >
< div class = "section-header" >
< div >
2026-10-18 00:19:21 +00:00
< span class = "section-label" > 03 // System Internals< / span >
< h2 id = "lab-re" > Reverse-Engineering & Low-Level Study Log< / h2 >
2026-10-14 21:42:24 +00:00
< / div >
< / div >
2026-10-18 00:19:21 +00:00
< div class = "callout-box magenta" >
< span class = "callout-title" > Looking Under the Hood< / span >
2026-10-14 21:42:24 +00:00
< p >
2026-10-18 00:19:21 +00:00
I study reverse engineering using < strong > Ghidra< / strong > , < strong > x64dbg< / strong > , < strong > radare2< / strong > , and < strong > Cheat Engine< / strong > to understand how compiled C/C++ binaries, memory layouts, calling conventions, and hardware registers work at the machine instruction level.
< / p >
< p style = "margin-bottom:0;" >
Every time I inspect a compiled binary or debug an ESP32 panic backtrace, it reinforces why deep knowledge of C, memory alignment, and Assembly is indispensable.
2026-10-14 21:42:24 +00:00
< / p >
< / div >
< / section >
< / div >
< / main >
< footer class = "site-footer" >
< div class = "container footer-inner" >
< div >
2026-10-18 00:38:48 +00:00
< strong > Ertunç Özbay< / strong > — Electrical & Electronics Engineering Student • < a href = "mailto:ertunc.ozbay@outlook.com" > ertunc.ozbay@outlook.com< / a >
2026-10-14 21:42:24 +00:00
< / div >
< ul class = "footer-links" aria-label = "Footer links" >
< li > < a href = "projects/index.html" > Projects< / a > < / li >
< li > < a href = "blog/index.html" > Blog< / a > < / li >
< li > < a href = "lab.html" > Lab< / a > < / li >
< li > < a href = "contact.html" > Contact< / a > < / li >
2026-10-21 16:42:52 +00:00
< li > < a href = "http://34.57.151.250:3000/ertunc-ozbay" rel = "noopener noreferrer" > GitHub< / a > < / li >
2026-10-18 00:19:21 +00:00
< li > < a href = "https://www.linkedin.com/in/ertunc-ozbay" rel = "noopener noreferrer" > LinkedIn< / a > < / li >
2026-10-14 21:42:24 +00:00
< / ul >
< / div >
< / footer >
2026-10-18 00:38:48 +00:00
< script src = "assets/js/main.js?v=2" > < / script >
2026-10-14 21:42:24 +00:00
< / body >
< / html >