• Welcome to Schneider / Amstrad CPC Forum.
Welcome to Schneider / Amstrad CPC Forum. Please login.

17. April 2026, 07:42:57

Login with username, password and session length

Shoutbox

TFM

2024-04-08, 20:42:44
Happy Sonnenfinsternis!  :)

TFM

2024-01-15, 17:06:57
Momentan billige Farbbänder auf Ebay für PCW

Devilmarkus

2023-07-09, 10:37:40
Zweiter 👋😂🤣

TFM

2023-06-13, 14:21:49
Sommerloch!

Recent

Members
Stats
  • Total Posts: 12,834
  • Total Topics: 1,528
  • Online today: 215
  • Online ever: 1,724
  • (16. January 2020, 00:18:45)
Users Online
Users: 1
Guests: 142
Total: 143

142 Guests, 1 User
xesrjb

LambdaSpeak CPC Sprach-Synthesizer, Sample Player, RTC, MP3, UART Erweiterung

Started by LambdaMikel, 01. May 2017, 09:41:34

Previous topic - Next topic

0 Members and 5 Guests are viewing this topic.

Rennert

habe noch sequenc2 mal geladen, aber man hört nur Schnulli. Was muss man da hören?

eventuell werden die Files nicht richtig in den EEprom geladen und dann wird nix richtiges abgespielt. Getestet mit den Basic Programmen, bei den RSX hängt sich ja der Rechner auf

Rennert

bei lEETEST sagt der da EEPROM cleared?

was mir auffällt: wenn er mit Drumload lädt, zeigt er bei jedem File Bytes=0 an, da sollte doch die Größe angezeigt werden.

Rennert

Das Amdrum Kit läuft auch, hab mal bissel komponiert.

Also Problem ist, das er nix in den EEprom lädt. Nach Drumload sagt eetest immer EEprom clear.

LambdaMikel

Ebenfalls von der GitHub Page -

Quote
From left to right, the DIP switches 1 to 5 and 6 to 10 are:

    MIX (1 = left, 6 = right): MIX is the output of LambdaSpeak's OP amp. The OP amp is a summing OP amp with Gain control that amplifies and recovers the mono PCM output generated by the ATmega (PCM Sample Playing), and the sound generated by the SPO256-AL2 vintage speech chip. The corresponding DIP switch determines if the OP amp's output is routed to the left and/or right output channel (or turned off completely). Notice that using an OP amp always results in some degradation of the audio quality. Hence, it is also possible to exclusively route the PCM output or exclusively route the SPO256-AL2 output to the left or right channel (see switches SPO and AT below). If no SPO256-AL2 is being used, then there is no need for the MIX output, and the switch should be in the off position.

    EPS (2 = left, 7 = right): Turn on or off routing of the stereo audio signal received over LambdaSpeak's stereo audio input jack (the right stero jack on the board). Usually, this connects to the output output jack of the Epson click daughter board. The output of the Epson speech board is mono, but heard on the left and right channel. The TTS click daughterboard is already equipped with an audio amplifier, so it also possible to directly connect a loudspeaker or audio amplifier to the audio socket of the daughterboard itself. In the case, LambdaSpeak's stereo input jack is available to receive either the audio output generated by the CPC, using the audio stereo output jack of the CPC (and left or right channels will be routed accordingly), or to the output of the MP3 module can be used (see below). In any way, the left or right channels will be routed accordingly (i.e., left to left and right to right). Note that EPS input is not amplified by the internal OP amp.

    AT (3 = left, 8 = right): the raw PCM output from the ATmega; used for the Amdrum mode and the autonomous PCM Sample Playing mode. This signal has higher quality than the MIX output. If no SPO256-AL2 is being used, then there is no need for the MIX output, and the AT raw PCM output achieves higher PCM quality and bandwidth.

    SPO (4 = left, 9 = right): the raw speech output from the optional SPO256-AL2 chip; used for the SPO-based SSA1 and DK'tronics modes. This signal has higher quality than the MIX output. If no SPO256-AL2 is being used, then this switch should be in the off position.

    CPC (5 = left, 10 = right): determines if the left (resp. right) output channel of LambdaSpeak's stereo output jack should be routed into the CPC's internal audio amplifier and speaker. Please note that the assignment of the left and right output of LambdaSpeak's stereo jack is determined by the DIP switches 1 to 5, and 6 to 9, resp., as just explained. This does not work on the Plus line of CPC computers, so these switches should be in the off position for a CPC Plus computer.

