| 4c0b050e Andy McCall ↶ |
1 |
# Changelog |
| 2 |
|
| 3 |
Contract versions of the Retro Remote Debug Controller (see [SPEC.md](SPEC.md)). |
| 4 |
Semantic versioning: MAJOR = breaking change to an existing endpoint, MINOR = |
| 5 |
additive (new endpoint / optional field), PATCH = clarification. Every minor so |
| 6 |
far has been purely additive — older clients keep working, and a server |
| 7 |
advertises the highest level whose backend callbacks are all present via |
| 8 |
`/status.contract`. |
| 9 |
|
| 10 |
## 0.3.0 |
| 11 |
- `POST /mem?addr=&bank=` — write (poke) memory; bytes in the request body, |
| 12 |
returns `{"written":n}`. Backend callback: `write_mem`. |
| 13 |
- `GET /audio` — drain synthesised PCM since the last call as a self-describing |
| 14 |
WAV (the audio analogue of `/screenshot`); `X-Rrdc-Audio-Dropped` header on |
| 15 |
ring overflow. Backend callback: `capture_audio`. |
| 16 |
- The NEC PC-FX (Mednafen) fork joins as the fourth conforming emulator, the |
| 17 |
second to vendor the C core as a git submodule. |
| 18 |
|
| 19 |
## 0.2.0 |
| 20 |
- `POST /key?text=|code=[&down=]` — inject input (press / release / tap). |
| 21 |
Backend callback: `inject_key`. |
| 22 |
- `POST /reset` — soft/cold reset. Backend callback: `reset`. |
| 23 |
- Contract gating introduced: a NULL callback returns 501 for its endpoint and |
| 24 |
lowers the advertised contract, keeping partial backends honest. |
| 25 |
|
| 26 |
## 0.1.0 |
| 27 |
- Initial contract: `GET /status`, `GET /screenshot` (PPM), `GET /mem`, |
| 28 |
`GET /regs`, `POST /step`, `POST /pause` / `POST /resume`. |
| 29 |
- Shared C core (`core/retro_control.{c,h}`) — sockets, HTTP, PPM/JSON encoding, |
| 30 |
and cooperative pause/step, driven by three loop hooks. Backend callbacks: |
| 31 |
`read_mem`, `get_regs_json`, `get_framebuffer`, `get_frame_count`. |
| 32 |
- Shared pytest client (`client/emu_control.py`) and the platform-agnostic |
| 33 |
conformance suite. Reference implementation: the Commander X16 fork. |