[← Home](../../README.md) · [Hardware](../README.md) · [OCS](README.md)

# CDTV — Platform Hardware

## Overview

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
3. **NVRAM** — 64 KB battery-backed non-volatile storage
4. **IR remote receiver** — proprietary 40 kHz infrared protocol
5. **Real-Time Clock** — Oki MSM6242B at `$DC0000`

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.

## System Specifications

| Parameter | Value |
|---|---|
| CPU | 68000 @ 7.09 MHz (PAL) / 7.16 MHz (NTSC) |
| Chipset | OCS (Agnus 8361/8367, Denise 8362, Paula 8364) |
| Chip RAM | 1 MB (expandable to 2 MB with Super Agnus mod) |
| Fast RAM | None stock |
| ROM | 256 KB Kickstart 1.3 + 512 KB Extended ROM |
| CD-ROM | Single-speed (1×), SCSI-based via DMAC/WD33C93 |
| Audio | 4-channel Paula DMA + CD-DA passthrough |
| Video | Composite, S-Video, RF (no RGB without mod) |
| Controller | IR remote, optional external keyboard |
| Storage | CD-ROM, 64 KB NVRAM |

## Address Map — CDTV-Specific Regions

The standard OCS 24-bit address map applies. The CDTV adds these regions:

| Address Range | Size | Region |
|---|---|---|
| `$DC0000`–`$DC003F` | 64 B | Real-Time Clock (Oki MSM6242B) |
| `$E00000`–`$E3FFFF` | 256 KB | Extended ROM bank 1 (CD filesystem, player UI) |
| `$E40000`–`$E7FFFF` | 256 KB | Extended ROM bank 2 (DMAC driver, boot logic) |
| `$E90000`–`$E9FFFF` | 64 KB | DMAC registers (WD33C93 SCSI DMA controller) |
| `$F00000`–`$F3FFFF` | 256 KB | NVRAM (battery-backed, 64 KB actual usable) |

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.

### DMAC Register Map

The DMAC is mapped at `$E90000`:

| Offset | Register | R/W | Description |
|---|---|---|---|
| `$E90000` | `DAWR` | W | DMAC address write (DMA destination) |
| `$E90002` | `WTCH` | W | Word Transfer Count High |
| `$E90004` | `CNTR` | RW | Control register (DMA direction, interrupt enable) |
| `$E90040` | `ACR_H` | W | Address Counter Register high word |
| `$E90042` | `ACR_L` | W | Address Counter Register low word |
| `$E90048` | `ST_DMA` | W | Start DMA transfer (write any value) |
| `$E9004A` | `FLUSH` | W | Flush DMA FIFO |
| `$E9004C` | `CINT` | W | Clear DMAC interrupt |
| `$E9004E` | `ISTR` | R | Interrupt Status Register |
| `$E90090` | `SASR` | W | WD33C93 Address/Select Register |
| `$E90091` | `SCMD` | RW | WD33C93 Data Register (read/write SBIC registers) |

### WD33C93 SBIC Registers

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) |
| `$01` | Control | DMA mode, interrupt enables |
| `$02` | Timeout | Selection timeout period |
| `$03`–`$0B` | CDB | Command Descriptor Block (SCSI command bytes) |
| `$0F` | Command | SCSI command register (initiate bus phases) |
| `$10` | Data | Data transfer register (PIO mode) |
| `$17` | Status | SCSI bus phase and completion status |

### SCSI Commands for CD-ROM

The CD-ROM drive responds to standard SCSI-2 commands:

| Command | Opcode | Use |
|---|---|---|
| `TEST UNIT READY` | `$00` | Check drive presence |
| `READ(6)` | `$08` | Read data sectors (Mode 1) |
| `READ(10)` | `$28` | Read data sectors (extended addressing) |
| `READ TOC` | `$43` | Read Table of Contents |
| `PLAY AUDIO(10)` | `$45` | Play CD-DA audio tracks |
| `PAUSE/RESUME` | `$4B` | Pause/resume audio playback |
| `READ SUB-CHANNEL` | `$42` | Read current position, ISRC, UPC/EAN |

### AmigaOS Access

Under AmigaOS, the CD-ROM is accessed through `scsi.device` loaded from Extended ROM:

```
Application → dos.library → cdfs (CD filesystem handler) → scsi.device → DMAC → WD33C93 → CD-ROM
```

---

## Extended ROM

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.

### Boot Sequence

1. Kickstart 1.3 loads from ROM (`$F80000`)
2. Extended ROM at `$E00000` is detected and initialized
3. `scsi.device` from Extended ROM initializes DMAC + WD33C93
4. CD-ROM drive is probed for a bootable disc
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.

| Parameter | Value |
|---|---|
| Type | Battery-backed SRAM |
| Capacity | 64 KB (512 Kbit) |
| Address | `$F00000`–`$F0FFFF` (64 KB usable within 256 KB window) |
| Persistence | Battery-backed (internal lithium cell) |
| 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):

| Parameter | Value |
|---|---|
| Carrier frequency | 40 kHz |
| Frame size | 12-bit command + 12-bit inverted (24-bit total) |
| Header | 9 ms pulse + 4.5 ms space |
| Bit encoding | 400 µs pulse + variable space (400 µs = 0, 1200 µs = 1) |
| Repeat | 9 ms pulse + 2.1 ms space + 400 µs end (every ~60 ms) |
| Receiver | Dedicated module tuned for 40 kHz (TSOP38240 compatible) |

### Button Mapping

| Button | Code | Function |
|---|---|---|
| Play/Pause | `$01` | Media playback toggle |
| Stop | `$02` | Stop playback |
| Forward | `$03` | Next track / fast forward |
| Rewind | `$04` | Previous track / rewind |
| Vol+ | `$05` | Volume up |
| Vol− | `$06` | Volume down |
| 0–9 | `$10`–`$19` | Numeric keypad |
| Enter | `$1A` | Confirm / select |
| Escape | `$1B` | Cancel / back |
| Up/Down/Left/Right | `$1C`–`$1F` | Navigation |
| 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.

---

## CDTV vs A500 — Hardware Comparison

| Feature | A500 | CDTV |
|---|---|---|
| CPU | 68000 @ 7.09 MHz | 68000 @ 7.09 MHz |
| Chipset | OCS | OCS (identical) |
| Chip RAM | 512 KB–1 MB | 1 MB |
| ROM | 256 KB Kickstart | 256 KB Kickstart + **512 KB Extended ROM** |
| Storage | Internal floppy (880 KB) | **CD-ROM** (1×, 680 MB) + 64 KB NVRAM |
| Input | Keyboard + mouse + joystick | **IR remote** + optional ext. keyboard |
| Audio | Paula 4-channel | Paula + **CD-DA passthrough** |
| Video output | RGB (DB23) | Composite, S-Video, RF |
| Expansion | Trapdoor + side | None visible (internal A2000-compatible) |
| RTC | None stock (add-on) | **Oki MSM6242B** |

### Software Compatibility

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.

## References

- Commodore CDTV Technical Reference Manual (internal)
- WD33C93 SCSI Bus Interface Controller datasheet (Western Digital)
- Oki MSM6242B Real-Time Clock datasheet
- WinUAE source: CDTV emulation code (Toni Wilen)
- [Big Book of Amiga Hardware — CDTV](https://bigbookofamigahardware.com/)
- ADCD 2.1: `scsi.device` Autodocs

## See Also

- [OCS Chipset](chipset_ocs.md) — Agnus/Denise/Paula (shared with CDTV)
- [Memory Types](../common/memory_types.md) — CDTV memory configuration
- [Address Space](../common/address_space.md) — CDTV address map with Extended ROM and NVRAM regions
- [CIA Chips](../common/cia_chips.md) — CIA A/B (shared across all models)
- [scsi.device](../../10_devices/scsi.md) — AmigaOS device driver API used by CDTV's DMAC/WD33C93 SCSI controller
- [ATA/ATAPI Protocol](../../10_devices/atapi.md) — ATA/ATAPI wire protocol (CDTV uses SCSI, not ATAPI, but shares the SCSI command vocabulary via ATAPI tunneling)
- [CD-ROM Filesystems](../../07_dos/cdfs.md) — ISO 9660, Rock Ridge, Joliet, CDTV CD filesystem internals
