mirror of
https://github.com/github/awesome-copilot.git
synced 2026-02-24 12:25:11 +00:00
add reference files for new skill legacy-circuit-mockups
This commit is contained in:
288
skills/legacy-circuit-mockups/references/emulator-6522.md
Normal file
288
skills/legacy-circuit-mockups/references/emulator-6522.md
Normal file
@@ -0,0 +1,288 @@
|
||||
# 6522 VIA (Versatile Interface Adapter) Emulation Specification
|
||||
|
||||
A technical Markdown specification for **emulating the MOS Technology / WDC 6522 VIA**, suitable for 6502-family emulators, SBC simulators, and retrocomputing software environments.
|
||||
|
||||
---
|
||||
|
||||
## 1. Scope
|
||||
|
||||
This document defines the functional behavior required to emulate:
|
||||
|
||||
* MOS Technology 6522 VIA
|
||||
* WDC 65C22 VIA (CMOS variant, where noted)
|
||||
|
||||
Out of scope:
|
||||
|
||||
* Analog electrical characteristics
|
||||
* Bus contention and propagation delay
|
||||
* Undocumented silicon race conditions
|
||||
|
||||
---
|
||||
|
||||
## 2. Chip Overview
|
||||
|
||||
### Core Features
|
||||
|
||||
| Feature | Description |
|
||||
| ---------------- | ------------------------------------ |
|
||||
| I/O Ports | Two 8-bit bidirectional ports (A, B) |
|
||||
| Timers | Two programmable timers |
|
||||
| Shift Register | 8-bit serial shift register |
|
||||
| Interrupt System | Maskable, prioritized |
|
||||
| Handshaking | CA1/CA2, CB1/CB2 control lines |
|
||||
|
||||
---
|
||||
|
||||
## 3. External Signals (Logical Model)
|
||||
|
||||
| Signal | Direction | Purpose |
|
||||
| -------- | --------- | ------------------------ |
|
||||
| PA0-PA7 | I/O | Port A |
|
||||
| PB0-PB7 | I/O | Port B |
|
||||
| CA1, CA2 | I/O | Control lines A |
|
||||
| CB1, CB2 | I/O | Control lines B |
|
||||
| IRQ | Output | Interrupt request to CPU |
|
||||
| CS1, CS2 | Input | Chip select |
|
||||
| R/W | Input | Read / write |
|
||||
| RS0-RS3 | Input | Register select |
|
||||
|
||||
---
|
||||
|
||||
## 4. Register Map
|
||||
|
||||
Registers are selected using RS3-RS0.
|
||||
|
||||
| Address | Name | R/W | Description |
|
||||
| ------- | ----------- | --- | -------------------------------- |
|
||||
| 0 | ORB / IRB | R/W | Output/Input Register B |
|
||||
| 1 | ORA / IRA | R/W | Output/Input Register A |
|
||||
| 2 | DDRB | R/W | Data Direction Register B |
|
||||
| 3 | DDRA | R/W | Data Direction Register A |
|
||||
| 4 | T1C-L | R | Timer 1 Counter Low |
|
||||
| 5 | T1C-H | R | Timer 1 Counter High |
|
||||
| 6 | T1L-L | W | Timer 1 Latch Low |
|
||||
| 7 | T1L-H | W | Timer 1 Latch High |
|
||||
| 8 | T2C-L | R | Timer 2 Counter Low |
|
||||
| 9 | T2C-H | R | Timer 2 Counter High |
|
||||
| 10 | SR | R/W | Shift Register |
|
||||
| 11 | ACR | R/W | Auxiliary Control Register |
|
||||
| 12 | PCR | R/W | Peripheral Control Register |
|
||||
| 13 | IFR | R/W | Interrupt Flag Register |
|
||||
| 14 | IER | R/W | Interrupt Enable Register |
|
||||
| 15 | ORA (no HS) | R/W | Output Register A (no handshake) |
|
||||
|
||||
---
|
||||
|
||||
## 5. Data Direction Registers
|
||||
|
||||
* Bit = 1 Output
|
||||
* Bit = 0 Input
|
||||
|
||||
```text
|
||||
output = ORx & DDRx
|
||||
input = external & ~DDRx
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. Port Behavior
|
||||
|
||||
### Read
|
||||
|
||||
* Returns input pins for bits configured as input
|
||||
* Returns output latch for bits configured as output
|
||||
|
||||
### Write
|
||||
|
||||
* Updates output latch only
|
||||
* Actual pin value depends on DDR
|
||||
|
||||
---
|
||||
|
||||
## 7. Timers
|
||||
|
||||
### Timer 1 (T1)
|
||||
|
||||
* 16-bit down counter
|
||||
* Can generate interrupts
|
||||
* Optional PB7 toggle
|
||||
|
||||
### Timer 2 (T2)
|
||||
|
||||
* 16-bit down counter
|
||||
* One-shot or pulse counting (CB1)
|
||||
|
||||
### Timer Emulation Rules
|
||||
|
||||
* Decrement once per CPU cycle
|
||||
* Reload from latch when appropriate
|
||||
* Set interrupt flag on underflow
|
||||
|
||||
---
|
||||
|
||||
## 8. Shift Register (SR)
|
||||
|
||||
Modes controlled via ACR:
|
||||
|
||||
* Disabled
|
||||
* Shift in under CB1 clock
|
||||
* Shift out under system clock
|
||||
|
||||
Emulator requirements:
|
||||
|
||||
* 8-bit shift
|
||||
* Correct bit order
|
||||
* Optional external clock handling
|
||||
|
||||
---
|
||||
|
||||
## 9. Control Registers
|
||||
|
||||
### Auxiliary Control Register (ACR)
|
||||
|
||||
Controls:
|
||||
|
||||
* Timer 1 mode
|
||||
* Timer 2 mode
|
||||
* Shift register mode
|
||||
* PB7 behavior
|
||||
|
||||
### Peripheral Control Register (PCR)
|
||||
|
||||
Controls:
|
||||
|
||||
* CA1/CB1 edge sensitivity
|
||||
* CA2/CB2 handshake / pulse / output modes
|
||||
|
||||
---
|
||||
|
||||
## 10. Interrupt System
|
||||
|
||||
### Interrupt Flag Register (IFR)
|
||||
|
||||
| Bit | Source |
|
||||
| --- | -------------------------- |
|
||||
| 0 | CA2 |
|
||||
| 1 | CA1 |
|
||||
| 2 | Shift Register |
|
||||
| 3 | CB2 |
|
||||
| 4 | CB1 |
|
||||
| 5 | Timer 2 |
|
||||
| 6 | Timer 1 |
|
||||
| 7 | Any interrupt (logical OR) |
|
||||
|
||||
### Interrupt Enable Register (IER)
|
||||
|
||||
* Bit 7 = set/clear mode
|
||||
* Bits 0-6 enable individual sources
|
||||
|
||||
### IRQ Logic
|
||||
|
||||
```text
|
||||
IRQ = (IFR & IER & 0x7F) != 0
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 11. Handshaking Lines
|
||||
|
||||
### CA1 / CB1
|
||||
|
||||
* Edge-detect inputs
|
||||
* Trigger interrupts
|
||||
|
||||
### CA2 / CB2
|
||||
|
||||
* Input or output
|
||||
* Pulse or handshake modes
|
||||
|
||||
Emulator must:
|
||||
|
||||
* Track pin state
|
||||
* Detect configured edges
|
||||
|
||||
---
|
||||
|
||||
## 12. Reset Behavior
|
||||
|
||||
On reset:
|
||||
|
||||
* DDRx = $00
|
||||
* ORx = $00
|
||||
* Timers stopped
|
||||
* IFR cleared
|
||||
* IER cleared
|
||||
* IRQ inactive
|
||||
|
||||
---
|
||||
|
||||
## 13. Read/Write Side Effects
|
||||
|
||||
| Register | Side Effect |
|
||||
| ----------- | ------------------------ |
|
||||
| ORA/ORB | Clears handshake flags |
|
||||
| T1C-H write | Loads and starts Timer 1 |
|
||||
| IFR write | Clears written bits |
|
||||
| IER write | Sets or clears enables |
|
||||
|
||||
---
|
||||
|
||||
## 14. Emulation Timing Levels
|
||||
|
||||
| Level | Description |
|
||||
| -------------- | ------------------------- |
|
||||
| Functional | Correct register behavior |
|
||||
| Cycle-based | Timers tick per CPU cycle |
|
||||
| Cycle-accurate | Matches real VIA timing |
|
||||
|
||||
---
|
||||
|
||||
## 15. Integration with 6502 Emulator
|
||||
|
||||
```text
|
||||
CPU cycle VIA tick update timers update IRQ
|
||||
```
|
||||
|
||||
* VIA must be clocked in sync with CPU
|
||||
* IRQ line sampled by CPU at instruction boundaries
|
||||
|
||||
---
|
||||
|
||||
## 16. Testing and Validation
|
||||
|
||||
### Recommended Tests
|
||||
|
||||
* VIA timer test ROMs
|
||||
* Port read/write tests
|
||||
* Interrupt priority tests
|
||||
|
||||
### Validation Checklist
|
||||
|
||||
* Timers count correctly
|
||||
* IRQ asserts and clears properly
|
||||
* DDR behavior correct
|
||||
* Side effects implemented
|
||||
|
||||
---
|
||||
|
||||
## 17. Differences: 6522 vs 65C22 (Summary)
|
||||
|
||||
| Feature | 6522 | 65C22 |
|
||||
| -------------- | ------ | -------- |
|
||||
| Power | Higher | Lower |
|
||||
| Decimal quirks | N/A | Fixed |
|
||||
| Timer accuracy | NMOS | Improved |
|
||||
|
||||
---
|
||||
|
||||
## 18. Reference Links
|
||||
|
||||
* [https://www.westerndesigncenter.com/wdc/documentation](https://www.westerndesigncenter.com/wdc/documentation)
|
||||
* [https://www.princeton.edu/~mae412/HANDOUTS/Datasheets/6522.pdf](https://www.princeton.edu/~mae412/HANDOUTS/Datasheets/6522.pdf)
|
||||
* [https://www.nesdev.org/wiki/6522](https://www.nesdev.org/wiki/6522)
|
||||
|
||||
---
|
||||
|
||||
**Document Scope:** Software emulation of the 6522 VIA
|
||||
**Audience:** Emulator developers, SBC designers
|
||||
**Status:** Stable technical reference
|
||||
Reference in New Issue
Block a user