A reasonable default configuration for a LambdaSpeak 3 with SPO256-AL2 is 10001-01001. Hence, MIX on the left output channel, and Epson speech on the right output channel. Moreover, both are being heard in the CPC's internal speaker as well, so no need for an external amplifier.

End of line:



LambdaMikel

Quote from: Rennert on 19. July 2019, 13:37:24
bei lEETEST sagt der da EEPROM cleared?

was mir auffällt: wenn er mit Drumload lädt, zeigt er bei jedem File Bytes=0 an, da sollte doch die Größe angezeigt werden.

Das passiert, wenn das AMSDOS nicht an der richtigen Stelle / ROM ist.... genau, er braucht die Datei-Länge aus den Headern für die Anzahl der Bytes. Daher kommt da evtl. auch das M4 in die Quere.

Rennert

 :jubelaola:
Quote from: LambdaMikel on 19. July 2019, 16:09:45
Quote from: Rennert on 19. July 2019, 13:37:24
bei lEETEST sagt der da EEPROM cleared?

was mir auffällt: wenn er mit Drumload lädt, zeigt er bei jedem File Bytes=0 an, da sollte doch die Größe angezeigt werden.

Das passiert, wenn das AMSDOS nicht an der richtigen Stelle / ROM ist.... genau, er braucht die Datei-Länge aus den Headern für die Anzahl der Bytes. Daher kommt da evtl. auch das M4 in die Quere.

M4 habe ich nicht an, nur X-Mem. AMSDOS ist original auf 7 vom Rom im Floppycontroller.
Hab nur ACMEDos noch geladen.

LambdaMikel

Quote from: Rennert on 19. July 2019, 09:55:30
Der Sound Pin ist doch Pin2 am Systemstecker? der geht durch. Höre ja auch Sound am TV.

ich habe am KC Kompact einen Scart Ausgang, wo der Ton mit rauskommt. Am Scart habe ich den Ton abgenommen und ins LS3 rein und dann vom LS3 wieder zum Scart.
Die einzelnen Mods habe ich damals am LS1.99 durchgespielt und es ging auch alles.

S.Antwort oben für DIP-Belegung. Also den LS3 als "Verstärker" für den CPC zu benutzen war so nicht gedacht. Verstehe nicht wie Du das machst... der Epson Ausgang geht doch in den Eingang, und die andere Buchse ist ein Ausgang... und Augänge / Kabel einfach zusammenlöten oder drillen vermindert den Audio-Level erheblich. Ich würde 2 getrennte Verstärker empfehlen, oder einen Mixer... also KC Compact in den Mixer, und LS3 Ausgang in den Mixer... und dann in den Scart.

LambdaMikel

Quote from: Rennert on 19. July 2019, 15:51:48
Das Amdrum Kit läuft auch, hab mal bissel komponiert.

Also Problem ist, das er nix in den EEprom lädt. Nach Drumload sagt eetest immer EEprom clear.

??? EETEST testet einige Sachen und sagt ab und zu EEPROM cleared - EEPROM PCM / DATA UPLOAD kann das eigentlich gar nicht sagen. Wenn Du EEPROM cleared hörst beim Versuch, Samples hochzuladen, hat er das Controll-Byte missverstanden. Diesen Effekt hatte ich noch nie. Das ist die EETEST Prozedur, kannst ja mal nach command_confirm für die Sprachausgaben gucken. Der Test braucht übrigens 20 Sekunden oder so.... mit Gedult bis zum Ende abwarten.


