CPC Wiki Forum Die Amstrad-CPC-Community

LambdaSpeak FS

Rozpoczęty przez LambdaMikel · 2020-11-28 21:04 · Odpowiedzi: 210 · Wyświetlenia: 40956
#81
Naja, ich hätte die Plutonium Batterie gerne eingebaut, aber nur für die RTC... So viel Strom frisst die auch nicht. Was solls  😉 🙂
TFM of FutureSoft
http://www.FutureOS.de --> Das Betriebssystem FutureOS (Update: 30.05.2026)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 29.01.2025)
Ostatnio edytowany przez TFM w dniu 2021-01-24 23:30
👍 0👎 0
#82
— TFM
Naja, ich hätte die Plutonium Batterie gerne eingebaut, aber nur für die RTC... So viel Strom frisst die auch nicht. Was solls  😉 🙂


Ja hast Recht, besser wär's schon gewesen wenn man bedenkt dass der CPC und CPC-Hardware ja für die Ewigkeit entworfen wurde und mindestens die nächsten 100 Jahre noch funktionieren wird. Plutonium-Batterie hält ja auch die Voyager-Sonden noch am Laufen. Klar, sowas LoTech-mäßiges wie die ollen NASA-Sonden kann man jetzt nicht mit unserer geilen CPC-Hardware vergleichen, aber sei's drum irgendwo muss man ja anfangen mit dem Vergleichen  :🙂  😎 ;D
👍 0👎 0
#83
So, und hier die erste Version des PCM RAM Players. Einfach mit run"disc" starten oder run"pcm".

Wer noch keinen LSFS hat, kann das mit dem JavaCPC benutzen.  :smiley027:
📎 LSFS_PCM_Drums.dsk
TFM of FutureSoft
http://www.FutureOS.de --> Das Betriebssystem FutureOS (Update: 30.05.2026)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 29.01.2025)
👍 0👎 0
#84
Die Soundqualität ist sehr gut! Sehr schön... jetzt müssen wir nur noch rausfinden, wie wir das polyphon machen können oder zumindest sollte er sofort das Sample-Spielen unterbrechen können wenn eine weitere Taste gedrückt wird. Falls denn der CPC überhaupt genügend Dampf hat, um den PCM-Stream zu senden, UND auf Tastaturabfrage zu reagieren. Was meinst Du, TFM? Geht da noch was? Na per BASIC-RSX wird das wohl schwierig werden, da ja die Kontrolle zu BASIC nicht zurückkehrt, bevor der Sample PLAY abgearbeitet wurde... schön wäre natürlich, wenn BASIC und RSX-PCM-Stream-Senden gleichzeitig ginge, aber dafür hat der CPC natürlich nicht genug Dampf - also: da hilt nur 100% Machinecode! Richtig "Drummen" kann man so leider nicht, aber dennoch toller RSX-Befehl und beeindruckende SOundqualtiät!

Das polyphone Abspielen hatte ich übrigens mit einer Addition und clippen bei 255 gelöst...

Wie würdest Du die Soundqualität im Vergleicht zum Digiblaster beurteilen, TFM?
Ostatnio edytowany przez LambdaMikel w dniu 2021-01-26 05:46
👍 0👎 0
#85
Danke für Deine umfassende Antwort.  :knuddel: Also, ganz zufrieden bin ich auch nicht. Also zu den einzelnen Themen:

- Soundqualität: Sicher nicht schlechter als Digiblaster. Im Prinzip ist es das selbe, nur daß das LS da wohl durch seine Technik die Nase vorn hat. Manchmal sind noch Störgeräusche da, ich weiß noch nicht genau wie sie zustande kommen.

- Nutzung mehrerer Kanäle: Das wäre bei niedrigeren Taktraten vorstellbar. Ist aber in der Realität schwer umzusetzen. Denn: Nutzt man mehrere Kanäle, dann kann jeder von denen "irgendwann" ein bzw. ausgeschalten werden (sprich: Sample beginnt bzw. hört auf). Das über die RSX Befehle umzusetzen ist nicht möglich. Es sei denn man benutzt den NMI vom PlayCity oder Albireo. Aber ich will jetzt nicht auch noch eine Zusatzhardware benötigen.

- Mehrere Kanäle, die 2te: Wenn man mal einen vernünftigen Sequenzer programmiert (was etwas mehr Arbeit ist), dann ist das sicher möglich. Nur diesen Monat wird das nichts mehr. Und in Zukunft muss man mal schauen. Eventuell könnte man Prodatrons Protracker umbauen. Das wäre eventuell leichter als bei 'Null' anzufangen.

