Last modified on 17 December 2010, at 16:06

MEA8000 I/O Ports and Pinouts

Revision as of 16:06, 17 December 2010 by MacDeath (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)


Command Register (W) (A0=1)

 7-5   N/A  Not used
 4     STOP Stop        (0=No change, 1=Force Instant Stop)
 3-2   CONT Continue    (0=No change, 1=No change, 2=Slow Stop, 3=Continue)
 1-0   ROE  /REQ Output (0=No change, 1=No change, 2=Disable, 3=Enable)
  • STOP Mode: Output is silent, REQ is set, next write to Data register will be treated as 8bit Starting Pitch value, to be followed by the 32bit Speech Frame data, thereafter sound output will start (and the device is no longer in STOP Mode).
  • After completing a speech frame (which takes 8..64 ms), the CPU can output another speech frame (by writing another 32bit to the data register), if the CPU doesn't supply new data then Slow Stop or Continue will occur (as selected in the Command Register).
  • SLOW STOP Mode: After completing the last speech frame, the last frame will be repeated once (with decaying amplitude & same pitch), thereafter, STOP mode is entered.
  • CONTINUE Mode: The last speech frame will be repeated indefinetly (until a new 32bit data has been supplyied, or until SLOW STOP mode is selected, or until INSTANT STOP is forced).

Status Register (R) (A0=Don't care)

 7     REQ  Data Request (0=Busy, 1=Data Request)
 6-0   N/A  Not used     (probably high-z?)
  • Do not write to the Data Register when REQ=0. Timings should be somehow like so: After 1st..3rd Frame Byte, REQ=0 occurs for 3us. After 4th byte (and after Initital Pitch) REQ=0 occurs for 8..64ms?
  • Caution - The device automatically enters Slow-Stop mode (if enabled) if software fails to send new data continously. Using VBLANK interrupts to send data is too slow. Using the CPC's 300Hz IRQ is okay - as long as the IRQ is continously enabled and processed (if it isn't then the device may run into slow stop mode - and expect a 5-byte frame instead of the normal 4-byte frames). Ie. operation doesn't just depend on WHAT data you are sending, but also on WHEN you are sending it.

A similar (though less dramatic) problem may also arise in Continue mode (in case the device keeps adding PI to P during continue)?

Data Register (W) (A0=0)

If the device is in STOP mode, then first data byte must be the 8bit pitch:

 7-0   P    8bit Starting Pitch (0..510 Hz) (sawtooth) (unused for noise)

thereafter, 32bit Speech Frame(s) can be written:

 31-30 BW1  2bit Bandwidth of 1st formant (726,309,125,50 Hz)
 29-28 BW2  2bit Bandwidth of 2nd formant (726,309,125,50 Hz)
 27-26 BW3  2bit Bandwidth of 3rd formant (726,309,125,50 Hz)
 25-24 BW4  2bit Bandwidth of 4th formant (726,309,125,50 Hz)
 N/A   FM4  0bit Resonance Frequency of 4th formant (3500 Hz) (fixed)
 23-21 FM3  3bit Resonance Frequency of 3rd formant (1179..3400 Hz)
 20-16 FM2  5bit Resonance Frequency of 2nd formant (440..3400 Hz)
 15-11 FM1  5bit Resonance Frequency of 1st formant (150..1047 Hz)
 10-7  AMPL 4bit Amplitude (volume) (0.000 .. 1.000) (nonlinear)
 6-5   FD   2bit Frame Duration (8,16,32,64 ms)
 4-0   PI   5bit Pitch Increment (signed, -15..+15 Hz per 8ms) (or -16=Noise)

the 32bit parameter is split into 4bytes (starting with bit31-24).

Parameter Translation

The chip contains a small ROM table that translates the incoming binary values to following meanings:

 Val FD(ms) P(Hz) PI(Hz/8ms) Ampl. FM1(Hz) FM2(Hz) FM3(Hz) FM4(Hz) BW(Hz)
 0   8      0     0          0.000 150     440     1179    3500    726
 1   16     2     +1         0.008 162     466     1337    -       309
 2   32     4     +2         0.011 174     494     1528    -       125
 3   64     6     +3         0.016 188     523     1761    -       50
 4   -      8     +4         0.022 202     554     2047    -       -
 5   -      10    +5         0.031 217     587     2400    -       -
 6   -      12    +6         0.044 233     622     2842    -       -
 7   -      14    +7         0.062 250     659     3400    -       -
 8   -      16    +8         0.088 267     698     -       -       -
 9   -      18    +9         0.125 286     740     -       -       -
 10  -      20    +10        0.177 305     784     -       -       -
 11  -      22    +11        0.250 325     830     -       -       -
 12  -      24    +12        0.354 346     880     -       -       -
 13  -      26    +13        0.500 368     932     -       -       -
 14  -      28    +14        0.707 391     988     -       -       -
 15  -      30    +15        1.000 415     1047    -       -       -
 16  -      32    Noise      -     440     1100    -       -       -
 17  -      34    -15        -     466     1179    -       -       -
 18  -      36    -14        -     494     1254    -       -       -
 19  -      38    -13        -     523     1337    -       -       -
 20  -      40    -12        -     554     1428    -       -       -
 21  -      42    -11        -     587     1528    -       -       -
 22  -      44    -10        -     622     1639    -       -       -
 23  -      46    -9         -     659     1761    -       -       -
 24  -      48    -8         -     698     1897    -       -       -
 25  -      50    -7         -     740     2047    -       -       -
 26  -      52    -6         -     784     2214    -       -       -
 27  -      54    -5         -     830     2400    -       -       -
 28  -      56    -4         -     880     2609    -       -       -
 29  -      58    -3         -     932     2842    -       -       -
 30  -      60    -2         -     988     3105    -       -       -
 31  -      62    -1         -     1047    3400    -       -       -
 ... -      ...   -          -     -       -       -       -       -
 255 -      510   -          -     -       -       -       -       -

MEA8000 Pinouts

 1-GND   4-D6   7-D3   10-D0    13-VCC     16-OSC IN   19-REF      22-/RD
 2-/REQ  5-D5   8-D2   11-A0    14-/REQEN  17-OSC OUT  20-OUT      23-/WR
 3-D7    6-D4   9-D1   12-/CE   15-NC      18-CLK IN   21-CLK OUT  24-TEST