void eeprom_full_check(void) {

  speech_native_busy;

  uint32_t byteFoundAt = 0; 
  uint32_t byteAddress = 0;
  uint8_t testByte = 123;
  uint8_t badByte = 0;

  LAMBDA_EPSON_ON;

  sprintf(command_string, "EEPROM determine size.");
  command_confirm(command_string);

  EEPROM_PCM_UPLOAD_ON;

  EEPROM_writeEnable();
  EEPROM_disableWriteProtection();
  while (EEPROM_readStatus() & _BV(EEPROM_WRITE_IN_PROGRESS)) {};
 
  EEPROM_writeEnable();
  SLAVE_SELECT;
  SPI_tradeByte(EEPROM_CE);
  SLAVE_DESELECT;

  while (EEPROM_readStatus() & _BV(EEPROM_WRITE_IN_PROGRESS)) {};

  //
  //
  //

  SLAVE_SELECT;
  SPI_tradeByte(EEPROM_READ);
  EEPROM_send24BitAddress(0);
   
  for (uint32_t i = 0; i < EEPROM_BYTES_MAX; i++) {
    SPI_tradeByte(0);
    badByte = SPDR;
    if ( badByte != 255 ) {
      break;
    }
    byteFoundAt++;
  }
  SLAVE_DESELECT;

  LAMBDA_EPSON_ON;
  if (byteFoundAt != EEPROM_BYTES_MAX) {
    sprintf(command_string, "EEPROM not cleared. Found byte %d at address %lu.", badByte, byteFoundAt);     
  } else {
    sprintf(command_string, "EEPROM cleared. All bytes 255.");
  }
  command_confirm(command_string);

  EEPROM_PCM_UPLOAD_ON;

  //
  // write test byte
  //

  byteFoundAt = 0; 
  EEPROM_writeByte(byteAddress, testByte);

  //
  // read test
  //
 
  SLAVE_SELECT;
  SPI_tradeByte(EEPROM_READ);
  EEPROM_send24BitAddress(byteAddress);

  uint8_t flag = 0;
   
  while (1) {
    SPI_tradeByte(0);
    if ( SPDR == testByte && byteFoundAt != 0 ) {
      flag = 1;
      break;
    }
    byteFoundAt++;
  }
  SLAVE_DESELECT;

  //

  LAMBDA_EPSON_ON;

  if (flag) {
    sprintf(command_string, "EEPROM has %lu bytes.", byteFoundAt);
  } else {
    sprintf(command_string, "ERROR OCCURED!");
  }

  command_confirm(command_string);

  //
  // 2nd test, page-wise write and read
  //

  EEPROM_PCM_UPLOAD_ON;

  EEPROM_writeEnable();
  EEPROM_disableWriteProtection();
  while (EEPROM_readStatus() & _BV(EEPROM_WRITE_IN_PROGRESS)) {};
 
  EEPROM_writeEnable();
  SLAVE_SELECT;
  SPI_tradeByte(EEPROM_CE);
  SLAVE_DESELECT;

  while (EEPROM_readStatus() & _BV(EEPROM_WRITE_IN_PROGRESS)) {};

  LAMBDA_EPSON_ON;
  sprintf(command_string, "EEPROM cleared.");
  command_confirm(command_string);

  //
  // write all bytes in page <page> to <page>
  //

  EEPROM_PCM_UPLOAD_ON;

  uint16_t i;
  uint16_t page = 0;
  byteAddress = 0;

  while (byteAddress < EEPROM_BYTES_MAX) {
    EEPROM_writeEnable();
    SLAVE_SELECT;
    SPI_tradeByte(EEPROM_WRITE);
    EEPROM_send24BitAddress(byteAddress);
    for (i = 0; i < EEPROM_BYTES_PER_PAGE; i++) {
      SPI_tradeByte(page >> 1);
    }
    page++;
    SLAVE_DESELECT;
    byteAddress += EEPROM_BYTES_PER_PAGE;
    while (EEPROM_readStatus() & _BV(EEPROM_WRITE_IN_PROGRESS)) {};
  }

  LAMBDA_EPSON_ON;
  sprintf(command_string, "EEPROM pages written.");
  command_confirm(command_string);

  //
  // read pages test
  //
 
  EEPROM_PCM_PLAY_ON;

  page = 0;
  byteAddress = 0;

  while (byteAddress < EEPROM_BYTES_MAX) {
    SLAVE_SELECT;
    SPI_tradeByte(EEPROM_READ);
    EEPROM_send24BitAddress(byteAddress);
    for (i = 0; i < EEPROM_BYTES_PER_PAGE; i++) {
      byteAddress++;
      SPI_tradeByte(0);
      if (SPDR != (page >> 1)) {
break;
      }
    }
    page++;
    SLAVE_DESELECT;
  }
 
  LAMBDA_EPSON_ON;

  if (page != 512) {
    sprintf(command_string, "EEPROM page error at page %d.", page);
  } else {
    sprintf(command_string, "EEPROM pages okay. Done testing EEPROM.");
  }

  command_confirm(command_string);
 
  DATA_TO_CPC(0);   
  z80_run;

  CUR_MODE = START_OVER_SAME_MODE;

  return;


}





LambdaMikel