- Sample-Unterbrechung bei Tastendruck: Im Prinzip könnte man das bei niedrigen Sample-Raten einbauen, wenn auch eher schwierig. Das Problem liegt daran, dass es ziemlich Zeitaufwendig ist, beim CPC die Tastatur abzufragen. Auch hier kann man tricksen. Und ja - so etwas wäre wirklich sehr, sehr sinnvoll. Eventuell kriege ich das hin, die maximale Sampling Rate würde aber runter gehen.

So, die PCM Sache habe ich vorerst abgeschlossen. Später wird dann nochmals getestet. Und dann will ich mir heute mal das LSFS Handbuch vornehmen.
TFM of FutureSoft
http://www.FutureOS.de --> Das Betriebssystem FutureOS (Update: 30.05.2026)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 29.01.2025)
👍 0👎 0
#86
Updates (von heute und in Zukunft) auf meiner HP.  🙂
TFM of FutureSoft
http://www.FutureOS.de --> Das Betriebssystem FutureOS (Update: 30.05.2026)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 29.01.2025)
👍 0👎 0
#87
— TFM
So, und hier die erste Version des PCM RAM Players. Einfach mit run"disc" starten oder run"pcm".

Wer noch keinen LSFS hat, kann das mit dem JavaCPC benutzen.  :smiley027:


Aha, wie geht das denn im JavaCPC? 😉
👍 0👎 0
#88
— Devilmarkus
— TFM
So, und hier die erste Version des PCM RAM Players. Einfach mit run"disc" starten oder run"pcm".

Wer noch keinen LSFS hat, kann das mit dem JavaCPC benutzen.  :smiley027:


Aha, wie geht das denn im JavaCPC? 😉


Ganz einfach:
- DSK einlegen - und zwar das "LSFS_PCM_Drums.dsk"
- RUN"DISC" tippen - mit Return versteht sich
- Taste 1 drücken - mit Return versteht sich (für PCM Drum Demo)
- Das Laden abwarten. Es geht schneller als am c64 - viel schneller so gar!
- Und nun lustig drummen mit den Tasten 1-9,0,-,"Pfeil oben" - also die Tasten oben an der Tastatur.

Und hier die neuesten Versionen... Viel Spass!
📎 LSFS_PCM_Drums.dsk
📎 LambdaSpeak_FS_RSX_2021-01-28.DSK
TFM of FutureSoft
http://www.FutureOS.de --> Das Betriebssystem FutureOS (Update: 30.05.2026)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 29.01.2025)
Ostatnio edytowany przez TFM w dniu 2021-01-28 21:18
👍 0👎 0
#89
Also ich hab im JavaCPC die RSX geladen, dann auf der Drum-Disk RUN"PCM" ausgeführt.
Bei der Speicherintensiveren RSX hört man gar nichts, bei der Speicherschonenderen Variante hört man nur Murks.
👍 0👎 0
#90
— Devilmarkus
Also ich hab im JavaCPC die RSX geladen, dann auf der Drum-Disk RUN"PCM" ausgeführt.
Bei der Speicherintensiveren RSX hört man gar nichts, bei der Speicherschonenderen Variante hört man nur Murks.

Ja, das ist klar. Dazu musst Du schon das RSX ROM nehmen, dann ein Sample belegt der Speicher von  &7000 bis &A000.

Die RAM RSX starten unterhalb von &A000, wenn man die ins RAM läd. Das gibt dann Probleme.

Danke für den Hinweis, ich werde es bei der Fehler-Meldung berücksichtigen.


EDIT:
Und hier gleich alles auf dem neuesten Stand...
📎 LambdaSpeak_FS_RSX_2021-01-30.DSK
📎 LSFS_PCM_Drums.dsk
📎 LSFS.ROM
TFM of FutureSoft
http://www.FutureOS.de --> Das Betriebssystem FutureOS (Update: 30.05.2026)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 29.01.2025)
Ostatnio edytowany przez TFM w dniu 2021-01-31 18:31
👍 0👎 0
#91
Der LS3 kann ja bis zu 625000 Baud nutzen.

Die einzelnen Werte waren...
2400, 4800, 9600, 14400, 19200, 28800, 31250, 38400, 57600, 76800, 115200, 208333, 250000, 312500, 416667 und 625000 Baud.

