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/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. diff --git a/README.md b/README.md index be6da7a..e34ee87 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_* ├──────────────────────┬──────────────────┤ @@ -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) @@ -205,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"