Quote from: Rennert on 19. July 2019, 16:13:27
:jubelaola:
Quote from: LambdaMikel on 19. July 2019, 16:09:45
Quote from: Rennert on 19. July 2019, 13:37:24
bei lEETEST sagt der da EEPROM cleared?

was mir auffällt: wenn er mit Drumload lädt, zeigt er bei jedem File Bytes=0 an, da sollte doch die Größe angezeigt werden.

Das passiert, wenn das AMSDOS nicht an der richtigen Stelle / ROM ist.... genau, er braucht die Datei-Länge aus den Headern für die Anzahl der Bytes. Daher kommt da evtl. auch das M4 in die Quere.

M4 habe ich nicht an, nur X-Mem. AMSDOS ist original auf 7 vom Rom im Floppycontroller.
Hab nur ACMEDos noch geladen.

OK, ACMEDos wird von meinem kleinen BASIC Programm Demo nicht unterstützt. Kenne ich nicht. Da müsstest Du bitte selbst die Header Positionen für Dateilänge im RAM rausfinden  :zunge0020:


Rennert

Quote from: LambdaMikel on 19. July 2019, 16:14:44
Quote from: Rennert on 19. July 2019, 09:55:30
Der Sound Pin ist doch Pin2 am Systemstecker? der geht durch. Höre ja auch Sound am TV.

ich habe am KC Kompact einen Scart Ausgang, wo der Ton mit rauskommt. Am Scart habe ich den Ton abgenommen und ins LS3 rein und dann vom LS3 wieder zum Scart.
Die einzelnen Mods habe ich damals am LS1.99 durchgespielt und es ging auch alles.



S.Antwort oben für DIP-Belegung. Also den LS3 als "Verstärker" für den CPC zu benutzen war so nicht gedacht. Verstehe nicht wie Du das machst... der Epson Ausgang geht doch in den Eingang, und die andere Buchse ist ein Ausgang... und Augänge / Kabel einfach zusammenlöten oder drillen vermindert den Audio-Level erheblich. Ich würde 2 getrennte Verstärker empfehlen, oder einen Mixer... also KC Compact in den Mixer, und LS3 Ausgang in den Mixer... und dann in den Scart.

Der EpsonSpeech Modul Ausgang geht bei mir direkt auf Lautsprecher. Der Sound Out vom KCC direkt in den Eingang vom LS3 und der Mixer Ausgang dann wieder ins Scart. Im Scartkabel ist keine direkte Verbindung mehr. Das funktioniert so super.
Das ist auch nicht das Problem hier.

LambdaMikel

Quote from: Rennert on 19. July 2019, 13:07:21
habe noch sequenc2 mal geladen, aber man hört nur Schnulli. Was muss man da hören?


[CPCEmulator]https://youtu.be/M7aI7KLEi1s[/CPCEmulator]

Rennert

Acme DOS ist für das X-Mass, damit ich aufs Dom zugreifen kann.
Sollte eigentlich keine Probleme bereiten. Kann aber mal ausschalten, dann ist nur AMSDOS noch aktiv.
Den Mixer schaue ich mir mal an, aber meine Lösung funktioniert ja auch. Die Sprache ist eben nur aus anderen Speaker wie der Rest, außer bei originalen SPO. Sound klingt auch super über das LS3 und zum Scart dann.

TFM

TFM of FutureSoft
http://www.futureos.de --> Das Betriebssystem FutureOS (Update: 24.12.2025)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 29.01.2025)

TFM

Quote from: LambdaMikel on 18. July 2019, 06:45:31
- der Lese-Code für RESUME ist unterschiedlich zu EEGET.
- der Code von EEGET gefällt mir besser, da Du hier nach 512 gelesenen Bytes mittels CALL LS_WALP eine Warteschleife hast (CALL LS_WALP). Bei RESUME zählst Du nicht in 512er Seiten, sondern mittels DE global die Anzahl der Bytes, und machst keine Pause nach 512. Das könnte das Synchronisationsproblem erklären. OK, Du machst in jedem Schritt Test auf READY, allerdings brauchen wir nach 512 Bytes wie gesagt eine zusätzliche Pause... nach READY müssen wir noch etwas warten.

Und wie lange (in us) soll die Pause sein?

Klar ist der Code anders, würde man bei !RESUM einen CALL verwenden so würde ein Wert auf den Stack geschrieben. Das wäre in den Fall eine Crash-Garantie.
TFM of FutureSoft
http://www.futureos.de --> Das Betriebssystem FutureOS (Update: 24.12.2025)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 29.01.2025)