Ich nehme an, die sind beim LSFS gleich geblieben? Richtig?
TFM of FutureSoft
http://www.FutureOS.de --> Das Betriebssystem FutureOS (Update: 30.05.2026)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 29.01.2025)
👍 0👎 0
#92
Hallo TFM,

also alles über 115 kBaud funktioniert ohnehin nicht, und die superhohen Baudraten gingen wg. geringerer Taktfrequenz beim LSFS nicht mehr ( 16 Mhz t gegenüber den 20 Mhz beim LS3). Daher habe ich alles über 115200 gegen "klassische" aber funktionierende Baudraten ersetzt:


 
  switch (rate) {
  case 0 : UBRR0H = ( 416 >> 8) & 0xFF; UBRR0L = 416 & 0xFF; SERIAL_RATE = 2400; break; // 2400 
  case 1 : UBRR0L = 207; SERIAL_RATE = 4800; break; // 4800 
  case 2 : UBRR0L = 103; SERIAL_RATE = 9600; break; // 9600 
  case 3 : UBRR0L = 68; SERIAL_RATE = 14400; break;  // 14400 
  case 4 : UBRR0L = 51; SERIAL_RATE = 19200; break;  // 19200
  case 5 : UBRR0L = 34; SERIAL_RATE = 28800; break;  // 28800
  case 6 : UBRR0L = 31; SERIAL_RATE = 31250; break;  // 31250 MIDI ! NEW
  case 7 : UBRR0L = 25; SERIAL_RATE = 38400; break;  // 38400 
  case 8 : UBRR0L = 16; SERIAL_RATE = 57600; break;  // 57600 
  case 9 : UBRR0L = 12; SERIAL_RATE = 76800; break;  // 76800 
  case 10 : UBRR0L = 8; SERIAL_RATE = 115200; break;  // 115200 

  case 11 : UBRR0H = ( 3332 >> 8) & 0xFF; UBRR0L = 3332 & 0xFF; SERIAL_RATE = 300; break;  // 300
  case 12 : UBRR0H = ( 1666 >> 8) & 0xFF; UBRR0L = 1666 & 0xFF; SERIAL_RATE = 600; break;  // 600 
  case 13 : UBRR0H = ( 1110 >> 8) & 0xFF; UBRR0L = 1110 & 0xFF; SERIAL_RATE = 900; break;  // 900 
  case 14 : UBRR0H = ( 832 >> 8) & 0xFF; UBRR0L = 832 & 0xFF; SERIAL_RATE = 1200; break;  // 1200 
  
  default :  UBRR0L = 103; SERIAL_RATE = 9600; // 9600 
  }
 


Beim LS3 hatten wir:

  switch (rate) {
  case 0 : UBRR0H = ( 520 >> 8) & 0xFF; UBRR0L = 520 & 0xFF; SERIAL_RATE = 2400; break; // 2400 
  case 1 : UBRR0H = ( 259 >> 8) & 0xFF; UBRR0L = 259 & 0xFF; SERIAL_RATE = 4800; break; // 4800 
  case 2 : UBRR0L = 129; SERIAL_RATE = 9600; break; // 9600 
  case 3 : UBRR0L = 86; SERIAL_RATE = 14400; break;  // 14400 
  case 4 : UBRR0L = 64; SERIAL_RATE = 19200; break;  // 19200
  case 5 : UBRR0L = 42; SERIAL_RATE = 28800; break;  // 28800
  case 6 : UBRR0L = 39; SERIAL_RATE = 31250; break;  // 31250 MIDI ! NEW
  case 7 : UBRR0L = 32; SERIAL_RATE = 38400; break;  // 38400 
  case 8 : UBRR0L = 21; SERIAL_RATE = 57600; break;  // 57600 
  case 9 : UBRR0L = 15; SERIAL_RATE = 76800; break;  // 76800 
  case 10 : UBRR0L = 10; SERIAL_RATE = 115200; break;  // 115200 

  case 11 : UBRR0L = 5; SERIAL_RATE = 208333; break;  // 208333
  case 12 : UBRR0L = 4; SERIAL_RATE = 250000; break;  // 250000
  case 13 : UBRR0L = 3; SERIAL_RATE = 312500; break;  // 312500
  case 14 : UBRR0L = 2; SERIAL_RATE = 416667; break;  // 416667
  case 15 : UBRR0L = 1; SERIAL_RATE = 625000; break;  // 625000
    // case 15 : UBRR0L = 0; SERIAL_RATE = 1250000; break;  // 1250000

  default :  UBRR0L = 129; SERIAL_RATE = 9600; // 9600 
  }


