Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
223 commits
Select commit Hold shift + click to select a range
972c0cd
Add extended version of output_display.py script
HeathenUK Jan 5, 2022
36011e5
Add XOR function to standard library
HeathenUK Jan 21, 2022
3dc31cc
Schematic for a "native" MK1->Character display
HeathenUK Jan 30, 2022
201d255
Example code for "native" LCD interface
HeathenUK Jan 31, 2022
fa5d504
Update hello_native.asm
HeathenUK Jan 31, 2022
1078dd6
Add new ISA instructions, INC/DEC hardware mod, ESP32 Web IDE, and si…
Mar 28, 2026
120c632
Add vbcc C compiler backend, WiFi STA mode with mDNS, and UI fixes
Mar 28, 2026
806e145
Add 10 new opcodes: indirect addressing, boolean set, push_imm, ldsp_…
Mar 28, 2026
7d41d87
Microcode: 82C55 PPI support, gpio_read, exw 1 1 timing fix
Apr 4, 2026
013ad62
ESP32: program manager, auto-save, #clock directive, boot safety
Apr 4, 2026
dcb1b69
Assembler, ISA, and misc code updates
Apr 4, 2026
a857672
W65C22S VIA I2C support, C compiler I2C/LCD builtins, OI test harness
Apr 5, 2026
217d450
I2C EEPROM support, compiler I2C builtins, HLT detection, LCD backlig…
Apr 6, 2026
fea3c5e
Clock calibration via DS3231 SQW, compiler I2C fixes
Apr 6, 2026
c3dbacc
Speedometer, LEDC frequency fix, ESP32 bus release, HLT debounce
Apr 6, 2026
d42a34c
Self-calibrating delay_ms via DS3231 SQW
Apr 6, 2026
c6f8985
Accurate calibrated delay via same-loop technique, ESP32 fixes
Apr 6, 2026
09f9d59
EEPROM write+read rock solid with calibrated delay (30/30)
Apr 6, 2026
29b1166
Fix STK/HL bus contention, DDRA persistence, stopwatch delay
Apr 6, 2026
75e8ad6
Fix ldsp/ldsp_b ALU carry propagation timing bug in microcode
Apr 6, 2026
c26ef60
Stopwatch: add DDRA init with alignment NOP for address-dependent bug
Apr 6, 2026
0f1e1dc
Stopwatch: add PA1 piezo buzzer beep every 10 seconds
Apr 6, 2026
06baa9c
Stopwatch: 64-iteration inner loop, PA1 buzzer, DDRA in VIA init
Apr 6, 2026
da84125
Fix HLT fill: assembler and upload buffer must both use 0x7F
Apr 7, 2026
0568a01
Add serial command interface and upload checksum verification
Apr 7, 2026
3d26e2d
Add CLOCK/HALT serial commands, fix OI ISR dedup, rate measurement
Apr 7, 2026
e1f407c
Add RUNLOG, OICNT, CLOCK, HALT serial commands; 256-entry OI history
Apr 7, 2026
55b67f7
Add test results: CPU verified 100% correct, J4 connector was loose
Apr 7, 2026
0c46a36
Add ddrb_imm opcode (0xE2) — fixes DDRA corruption from rapid VIA writes
Apr 8, 2026
541e621
Add VIA register immediate opcodes, shift flag updates (pending flash)
Apr 9, 2026
dc0c3d9
Add pre-settle step to all exw opcodes, prevent register select glitches
Apr 9, 2026
41932ee
NTP → DS3231 RTC sync on boot, sub-µs run_cycles delay
Apr 9, 2026
9bad412
Update C compiler I2C codegen to use ddrb_imm, add EEPROM test
Apr 9, 2026
9272411
Add high-level I2C stdlib functions to C compiler
Apr 9, 2026
a7a28c0
16-bit EEPROM addresses, SQW disable in delay_calibrate, clean demo
Apr 9, 2026
929bab1
Single-phase calibration saves 23B (172→149B helper)
Apr 9, 2026
8d3fa1e
Fix delay timing, rename delay_ms→delay, peephole ;!keep annotation
Apr 9, 2026
f331bb2
Rewrite delay calibration for ~1ms resolution at 500kHz
Apr 9, 2026
26a0d94
Rewrite delay() with 16-bit flat loop — 1ms resolution, <2% error
Apr 9, 2026
e85e659
Report actual clock frequency in RUN/RUNLOG, fix timing model
Apr 9, 2026
72662f5
Post-flash fixes: revert sll;jc, shift carry not wired to CF
Apr 9, 2026
96be5d3
Add tone(freq, duration) builtin to C compiler
Apr 9, 2026
bd8be82
Note table in page 3: tone() costs 4 bytes/call (was 10)
Apr 9, 2026
3295a18
EEPROM overlay proof of concept: read code from EEPROM, execute via istc
Apr 10, 2026
c18b0e2
Raise RUN cycle limit to 100M, add n=0 free-run mode
Apr 10, 2026
e82828f
Fix eeprom_read_to_code: inline I2C setup, correct B preservation
Apr 10, 2026
c77ae39
Add istc_inc, push_b, pop_b opcodes for EEPROM overlay kernel
Apr 10, 2026
bdefbe1
EEPROM overlay test harness: 4/4 tests pass
Apr 10, 2026
10de76c
Implement --eeprom compiler mode: EEPROM-backed code overlays
Apr 10, 2026
8503950
EEPROM overlay: page 3 tier works for simple overlays, label bug for …
Apr 10, 2026
c995524
Fix overlay label resolution: .org directive + assembler + peephole
Apr 10, 2026
744b78f
Fix overlay label resolution AND assembler .org support
Apr 10, 2026
9f653a4
Fix two codegen bugs: cmp N clobbers B, pop $b in binary expressions
Apr 10, 2026
7c20e09
Remove unneeded I2C helper pre-registration for page 3 overlay tier
Apr 10, 2026
3c56e7b
Fix overlay system: page3 emit order, arg save/restore, kernel state …
Apr 10, 2026
49e1d68
Fix regparam B in binary expressions, add_both(2,5)=7 verified
Apr 10, 2026
8b0208b
Fix overlay return: jal+ret instead of j for overlay dispatch
Apr 10, 2026
4683605
Identify and work around ldsp-in-overlay-call ordering bug
Apr 10, 2026
39b0c0e
Fix overlay call ldsp hang: eliminate push+ldsp no-op before overlay …
Apr 10, 2026
48692f3
Three fixes: cmpi opcode, double-ret elimination, overlay caching
Apr 10, 2026
ef089dc
Upgrade kernel to use istc_inc, push_b, pop_b
Apr 10, 2026
df4b8bf
Overlay demo: 3 overlay swaps, compute chain verified on hardware
Apr 10, 2026
65a685b
Call graph grouping: mutually-calling functions share one overlay slot
Apr 10, 2026
7ba4460
Page 1 overflow + correct demo output: val=32 = (2*3+10)*2
Apr 10, 2026
7ea272a
Overlay regression test suite: 10/10 pass on hardware
Apr 10, 2026
b0c7672
Serial abort, error details, label fix, page3 alloc fix
Apr 10, 2026
594ea51
Serial improvements + identify overlay region overlap bug
Apr 11, 2026
6b24f68
Fix overlay region overlap + identify EEPROM tier need
Apr 11, 2026
3b334fb
EEPROM overlay tier: auto-detect, loader, void arg skip
Apr 11, 2026
2bc9c36
Two-stage boot overlay architecture with multi-page SRAM cache
Apr 11, 2026
95c897f
Fix assembler: reset stack_size between passes
Apr 11, 2026
99a1656
Fix two-stage boot: kernel-first assembly + self-copy placement
Apr 11, 2026
dec9dda
WIP: overlay arch fixes — page dispatch, validation, precomp, ddra
Apr 11, 2026
ff6951a
WIP: tone works non-overlay, fails in overlay (ipm=0 from page3[240])
Apr 11, 2026
0b9c73e
WIP: overlay tones still broken — byte alignment suspected
Apr 11, 2026
8ce13a9
Fix self-copy placement + find VIA-from-overlay bug
Apr 11, 2026
513921b
Fix overlay system: measure_lines, peephole CLOBBERS_A, simulator acc…
Apr 12, 2026
3accc1a
Reset-safe kernel, frequency fix, settling NOPs, OI debounce
Apr 12, 2026
31c1636
Revert OI ISR debounce — OI pulse too short for GPIO verify at auto c…
Apr 12, 2026
e19a173
Save working Twinkle overlay program to repo
Apr 12, 2026
e7ad813
OI ISR timing debounce, heartbeat markers for auto clock debugging
Apr 12, 2026
8c66cde
GAL16V8 source + JEDEC for VIA register expansion
Apr 12, 2026
04b0592
Add galasm binary to repo tools
Apr 12, 2026
8f3a3bc
Fix GAL power-up polarity: active-low RS2/RS3 outputs
Apr 12, 2026
516bac0
Fix __i2c_rb: exrw 0 clobbers C register (CI in microcode)
Apr 12, 2026
89d358e
Add NOP settle in __i2c_rb, verify exrw 0 does NOT clobber C
Apr 12, 2026
b31e7ac
OLED SSD1306 display, boot temp, I2C scan, GAL abandoned, compiler fixes
Apr 12, 2026
242435c
LCD temp display, compiler overlay fixes, init delay sentinels
Apr 13, 2026
9e2e660
Init extraction for two-stage boot, page3_kernel assembler section
Apr 13, 2026
199bd17
__lcd_send optimization (60B→40B), page3_size reset, self-copy debugging
Apr 13, 2026
26b5736
LCD temperature from C — two-stage boot init extraction WORKING
Apr 13, 2026
758155a
Fix xor/istc_inc/push_b register clobber bugs found by microcode audit
Apr 13, 2026
5361b94
Fix EEPROM test programs: bus recovery + ACK polling
Apr 13, 2026
64f64b8
Replace SCL-clock bus recovery with STOP-only in ESP32 programs
Apr 13, 2026
10a3944
Fix EEPROM sequential read: false STOP from SCL/SDA rise race
Apr 13, 2026
7e2b77f
EEPROM persistent storage: compiler + assembler support
Apr 13, 2026
04e21a2
EEPROM upload shim, DDRA write bug found — exw 0 3 breaks EEPROM reads
Apr 13, 2026
376fa34
EEPROM storage: write shim addr_lo fix, DDRA clear removed, debug WIP
Apr 13, 2026
4f58573
EEPROM init data, shared I2C helpers, 10 compiler/firmware bugfixes
Apr 14, 2026
813b291
lcd_temp.c: EEPROM LCD init, correct temperature (22°C)
Apr 14, 2026
91e2416
Shared I2C helpers + overlay system fixes: 92B overlay space
Apr 14, 2026
8d6be93
Overlay system: shared helpers, no-cache loader, page3-only placement
Apr 14, 2026
ebd4277
Overlay system: fix memory report, helper classification, NOP removal
Apr 14, 2026
9fa95b1
Assembler: expression support (label+N), manifest label-based offsets
Apr 14, 2026
89b3435
Overlay v3: helper bundling, knapsack placement, thin dispatch
Apr 15, 2026
ff3e85e
SCC call graph + page-table manifest for extensible overlay dispatch
Apr 15, 2026
103faef
Fix self-copy overwrite when init code is shorter than kernel
Apr 15, 2026
8de9541
Universal knapsack: all helpers evaluated, placement retry, bin-packing
Apr 15, 2026
a370999
Stopwatch test + universal knapsack fix
Apr 15, 2026
92ffdb7
Add overlay system design doc
Apr 15, 2026
0f589f3
Fix p3_capacity (240→256), skip final peephole for overlay programs
Apr 15, 2026
a614acb
Page 2 SRAM working: SP init fixes stack-corrupts-overlay bug
Apr 15, 2026
19e4d1a
Smart page2 usage: only when init code can afford SP init
Apr 15, 2026
13fc39d
Mini-copy eliminates init helper duplication, calibrated LCD delays
Apr 15, 2026
f32c8fb
Calibrated LCD command delays + auto delay_calibrate insertion
Apr 15, 2026
c8ea236
Fix shared state: lcd_init delay uses fixed loop, not page3[240]
Apr 15, 2026
e89add4
Overlay system v3: knapsack, EEPROM tier, fix __lcd_send kernel layout
Apr 17, 2026
cf097e0
Add lcd_test.c: simple LCD diagnostic using lcd_init + lcd_char
Apr 17, 2026
79c1500
Fix shared helper placement: move after copy loop to survive self-copy
Apr 17, 2026
1660bff
Add LCD output regression test (manual verification)
Apr 18, 2026
f31df99
LCD regression test: handle slow user responses
Apr 18, 2026
b38cf0d
LCD regression test: drop duplicate SKIP message on EOF/Ctrl-C
Apr 18, 2026
6c220d8
LCD regression test: unique strings per test + show previous content
Apr 18, 2026
e041894
Fix init-extraction: move init-only helpers called from runtime to sh…
Apr 18, 2026
1adbbfc
I2C LCD fixes: bus recovery, RTC STOP glitch, __lcd_chr timing outs
Apr 18, 2026
210989e
__lcd_chr: replace out with nop for inter-I2C-byte timing
Apr 18, 2026
22bdb97
ESP32 RUN/RUNNB: stop clocking when CPU asserts HLT
Apr 18, 2026
3f56d94
Compiler: dedup, user-override, dead-cache-init, lcd_clear, better di…
Apr 19, 2026
3fd6a51
Optimize __i2c_sb: use D as loop counter, save 1B
Apr 19, 2026
e28c57f
Overlay placement: concentrate on fewest SRAM pages
Apr 19, 2026
bd09ef1
Overlay mode: emit p1 globals before overlay bodies (fix data layout)
Apr 19, 2026
292f12a
Fix regcall param save: emit push AFTER function label
Apr 19, 2026
725b5f5
Peephole: elide redundant lcd_cmd(0x01) right after lcd_init()
Apr 19, 2026
d7c4bf3
Regression harness: hardware reset before every test
Apr 19, 2026
e5c4879
Overlay partitioner: wrap steps 9-14 in retry loop
Apr 19, 2026
6bf9577
Phase 6 procedure abstraction + transitive kernel deps
Apr 19, 2026
3fd9640
Phase 7: direct xfer-global writes for write-only live vars
Apr 19, 2026
85e8c85
Remove ESP32 runtime role: MK1 reads EEPROM overlays at init
Apr 19, 2026
1cfd5b7
Enable page 2 overlay storage unconditionally
Apr 19, 2026
301172c
ESP32 uploader: remove post-upload page3 patching
Apr 19, 2026
946fada
Inline sequential EEPROM preload + hard-error on code overflow
Apr 19, 2026
7185eca
Add incb/incc/incd and decb/decc/decd register inc/dec opcodes
Apr 19, 2026
febe2ae
Move decd to 0xFC, fix I2C scan bus recovery + UI newlines
Apr 19, 2026
223943a
Port-pin shadow system: route port register writes through emit helpers
Apr 19, 2026
b74a048
Add peephole equivalence test for register inc/dec opcodes
Apr 19, 2026
803a18a
lcd_clear() + overlay/reset reliability fixes
Apr 19, 2026
8128300
Add compiler abstraction roadmap
Apr 19, 2026
9d30e9f
V2 size-regression harness + --metrics-out flag
Apr 19, 2026
3d9e222
T2.1: cross-section procedure abstraction in overlay mode
Apr 19, 2026
08eb76b
T2.3: tail-merge variant of cross-section abstraction
Apr 19, 2026
9067b3c
T2.2: parametric matching infrastructure (varying-imm sequences)
Apr 19, 2026
5be9cb5
Misc kernel-size cleanups: drop vestigial ldi \$d,0 + pre-collapse mi…
Apr 19, 2026
1db6a73
T2.1 extension: include main_lines as scannable unit
Apr 19, 2026
d655821
T2: near-miss debug output for tuning the budget check
Apr 19, 2026
2401419
Stage-1 init-helper pre-mini-copy placement
Apr 19, 2026
4e3186e
Overlay-mode cleanups: loader incc, self-copy decd, section-aware fin…
Apr 20, 2026
66b7ff4
Add note about why clr $a in i2c_init is load-bearing (INIT_MARKER)
Apr 20, 2026
4c898f8
Comment: note why best-effort budget relaxation is not applied
Apr 20, 2026
54ca79e
Fix init-extraction for user-written exw/ddrb_imm sequences
Apr 20, 2026
1260358
Pre-collapse incc/decd in EEPROM preload emission (defensive, same as…
Apr 20, 2026
7612756
T3.1: liveness-based overlay call-site push/pop elision
Apr 20, 2026
4335f41
T3.1 extension: elide overlay-call push/pop in xsthunks + overlay bod…
Apr 20, 2026
a682361
Subset-sum init-helper packing for pre-mini-copy placement
Apr 20, 2026
75c1f20
Stabilise baseline at 37/42 — fluctuations from --update only capturi…
Apr 20, 2026
f0e2dfc
T3.1: look through __xsthunk / __param / __tailmerge wrappers for arg…
Apr 20, 2026
a78a8a8
Reorder kernel: helpers before loader (saves 10-26B stage-1 padding)
Apr 20, 2026
85c587f
T3.3: thin overlay dispatch — 39/42 (+2 flipped)
Apr 20, 2026
cf9dc24
Revert "Reorder kernel: helpers before loader (saves 10-26B stage-1 p…
Apr 20, 2026
3cd9167
V1 sim-based verifier + refresh baseline after reorder revert
Apr 20, 2026
19b1e37
Fix mk1sim sll/rll/etc: route ALU output to bus when SHF/OR mode set
Apr 20, 2026
bac875f
Overlay bundles: pick ENTRY function as slot[0]
Apr 20, 2026
958683c
Compiler determinism: re-exec with PYTHONHASHSEED=0 if unset
Apr 20, 2026
1c3662c
Phase 1: deterministic hardware regression harness (hw_regression.py)
Apr 20, 2026
37b880d
hw_regression: safe ≤250kHz clock + stricter ≥2-occurrence matcher
Apr 20, 2026
7f9ea50
T2.1: scan init_extracted as a fourth cross-section unit
Apr 20, 2026
181e3d0
hw_regression: sentinel anchor + sim_regression for deterministic fea…
Apr 20, 2026
4959380
T2.4: lcd_cmd(0x01)/(0x02) specialization — skip __delay_Nms
Apr 20, 2026
40ba02f
hw_regression: 100% pass rate via cycles=500k + retry on cnt=0/wrong-…
Apr 20, 2026
ed1f2ae
Stage-1 init: emit init helpers BEFORE init code → +6B–~30B slack
Apr 20, 2026
4f47fd9
EEPROM preload: 3 micro-optimisations save 7B in stage-1
Apr 20, 2026
989c7bc
__lcd_init: use cmpi (cmp imm) instead of ldi+cmp pattern — 4B saved
Apr 20, 2026
dfe27d3
__lcd_init: use __delay_Nms when resident — 6B saved per program
Apr 20, 2026
71a6e99
Move 9-clock I2C bus recovery into i2c_init() — net -8B per LCD program
Apr 20, 2026
3bec2e5
Init extraction (old path): also recognize .i2c_init_br loop label
Apr 20, 2026
eaeeefa
T4.1: brute-force superoptimizer + 4 auto-discovered peephole rules
Apr 20, 2026
61e8806
V3 + __tone_setup promotion: corpus sim harness catches prior silent …
Apr 20, 2026
bfb6d3d
sim_corpus: don't flag same-error cases as behaviour change
Apr 20, 2026
f308f78
sllb opcode: infrastructure (peephole gated off until EEPROM flash)
Apr 20, 2026
786d94d
T1.1: whole-program IR scaffolding (parser + serializer, round-trip c…
Apr 20, 2026
f369d67
T1.1 migration: Peephole passes 1, 3, 4, + T4.1 rules → IR
Apr 20, 2026
b6d9eaf
T1.1 migration: section-jump validator → IR labels index
Apr 20, 2026
57160f9
T1.2: extract T3.1 liveness closures to mk1ir primitives
Apr 20, 2026
de879a6
IR migration: shared extractability / sizing primitives
Apr 20, 2026
63168ee
Fix overlay IDX remap: match T3.3's ldi \$c pattern
Apr 20, 2026
e573eca
T2.1: relaxed budget gate for cross-overlay extractions
Apr 20, 2026
7a9ec7e
ESP32 firmware: ring-buffer OI history + fix GPIO snapshot race
Apr 20, 2026
7622bd1
Add test_idx_eeprom.c — deterministic hardware verifier for IDX remap
Apr 20, 2026
5f1e028
Phase 0: --why-not-smaller instrumentation + corpus_sizes.py
Apr 21, 2026
38a916d
oled_temp: rewrite to use i2c_stream exclusively + factor show_temp
Apr 21, 2026
d6127db
Drop spurious __delay_Nms after generic lcd_cmd
Apr 21, 2026
c8f9ab4
Compress __delay_Nms: 34B → 12B via outer/inner loop
Apr 21, 2026
dd33952
Per-OI-event timestamps + fix delay() auto-calibration
Apr 21, 2026
8cf8904
Compiler: printf, typedef, sizeof, compound assigns, index fast-paths…
Apr 21, 2026
8bcd380
Rewrite display programs to use printf where it saves bytes
Apr 21, 2026
0b880c8
Annotate lcd_temp and test1_clock: explain why they keep inline
Apr 21, 2026
20a78f3
Peephole: track stsp's D=stored-value so `stsp N; mov $d,$a; ldsp N` …
Apr 21, 2026
e9aca9b
ddrb2_imm / ddrb3_imm: fuse consecutive DDRB writes — ~838B corpus
Apr 21, 2026
a73671d
Teach size-computation about ddrb2_imm (3B) and ddrb3_imm (4B)
Apr 21, 2026
08e6bd1
Overlay redesign doc + stage-1 bug fixes + py_asm byte-equivalence pa…
Apr 22, 2026
aef6376
Phase A spike: helper-overlay architecture proven on hardware
Apr 22, 2026
5552f3f
Phase A hook: MK1_HELPER_OVERLAY env flag + stub transform method
Apr 22, 2026
2fd2aa7
Phase A: helper-overlay transform implementation (MVP)
Apr 22, 2026
54e30c7
Phase A: dynamic R_HELPER_BASE + verified via OI trace
Apr 22, 2026
e85c4ee
Phase A: __lcd_init added to helper-overlay set + internal-label fix
Apr 22, 2026
58e19d9
Phase A: fix helper body bytes to match resident (LCD now works)
Apr 22, 2026
b38ac3f
Three-layer helper-overlay regression test (offline + hardware + I/O)
Apr 22, 2026
7ad8f94
Phase A: leaf-rule enforcement + widening + fallback
Apr 22, 2026
09dc776
Phase A overlay-mode integration: inline split + cost-benefit guard
Apr 22, 2026
93889f0
Phase B prep: widen helper-overlay candidates + fall-through injection
Apr 22, 2026
5350c35
Phase B: bundled-helper extraction (works, but failing corpus needs P…
Apr 23, 2026
ad09e74
Add __lcd_print to helper-paging candidates
Apr 23, 2026
f7d9a6c
Detect single-use bundled helpers (no _ovN suffix)
Apr 23, 2026
c84e78c
Make sllb collapse permanent; remove broken ddrb2/3_imm fusion
Apr 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .claude/scheduled_tasks.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"sessionId":"bbd780c2-1940-460b-b2e2-36f8fa367290","pid":80746,"acquiredAt":1776585315366}
33 changes: 33 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,36 @@
.DS_Store
*.sch-bak
*.kicad_pcb-bak
__pycache__/

# KiCad generated/transient
*.kicad_prl
*-backups/
.history/

# Generated analysis JSON (expensive to regenerate but not source)
*_analysis.json
*_analysis_v10.json

# Generated bodge diagrams and PCB exports
bodge_*.png
bodge_*.svg
code_banking_bodge.svg
back_copper.pdf
back_full.svg
front_full.svg

# KiCad lock files
*.lck

# Duplicate KiCad project (conversion artifact)
MK1_CPU/mk1_newkicad/

# Stray root-level generated binaries
/microcode.bin
/microcode.txt

# PlatformIO build artifacts
.pio/
MK1_CPU/code/test*.c
a.out
Loading