Ppi Class Reference

The 8255. More...

#include <ppi.h>

List of all members.

Public Types

enum  FlagB {
  Triumph = 2, Saisho = 4, Solavox = 6, Awa = 8,
  Schneider = 10, Orion = 12, Amstrad = 14, VSyncOccured = 1,
  Refresh50Hz = 16, Expansion = 32, PrnterNotReady = 64, TapeRead = 128
}

Public Member Functions

 Ppi ()
 does nothing
 ~Ppi ()
 does nothing
void init ()
 set initial values
UBYTE portA ()
 get Port A
UBYTE portB ()
 get Port B
UBYTE portC ()
 get Port C
UBYTE control ()
 get control bits
UBYTE jumpers ()
 get jumpers
void setA (UBYTE val)
 set Port A
void setB (UBYTE val)
 set Port B
void setC (UBYTE val)
 set Port C
void setControl (UBYTE val)
 set control bits
void setJumpers (UBYTE val)
 set jumpers
void addB (UBYTE flags)
 add a flag to Port B
void removeB (UBYTE flags)
 remove a flag from Port B


Detailed Description

The 8255.

Parallel Peripheral Interface

8255 PPI

8255 PPI

This can be tested with the following code:

The 8255 is a general purpose input/output IC. This document will describe it's role in the Amstrad CPC,CPC+ and KC compact systems. To understand it's full functions please read the datasheet.

In these systems it is connected to the AY-3-8912 Programmable Sound Generator (PSG), keyboard, cassette recorder, the VSYNC of the 6845 CRTC and the "busy" signal from the parallel port.

The PPI is selected when bit 11 of the I/O port address is set to "0", bits 9 and 8 then define the PPI function access as shown below:

Bit 9 Bit 8 PPI Function Read/Write status
0 0 Port A data Read/Write
0 1 Port B data Read/Write
1 0 Port C data Read/Write
1 1 Control Write Only

It is advised that the remaining bits of the I/O address are set to "1" to avoid conflict with other devices. The recommended I/O addressess are:

I/O address PPI Function
&F4xx Port A data
&F5xx Port B data
&F6xx Port C data
&F7xx Control

In the CPC+, the 8255 is integrated into the ASIC. The "emulation" is not complete and some functionality is not available. Please see the "Extra CPC+ documentation" for more information.

Port Usage

NOTE:

PPI Port A

Operating system settings:

NOTE:

Bit Description Usage
7 PSG databus Read data from PSG or Write data to PSG
6
5
4
3
2
1
0

PPI Port B

Operating system settings:

Bit Description Usage
7 Cassette read data  
6 Parallel/Printer port ready signal "1" = not ready, "0" = Ready
5 /EXP (note 6)
4 (note 5)
3 (note 1) (note 4)
2 (note 2)
1 (note 3)
0 6845 VSYNC State of VSYNC from 6845. "1" = VSYNC active, "0" = VSYNC inactive

Note:

  1. On CPC464,CPC664,CPC6128 and GX4000 this is LK3 on the PCB. On the CPC464+ and CPC6128+ this is LK103 on the PCB. On the KC compact this is "1".
  2. On CPC464,CPC664,CPC6128 and GX4000 this is LK2 on the PCB. On the CPC464+ and CPC6128+ this is LK102 on the PCB. On the KC compact this is "0".
  3. On CPC464,CPC664,CPC6128 and GX4000 this is LK1 on the PCB. On the CPC464+ and CPC6128+ this is LK101 on the PCB. On the KC compact this is /TEST signal from the expansion port.
  4. On the CPC464,CPC664,CPC6128,CPC464+,CPC6128+ and GX4000 bits 3,2 and 1 define the manufacturer name. See below to see the options available. The manufacturer name is defined on the PCB and cannot be changed through software.
  5. On the CPC464,CPC664,CPC6128,CPC464+,CPC6128+ and GX4000 bit 4 defines the Screen refresh frequency. "1" = 50Hz, "0" = 60Hz. This is defined on the PCB and cannot be changed with software. On the KC compact bit 4 is "1"
  6. This bit is connected to /EXP signal on the expansion port.

Table showing manufacturer name on power-up (CPC and CPC+ only):

Bit 3 Bit 2 Bit 1 Manufacturer Name
000Isp
001Triumph
010Saisho
011Solavox
100Awa
101Schneider
110Orion
111Amstrad

PPI Port C

Operating system settings:

Bit Description Usage
7 PSG BDIR PSG function selection
6 PSG BC1
5 Cassette Write data  
4 Cassette Motor Control set bit to "1" for motor on, or "0" for motor off
3 Keyboard line Select keyboard line to be scanned (0-15)
2
1
0

PSG function selection:

Bit 7 Bit 6 Function
0 0 Inactive
0 1 Read from selected PSG register
1 0 Write to selected PSG register
1 1 Select PSG register

Programming Examples

  1. Using the control byte
  2. Using port A/B/C,

    In this example, port A is set to output, port B is set to input, and port C is set to output, and they are all operating in mode 0.

    We will only be using port A for these examples.

Author:
Fred Klaus


Member Enumeration Documentation

enum Ppi::FlagB

Enumerator:
Triumph  Manufacturer Triumph (DIP-switch, do not combine with other Man.).
Saisho  Manufacturer Saisho (DIP-switch, do not combine with other Man.).
Solavox  Manufacturer Solavox (DIP-switch, do not combine with other Man.).
Awa  Manufacturer Awa (DIP-switch, do not combine with other Man.).
Schneider  Manufacturer Schneider (DIP-switch, do not combine with other Man.).
Orion  Manufacturer Orion (DIP-switch, do not combine with other Man.).
Amstrad  Manufacturer Amstrad (DIP-switch, do not combine with other Man.).
VSyncOccured  VSync (internal).
Refresh50Hz  50Hz instead of 60Hz refresh rate (DIP-switch)
Expansion  No expansion Peripherals available (internal).
PrnterNotReady  Printer is not ready (internal).
TapeRead  Tape will be read (internal).


The documentation for this class was generated from the following files:
Generated on Fri Mar 16 21:30:29 2007 for roland.kdevelop by  doxygen 1.5.0