The **Commodore Dynamic Total Vision** (CDTV, 1991) is an A500-class OCS computer packaged as a consumer CD-ROM set-top box. Internally it uses the same Agnus/Denise/Paula chipset as the A500, but adds several unique subsystems:
1.**DMAC + WD33C93 SCSI controller** — drives the internal CD-ROM via DMA
2.**Extended ROM** — 512 KB of additional firmware for CD filesystem and player software
The CDTV has **no keyboard** (optional external), **no internal floppy** (optional external), and **no expansion slots** visible to the end user. It targets the living room, not the desktop.
See also: [Address Space](../common/address_space.md) — full 24-bit map with CDTV-specific entries.
---
## DMAC and WD33C93 SCSI Controller
### Architecture
The CDTV's CD-ROM is connected via a **SCSI bus** — the same architecture used in the A2091 and A590 hard drive controllers. The system uses two chips:
| Chip | Role |
|---|---|
| **DMAC** (Commodore custom) | DMA controller — transfers data between the WD33C93 and Amiga memory |
| **WD33C93** (Western Digital) | SCSI Bus Interface Controller (SBIC) — handles SCSI protocol with the CD-ROM drive |
This is fundamentally different from the CD32, where Akiko handles CD-ROM control directly via PIO.
The WD33C93 is accessed indirectly through the DMAC. Write the target register number to `SASR` (`$E90090`), then read/write data via `SCMD` (`$E90091`):
| Register | Name | Description |
|---|---|---|
| `$00` | Own ID | SCSI initiator ID (typically 7) |
The CDTV includes **512 KB of additional ROM** mapped at `$E00000`–`$E7FFFF`, split across two 256 KB banks. This ROM contains:
| Bank | Address Range | Contents |
|---|---|---|
| Bank 1 | `$E00000`–`$E3FFFF` | CD filesystem (CDFS), audio player UI, bookmark manager |
| Bank 2 | `$E40000`–`$E7FFFF` | DMAC/WD33C93 device driver (`scsi.device`), boot sequence, system initialization |
The Extended ROM is **not present** on standard A500/A2000 machines. Software that detects CDTV typically checks for the presence of `cdtv.device` or reads the Extended ROM base.
5. If a valid Amiga boot block is found on the CD → boot from CD
6. If no CD → fall through to standard floppy boot (if external floppy present)
---
## NVRAM (Non-Volatile Storage)
### Hardware
The CDTV includes **64 KB of battery-backed SRAM** mapped at `$F00000`–`$F3FFFF`. This is fundamentally different from the CD32's tiny serial EEPROM — the CDTV has substantially more storage.
| Access | Direct memory-mapped (byte-addressable) |
| Typical use | Bookmarks, game saves, user preferences |
### Access
Unlike the CD32's I²C EEPROM, CDTV NVRAM is **directly memory-mapped** — the CPU reads and writes it like normal RAM:
```asm
; Read a byte from NVRAM
move.b $F00000, d0 ; read first byte of NVRAM
; Write a byte to NVRAM
move.b d0, $F00000 ; write to NVRAM — persists across power cycles
```
### AmigaOS Interface
The CDTV provides `bookmark.device` for structured NVRAM access:
```c
/* CDTV bookmark access — stores named data blocks in NVRAM */
struct IOStdReq *io;
/* ... open bookmark.device ... */
io->io_Command = CMD_WRITE;
io->io_Data = save_data;
io->io_Length = data_length;
DoIO((struct IORequest *)io);
```
---
## Infrared Remote Controller
### Hardware
The CDTV includes a dedicated IR receiver module and ships with a full remote control unit. The remote provides media playback buttons, a numeric keypad, and navigation controls.
### Protocol
The CDTV uses a **proprietary IR protocol** (not NEC, not RC-5):
| A / B | `$20` / `$21` | Assignable (game buttons) |
> [!NOTE]
> The IR receiver connects to the system as a keyboard-like input device. AmigaOS treats remote button presses as `IECLASS_RAWKEY` input events with dedicated qualifier codes. Standard `input.device` handlers receive these events transparently.
---
## Real-Time Clock
The CDTV includes an **Oki MSM6242B** RTC chip at `$DC0000`:
| Address | Register | Description |
|---|---|---|
| `$DC0001` | Seconds (units) | BCD 0–9 |
| `$DC0003` | Seconds (tens) | BCD 0–5 |
| `$DC0005` | Minutes (units) | BCD 0–9 |
| `$DC0007` | Minutes (tens) | BCD 0–5 |
| `$DC0009` | Hours (units) | BCD 0–9 |
| `$DC000B` | Hours (tens) | BCD 0–2 |
| `$DC000D` | Day (units) | BCD 0–9 |
| `$DC000F` | Day (tens) | BCD 0–3 |
| `$DC0011` | Month (units) | BCD 0–9 |
| `$DC0013` | Month (tens) | BCD 0–1 |
| `$DC0015` | Year (units) | BCD 0–9 |
| `$DC0017` | Year (tens) | BCD 0–9 |
| `$DC0019` | Day of week | 0–6 |
| `$DC001B` | Control D | AM/PM, 12/24 mode |
| `$DC001D` | Control E | IRQ enable, test |
| `$DC001F` | Control F | Reset, busy flag |
> [!NOTE]
> The same MSM6242B RTC is used in the A2000 and A3000. The register layout is identical across all models.
The CDTV runs standard AmigaOS 1.3 software from CD or external floppy. The Extended ROM adds CD-specific functionality but does not break compatibility. Most A500 games work unmodified when loaded from compatible media.