# General Instrument AY-3-8910

this chip was used in many home computers (ZX Spectrum, MSX, Amstrad CPC, Atari ST, etc.), video game consoles (Intellivision and Vectrex), arcade boards and even slot machines!

It is a 3-channel PSG sound source. The chip's powerful sound comes from the envelope...

AY-3-8914 variant was used in Intellivision, it's basically original AY with 4 level envelope volume per channel and different register format.

# effects

- `20xx`: set channel mode. `xx` may be one of the following:
  - `00`: square
  - `01`: noise
  - `02`: square and noise
  - `03`: envelope
  - `04`: envelope and square
  - `05`: envelope and noise
  - `06`: envelope and square and noise
  - `07`: nothing
- `21xx`: set noise frequency. `xx` is a value between 00 and 1F.
- `22xy`: set envelope mode.
  - `x` sets the envelope shape, which may be one of the following:
    - `0: \___` decay
    - `4: /___` attack once
    - `8: \\\\` saw
    - `9: \___` decay
    - `A: \/\/` inverse obelisco
    - `B: \¯¯¯` decay once
    - `C: ////` inverse saw
    - `D: /¯¯¯` attack
    - `E: /\/\` obelisco
    - `F: /___` attack once
  - if `y` is 1 then the envelope will affect this channel.
- `23xx`: set envelope period low byte.
- `24xx`: set envelope period high byte.
- `25xx`: slide envelope period up.
- `26xx`: slide envelope period down.
- `29xy`: enable auto-envelope mode.
  - in this mode the envelope period is set to the channel's notes, multiplied by a fraction.
  - `x` is the numerator.
  - `y` is the denominator.
  - if `x` or `y` are 0 this will disable auto-envelope mode.
- `2Exx`: write to I/O port A.
  - this changes the port's mode to "write". make sure you have connected something to it.
- `2Fxx`: write to I/O port B.
  - this changes the port's mode to "write". make sure you have connected something to it.