Also sind nur die Baudraten von 0 bis 10 identisch. Das sollte aber auch reichen...
Ostatnio edytowany przez LambdaMikel w dniu 2021-02-03 07:09
👍 0👎 0
#93
Vielen Dank für die ausführlichen Informationen.  :smiley027:

Beim LSFS fehlt case_15. Tut das nichts?
TFM of FutureSoft
http://www.FutureOS.de --> Das Betriebssystem FutureOS (Update: 30.05.2026)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 29.01.2025)
👍 0👎 0
#94
— TFM
Beim LSFS fehlt case_15. Tut das nichts?


Doch:

default :  UBRR0L = 103; SERIAL_RATE = 9600; // 9600
👍 0👎 0
#95
default = 0 und nicht 15

Der LS3 hat case 15, der LSFS nicht. Deshalb meine Frage wurde es da vergessen, oder ist es vergessen worden?
TFM of FutureSoft
http://www.FutureOS.de --> Das Betriebssystem FutureOS (Update: 30.05.2026)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 29.01.2025)
👍 0👎 0
#96
Hi TFM und Markus,

ja, 15 ist default 9600 BAUDs, wie Markus schon sagte. Mir fiel keine weitere sinnvolle BAUDrate für 15 ein, sorry 😉
👍 0👎 0
#97
— LambdaMikel
Hi TFM und Markus,

ja, 15 ist default 9600 BAUDs, wie Markus schon sagte. Mir fiel keine weitere sinnvolle BAUDrate für 15 ein, sorry 😉


Naja, mir irgendwie auch nicht... wobei 7200 wäre super - wegen Kompatibilität zu anderen Interfaces.

Meine Idee: Könnte man zwei LS via seriellen Anschlüssen als "Terminal" verbinden?
Das müsste doch in BASIC möglich sein (ok, nicht sehr schnell, aber wenn es läuft machen wir ein MC Programm draus).
TFM of FutureSoft
http://www.FutureOS.de --> Das Betriebssystem FutureOS (Update: 30.05.2026)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 29.01.2025)
👍 0👎 0
#98
Ja, kann ich mal schauen mit 7200 ob das möglich ist (es hängt immer von den Frequenzteiler-Verhältnissen in Verhältnis zum Basis-Takt ab).

Übrigens - ich habe gerade herausgefunden, wie man den MP3-Player "abfragt". Anscheinend gibt es doch eine Möglichkeit, den Status abzufragen.

Hier aus einem C-Treiber, den ich gefunden habe:



String SerialMP3Player::decodeMP3Answer(){
 // Response Structure  0x7E 0xFF 0x06 RSP 0x00 0x00 DAT 0xFE 0xBA 0xEF
  //
  // RSP Response code
  // DAT Response additional data

  String decodedMP3Answer="";

   decodedMP3Answer=sanswer();

     switch (ansbuf[3])
     {
    case 0x3A:
      decodedMP3Answer += " -> Memory card inserted.";
      break;

    case 0x3D:
      decodedMP3Answer += " -> Completed play num " + String(ansbuf[6], DEC);
      break;

    case 0x40:
      decodedMP3Answer += " -> Error";
      break;

    case 0x41:
      decodedMP3Answer += " -> Data recived correctly. ";
      break;

    case 0x42:
      switch(ansbuf[6]){
        case 0: decodedMP3Answer += " -> Status: stopped"; break;
        case 1: decodedMP3Answer += " -> Status: playing"; break;
        case 2: decodedMP3Answer += " -> Status: paused"; break;
      }
      break;

    case 0x43:
      decodedMP3Answer += " -> Vol playing: " + String(ansbuf[6], DEC);
      break;

    case 0x48:
      decodedMP3Answer += " -> File count: " + String(ansbuf[6], DEC);
      break;


    case 0x4C:
      decodedMP3Answer += " -> Playing: " + String(ansbuf[6], DEC);
      break;

    case 0x4E:
      decodedMP3Answer += " -> Folder file count: " + String(ansbuf[6], DEC);
      break;

    case 0x4F:
      decodedMP3Answer += " -> Folder count: " + String(ansbuf[6], DEC);
      break;
     }


   ansbuf[3] = 0; // Clear ansbuff.
   return decodedMP3Answer;
}



