64kramsystem / 64kramsystem/ghidra-vice-connector

Annotate C64 zero-page and system variable addresses

Abierto
#22 0 comentarios 0 reacciones 0 asignados Ver en GitHub
priority: medium
Lenguaje dominante
Python
Estrellas
1
Forks
0
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

## Summary

Apply labels and comments to the ~300 well-known C64 KERNAL/BASIC zero-page and system variable addresses in the Ghidra program database. This complements issue #13 (hardware registers) which covers $D000–$DFFF; this issue covers $0000–$03FF.

Sources: [pagetable.com Ultimate C64 Reference](https://www.pagetable.com/c64ref/c64mem/), [sta.c64.org memory map](http://sta.c64.org/cbm64mem.html).

---

## Key address ranges

| Range | Contents |
|-------|----------|
| $0000–$0001 | CPU I/O port direction / data (6510-specific) |
| $0002–$00FF | KERNAL/BASIC zero-page workspace |
| $00FB–$00FE | Free zero-page for user programs |
| $0100–$01FF | 6502 hardware stack |
| $0200–$02FF | BASIC input buffer, KERNAL workspace |
| $0300–$0314 | KERNAL vectors (overridable soft vectors) |
| $0314–$0333 | IRQ/NMI/BRK/RESET vectors (RAM-based) — see also issue #14 |
| $033C–$03FB | Cassette buffer (often used as free scratch RAM by games) |

Notable zero-page addresses:
- `$01` — processor port (bank switching config)
- `$2B`/`$2C` — start of BASIC text
- `$90` — KERNAL status byte
- `$A7`–`$C5` — floating point accumulator
- `$C5`/`$C6` — current key / key count

---

## Implementation

A Ghidra script (Java or Python, alongside `RebaseToC64Load.java` in `data/ghidra-scripts/`) that iterates a built-in table and calls:

```java
// Java (GhidraScript)
Address addr = toAddr(0x0090);
createLabel(addr, "KERNAL_STATUS", true, SourceType.IMPORTED);
setPlateComment(addr, "KERNAL I/O status byte (ST)");
```

The table should be a static list in the script — no external file dependency.

**Run condition:** check `currentProgram.getLanguage().getLanguageID().toString().contains("6502")` before applying, so the script is safe to run against any Ghidra program.

**Integration:** mention in README as a companion script to run after import, alongside `RebaseToC64Load.java`.

---

## Reference data

Full address tables:
- https://www.pagetable.com/c64ref/c64mem/ (machine-readable JSON available)
- http://sta.c64.org/cbm64mem.html

The pagetable.com reference has a JSON export that could be used to generate the label table automatically.

---

## Files to create/change

- `data/ghidra-scripts/LabelC64SystemAddresses.java` — new script (companion to `RebaseToC64Load.java`)
- `README.md` — mention the script in the setup section

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.