From ff43e72d73c2471e16e683daf76e58fd6597bb70 Mon Sep 17 00:00:00 2001 From: JC-000 <3798556+JC-000@users.noreply.github.com> Date: Sat, 18 Apr 2026 09:36:47 -0500 Subject: [PATCH 1/4] README: split binary size + label count by backend Co-Authored-By: Claude Opus 4.7 (1M context) --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index be6da7a..e03d6b6 100644 --- a/README.md +++ b/README.md @@ -114,7 +114,12 @@ The Makefile automatically builds ip65 from the submodule into a flat binary blo ## Project Status -Current status (40 KB binary, 537 labels): +Current status: + +- 38 KB binary (ip65 build), 1738 labels +- 38 KB binary (uci build), 1816 labels + +Progress: - [x] Project structure and build system - [x] ip65 submodule integration — 6.8 KB binary blob at $2000 (TCP/UDP/DNS/DHCP/ARP + RR-Net CS8900a) From 81dc133f83a07f14ca492f0e852e543817702697 Mon Sep 17 00:00:00 2001 From: JC-000 <3798556+JC-000@users.noreply.github.com> Date: Sat, 18 Apr 2026 09:44:50 -0500 Subject: [PATCH 2/4] Add MIT LICENSE Co-Authored-By: Claude Opus 4.7 (1M context) --- LICENSE | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..a37d16d --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 JC-000 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From 7b33966c757914bec0179bfd3b7d18a5b5064c12 Mon Sep 17 00:00:00 2001 From: JC-000 <3798556+JC-000@users.noreply.github.com> Date: Sat, 18 Apr 2026 09:56:01 -0500 Subject: [PATCH 3/4] README: align right edge of TLS inner crypto rows in diagram Co-Authored-By: Claude Opus 4.7 (1M context) --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index e03d6b6..ee3831e 100644 --- a/README.md +++ b/README.md @@ -18,11 +18,11 @@ An HTTPS client for the Commodore 64 in 6502 assembly. Implements TLS 1.3 over T │ │ Record Layer │ Handshake Proto │ │ tls_record.asm, tls_handshake.asm │ └──────┬───────┴────────┬─────────┘ │ │ │ │ │ - │ ┌──────┴───────┐ ┌─────┴──────────┐ │ - │ │ AEAD │ │ Key Schedule │ │ (crypto modules) - │ │ ChaCha20- │ │ HKDF-SHA256 │ │ hkdf.asm - │ │ Poly1305 │ │ ECDHE P-256 │ │ - │ └──────────────┘ └────────────────┘ │ + │ ┌──────┴───────┐ ┌─────┴──────────┐ │ + │ │ AEAD │ │ Key Schedule │ │ (crypto modules) + │ │ ChaCha20- │ │ HKDF-SHA256 │ │ hkdf.asm + │ │ Poly1305 │ │ ECDHE P-256 │ │ + │ └──────────────┘ └────────────────┘ │ ├─────────────────────────────────────────┤ │ Network ABI (src/net_abi.inc) │ net_init / net_tcp_* / net_dns_* ├──────────────────────┬──────────────────┤ From f9e39e040dacde4258f1e5eed901ed7a7bd98b6c Mon Sep 17 00:00:00 2001 From: JC-000 <3798556+JC-000@users.noreply.github.com> Date: Sat, 18 Apr 2026 10:04:44 -0500 Subject: [PATCH 4/4] tools/uci: honor U64_HOST in boot_check.py and phase2_check.py The other five tools/uci/ scripts already read U64_HOST with a default of 192.168.1.81; these two had the address hardcoded. Make them consistent and document the override in README and CLAUDE.md. Co-Authored-By: Claude Opus 4.7 (1M context) --- CLAUDE.md | 3 ++- README.md | 2 +- tools/uci/boot_check.py | 13 +++++++++---- tools/uci/phase2_check.py | 6 +++++- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 8432ccb..3317e1b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -163,7 +163,8 @@ to the ip65 layout. ### UCI test scripts -Scripts under `tools/uci/` require a U64E at 192.168.1.81 and use +Scripts under `tools/uci/` require a U64E (default 192.168.1.81, +overridable via the `U64_HOST` environment variable) and use `DeviceLock` + `enable_uci`/`disable_uci`: - `boot_check.py` — verify UCI firmware detection and boot banner diff --git a/README.md b/README.md index ee3831e..e34ee87 100644 --- a/README.md +++ b/README.md @@ -210,7 +210,7 @@ The setup script creates `br-c64` with `tap-c64-0`/`tap-c64-1`, assigns `10.0.65 ### Ultimate 64 Elite Hardware Tests (UCI backend) -Scripts under `tools/uci/` drive a real Ultimate 64 Elite over the network (default `192.168.1.81`), exercising the **UCI backend only** (built with `make BACKEND=uci`). They DMA the PRG into RAM, run the boot, and snapshot UCI/TLS state on completion or timeout. These scripts do not run under VICE. +Scripts under `tools/uci/` drive a real Ultimate 64 Elite over the network (default `192.168.1.81`, overridable via the `U64_HOST` environment variable), exercising the **UCI backend only** (built with `make BACKEND=uci`). They DMA the PRG into RAM, run the boot, and snapshot UCI/TLS state on completion or timeout. These scripts do not run under VICE. ```bash python3 tools/uci/boot_check.py # UCI firmware detection diff --git a/tools/uci/boot_check.py b/tools/uci/boot_check.py index 96f9895..f3ca7db 100644 --- a/tools/uci/boot_check.py +++ b/tools/uci/boot_check.py @@ -3,9 +3,10 @@ Phase 1b boot check for the UCI backend. Uploads build/c64-https.prg (assumed to have been built with -`make BACKEND=uci`) to the U64E at 192.168.1.81, waits for the PRG -to boot, reads screen RAM at $0400 (40x25 = 1000 bytes), decodes the -Commodore screen-code bytes to ASCII, and prints the non-empty lines. +`make BACKEND=uci`) to the U64E (default 192.168.1.81, overridable via +U64_HOST), waits for the PRG to boot, reads screen RAM at $0400 +(40x25 = 1000 bytes), decodes the Commodore screen-code bytes to +ASCII, and prints the non-empty lines. Pass criterion: screen contains printable text (not a uniform field of spaces or garbage). This only verifies the PRG loads and runs on @@ -13,9 +14,13 @@ Usage: python3 tools/uci/boot_check.py + +Environment: + U64_HOST — U64E address (default 192.168.1.81) """ from __future__ import annotations +import os import sys import time from pathlib import Path @@ -23,7 +28,7 @@ from c64_test_harness.backends.device_lock import DeviceLock from c64_test_harness.backends.ultimate64_client import Ultimate64Client -HOST = "192.168.1.81" +HOST = os.environ.get("U64_HOST", "192.168.1.81") PRG_PATH = Path(__file__).resolve().parents[2] / "build" / "c64-https.prg" diff --git a/tools/uci/phase2_check.py b/tools/uci/phase2_check.py index 677d8f4..0caf388 100644 --- a/tools/uci/phase2_check.py +++ b/tools/uci/phase2_check.py @@ -20,9 +20,13 @@ Usage: python3 tools/uci/phase2_check.py + +Environment: + U64_HOST — U64E address (default 192.168.1.81) """ from __future__ import annotations +import os import sys import time from pathlib import Path @@ -32,7 +36,7 @@ from c64_test_harness.backends.ultimate64_client import Ultimate64Client from c64_test_harness.uci_network import enable_uci, disable_uci -HOST = "192.168.1.81" +HOST = os.environ.get("U64_HOST", "192.168.1.81") REPO_ROOT = Path(__file__).resolve().parents[2] PRG_PATH = REPO_ROOT / "build" / "c64-https.prg" LABELS_PATH = REPO_ROOT / "build" / "labels.txt"