# Memory Map Documentation #### PCM Buffer | Function | Address | |----------------------------------|----------| | **PCM Voice Buffer (High Byte)** | `0xDF00` | | **PCM Voice Buffer (Low Byte)** | `0xDF01` | If you want to write to both, write low byte first #### Voice Generators | Voice | Volume | Waveform | Phase | Frequency (High Byte, write last) | Frequency (Low Byte) | |-------------|----------|----------|----------|-----------------------------------|----------------------| | **Voice 0** | `0xDF02` | `0xDF03` | `0xDF04` | `0xDF05` | `0xDF06` | | **Voice 1** | `0xDF07` | `0xDF08` | `0xDF09` | `0xDF0A` | `0xDF0B` | | **Voice 2** | `0xDF0C` | `0xDF0D` | `0xDF0E` | `0xDF0F` | `0xDF10` | #### Display Controls | Display | Address | |---------------|----------| | **Display A** | `0xDF12` | | **Display B** | `0xDF13` | | **Display C** | `0xDF14` | | **Display D** | `0xDF15` | | **Display E** | `0xDF16` | | **Display F** | `0xDF17` | | **Display G** | `0xDF18` | | **Display H** | `0xDF19` | #### Switch Inputs | Switch Bank | First 2 rows Address | Last 2 rows Address | |----------------|----------------------|---------------------| | **Switches A** | `0xDF20` | `0xDF21` | | **Switches B** | `0xDF22` | `0xDF23` | | **Switches C** | `0xDF24` | `0xDF25` | | **Switches D** | `0xDF26` | `0xDF27` | ### GPU Memory - **Base Address:** `0xEF00` - **Size:** `160 × 160` pixels - **End Address:** `0xEF00 + (160 × 160) = GPU_END` - **Color Encoding:** - Red: Bits `[7:5]` scaled (0-7 → 0-255) - Green: Bits `[4:2]` scaled (0-7 → 0-255) - Blue: Bits `[1:0]` scaled (0-3 → 0-255) - Pixels are stored in a texture-compatible `RGBA8888` format. ## Memory Operations