feat: approximate NVRAM requirement from the CAP analysis (v3.5.15)
GlobalPlatform models this explicitly (GP Card Spec v2.3.1 Table 11-48, load parameters): C6 = non-volatile code, C7 = volatile data, C8 = non-volatile data, and 11.5.2.3.7 - when the card makes no code/data distinction the required minimum is C6 + C8. The analysis now reports it: - capmem.memory_json() accepts the load file size (all CAP components - the package image the card stores) and returns code.load_file, nvram.requirement = load_file + persistent data, and sets the suggested C6 to the load file (the bytecode-only Method.cap figure stays in code.method_component); _cap_info_body passes the size it already computed. - The CAP estimate box (both the RAM installer and the SCP81 Install-from-.cap form) leads with "NVRAM requirement ≈ code image + data" plus the RAM estimate, keeps the bytecode/other-component split and the full data breakdown in Details, and carries the GP citation with the caveats (card memory management, allocation rounding and the registry entry are not included; the static field image appears in both parts). - An older server response without code.load_file still renders (the bytecode size is used as the fallback). Tests: Python +1 (load-file semantics) with extended cap-info assertions, frontend +1 (renderer + fallback). Help EN/RU, docs/api.md, AGENTS. 587 frontend / 472 Python green; version 3.5.15; sw simple-v268.
This commit is contained in:
+13
-2
@@ -349,9 +349,10 @@ used for installation.
|
||||
"package_aid": "AA1902BC226001",
|
||||
"applet_count": 1, "applets": ["AA1902BC226001"],
|
||||
"class_count": 3, "method_count": 12,
|
||||
"code": {"method_component": 850},
|
||||
"code": {"method_component": 850, "load_file": 1234},
|
||||
"nvram": {"static_image": 12, "array_init": 4, "install_objects": 100,
|
||||
"header_overhead": 24, "ref_storage": 8, "total": 148, "runtime": 0},
|
||||
"header_overhead": 24, "ref_storage": 8, "total": 148, "runtime": 0,
|
||||
"requirement": 1382},
|
||||
"ram": {"transient_arrays": 16, "runtime_transient": 0, "peak_frame": 8, "total": 24},
|
||||
"suggested": {"c6": 850, "c7": 272, "c8": 148},
|
||||
"warnings": []
|
||||
@@ -359,6 +360,16 @@ used for installation.
|
||||
}
|
||||
```
|
||||
|
||||
`code.load_file` is the concatenated load file (all components) - the
|
||||
package image the card stores, our proxy for the GlobalPlatform Card Spec
|
||||
v2.3.1 Table 11-48 "non-volatile code" minimum memory requirement; the
|
||||
tool's bytecode-only figure stays in `code.method_component`. The suggested
|
||||
`C6` follows the load file, and `nvram.requirement` = `code.load_file` +
|
||||
`nvram.total` (the C6+C8-style total per §11.5.2.3.7: with no code/data
|
||||
split in the card's memory the required minimum is the sum of both). The
|
||||
estimate excludes card-specific memory management, allocation rounding and
|
||||
the GP registry entry.
|
||||
|
||||
**Errors** (HTTP 200 with `ok: false`, like `/api/scp81/gen-install`):
|
||||
`{"ok": false, "error": "cap parse failed: File is not a zip file"}` for a
|
||||
corrupt/wrong archive, or `cap analysis failed: …` when a component passes
|
||||
|
||||
Reference in New Issue
Block a user