Dies sollte zurückkommen über die serielle Schnittstelle / RX, wenn man die folgenden Query-Commands abschickt:


     // Query commands
     void qPlaying();   // Ask for the file is playing
     void qStatus();    // Ask for the status
     void qVol();       // Ask for the volumen
     void qFTracks();   // Ask for the number of tracks folders
     void qTTracks();   // Ask for the total of tracks
     void qTFolders();  // Ask for the number of folders


// Query Commands
#define CMD_PLAYING_N         0x4C // qPlaying();  // Ask for the file is playing
#define CMD_QUERY_STATUS      0x42 // qStatus();   // Ask for the status
#define CMD_QUERY_VOLUME      0x43 // qVol();      // Ask for the volumen. // Sometime board fails
#define CMD_QUERY_FLDR_TRACKS 0x4E // qFTracks();  // Ask for the number of tracks folders
#define CMD_QUERY_TOT_TRACKS  0x48 // qTTracks();  // Ask for the total of tracks
#define CMD_QUERY_FLDR_COUNT  0x4F // qTFolders(); // Ask for the number of folders



void SerialMP3Player::sendCommand(byte command, byte dat1, byte dat2){
  byte Send_buf[8] = {0}; // Buffer for Send commands.
  String mp3send = "";

  // Command Structure 0x7E 0xFF 0x06 CMD FBACK DAT1 DAT2 0xEF

  delay(20);
  Send_buf[0] = 0x7E;    // Start byte
  Send_buf[1] = 0xFF;    // Version
  Send_buf[2] = 0x06;    // Command length not including Start and End byte.
  Send_buf[3] = command; // Command
  Send_buf[4] = 0x01;    // Feedback 0x00 NO, 0x01 YES
  Send_buf[5] = dat1;    // DATA1 datah
  Send_buf[6] = dat2;    // DATA2 datal
  Send_buf[7] = 0xEF;    // End byte

  for(int i=0; i<8; i++)
  {
    Serial3->write(Send_buf[i]) ;
    mp3send+=sbyte2hex(Send_buf[i]);
  }
  if (_showDebugMessages){
     Serial.print("Sending: ");
     Serial.println(mp3send); // watch what are we sending
  }

  delay(1000);  // Wait between sending commands.
}


Die Filenamen vom MP3 kriegt man damit immer noch nicht zurück, aber zumindest die Filenummer etc.

Ich muss mal sehen, ob ich demnächst Zeit finde, das mal zum implementieren. Evtl. reicht die Info für Dich ja schon, TFM, um zu sehen, ob Du in Assembler nach Absenden eines CMD_QUERY_TOT_TRACKS  z.B. die Anzahl der Tracks zurückkriegst? Wie gesagt, die serielle sollte dann diese Bytes empfangen, wie in decodeMP3Answer oben gezeigt:


 // Response Structure  0x7E 0xFF 0x06 RSP 0x00 0x00 DAT 0xFE 0xBA 0xEF


Ich weiß, Du sagtst immer, Du kannst kein C(++), aber eigentlich brauchst Du ja nur die Codes und wissen, wie man seriell empfängt mit LS-FS.

Wegen Terminal - klar, dass sollte gehen! Mal im LS3 BASIC Terminal Programm nachgucken.
👍 0👎 0
#99
Das ist ja super! Den MP3 Player abfragen wäre sehr hilfreich.

Leider kann ich - sorry!  :flehan: - mit dem C echt nix anfangen, das verschwimmt mir vor den Augen, und ich versteh all das *- und :§ alles nicht.

Könnte man das in BASIC oder Z80 übersetzen?  :flehan:


EDIT: LSFS Systemsoftware Update auf meiner HP und hier:
📎 LambdaSpeak_FS_RSX_2021-02-05.DSK
📎 LSFS_PCM_Drums_2021-02-02.dsk
TFM of FutureSoft
http://www.FutureOS.de --> Das Betriebssystem FutureOS (Update: 30.05.2026)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 29.01.2025)
Ostatnio edytowany przez TFM w dniu 2021-02-05 16:03
👍 0👎 0
#100
Hab Meins heute bekommen, danke, lieber TFM!

Kritik / Anregung an Michael:
Ich finde die beiden Co-Platinen auf der Rückseite äußerst fragwürdig befestigt.
Wäre es da nicht möglich, diese noch zusätzlich mit Distanzmuttern / Schrauben zu befestigen?
Sie nur über die Lötanschlüsse zu Befestigen ist sehr kritisch, meiner Meinung nach.

So, nun fehlt mir nur mal massig Zeit, mich damit näher zu Befassen  :00008351: :00008351:
👍 0👎 0

Zaloguj się, aby pisać