Schneider / Amstrad CPC Forum

Amstrad / Schneider CPC => Hardware => Topic started by: LambdaMikel on 18. February 2018, 05:17:28

Title: Amdrum Emulation mit LambdaSpeak 2.0
Post by: LambdaMikel on 18. February 2018, 05:17:28
LambdaSpeak 2.0 kann jetzt auch Amdrum mit *sehr ordentlicher* PCM Audio-Qualität:

https://youtu.be/upVayBKlnow (https://youtu.be/upVayBKlnow)

Title: Re: Amdrum Emulation mit LambdaSpeak 2.0
Post by: LambdaMikel on 18. February 2018, 05:36:45
Audio-Qualität der Amdrum-Emulation kann hier angehört werden:
https://youtu.be/pBuBxT3YEuI (https://youtu.be/pBuBxT3YEuI)
Title: Re: Amdrum Emulation mit LambdaSpeak 2.0
Post by: TFM on 18. February 2018, 19:48:02
WoW. Das klingt echt gut!
Title: Re: Amdrum Emulation mit LambdaSpeak 2.0
Post by: LambdaMikel on 19. February 2018, 07:47:43
Danke!
Nun, eigentlich ist das Amdrum ja ein ganz allgemeiner Sample-Player... hat jemand vielleicht einen RSX-Befehl |play,"sample.bin" parat?
Das hat doch bestimmt schon mal einer geschrieben?
Title: Re: Amdrum Emulation mit LambdaSpeak 2.0
Post by: TFM on 19. February 2018, 21:00:27
Das ist nix anderes als was ich im FuturePlayer habe. Spricht man kann eigentlich alles was den Digiblaster anspricht dafür verwenden. Was ist anders:

- Portadresse
- Signed/Unsigned Konversion (also das XOR A,&80)

Also praktisch fast nix im Code zu ändern.

Auch Prodatrons Digitrakker sollte ganz einfach anzupassen sein. Der Source ist IIRC erhältlich.  :) Das wär wohl noch die beste Idee  :)
Title: Re: Amdrum Emulation mit LambdaSpeak 2.0
Post by: TFM on 20. February 2018, 15:42:14
Ok, hier noch eine hoffentlich gute Idee...

Da ja der Port &FFxx auch schon vom CPC-Booster+ und der MSX-Adapterkarte benutzt wird wäre es unter Umstanden eine gute Idee, wenn man die Amdrum-Emulation per Kommandokode (über &FBEE) ein und ausschalten könnte. Nur so eine Idee ;-)

Wenn das eingebaut wird, dann wär es auch gut, wenn sich die anderen Kommando-Kodes nicht verschieben würden.  :smiley027:
Title: Re: Amdrum Emulation mit LambdaSpeak 2.0
Post by: LambdaMikel on 21. February 2018, 05:55:34
Quote from: TFM on 20. February 2018, 15:42:14
Ok, hier noch eine hoffentlich gute Idee...

Da ja der Port &FFxx auch schon vom CPC-Booster+ und der MSX-Adapterkarte benutzt wird wäre es unter Umstanden eine gute Idee, wenn man die Amdrum-Emulation per Kommandokode (über &FBEE) ein und ausschalten könnte. Nur so eine Idee ;-)

Ja, so ist das auch. Der &FFxx-Addressbereich wird nur dekodiert, wenn Amdrum mode eingeschaltet wird - da der Atmega dann voll und ganz für's Sample-Abspielen verwendet wird, kann man aus diesem Mode auch nur per Hard-Reset wieder raus. Man muss sich also zwischen Sprachausgabe oder Sample-Player entscheiden.
Danke für's Mitdenken!
Title: Re: Amdrum Emulation mit LambdaSpeak 2.0
Post by: TFM on 23. February 2018, 14:41:53
Ach das ist doch ok. Notfalls kann ein Programm je dem Anwender eine Mitteilung schreiben, so etwas z.B.:  :director:

Hallo Mensch! Deine Z80 will,
dass Du den LS resettest.
10 us sind schon vorbei!
Worauf wartest Du noch?


Ein bisschen Spaß muss sein ;-)

Title: Re: Amdrum Emulation mit LambdaSpeak 2.0
Post by: LambdaMikel on 23. February 2018, 16:37:21
 :00008351: :jubelaola:  ;D

Ja, nett wäre, wenn der Reset-Taster sogar funktionieren würde im Amdrum mode :-) Ich denke, sogar den musste ich aus Timing-Gründen disablen - und Bryce wird in der End-Version wahrscheinlich weder Reset-Taster noch LEDs haben (ist zu teuer  :bgdev: )

Na, ich muss mal sehen, evtl. kann ich ja doch den ein oder anderen Zyklus verwenden, um zumindest Reset und/or Change Mode Control Bytes zu lesen und darauf zu reagieren
Title: Re: Amdrum Emulation mit LambdaSpeak 2.0
Post by: TFM on 23. February 2018, 18:23:02
Na, bei den Sparmaßnahmen wird das Endprodukt sicher super billig.  :) Kann man schon sagen wie viel das in etwas kosten wird? Der ATmega644 schlägt ja schon (laut Amazon) mit 9 Euro zu Buche.
Title: Re: Amdrum Emulation mit LambdaSpeak 2.0
Post by: LambdaMikel on 25. February 2018, 20:10:15
Quote from: TFM on 23. February 2018, 18:23:02
Na, bei den Sparmaßnahmen wird das Endprodukt sicher super billig.  :) Kann man schon sagen wie viel das in etwas kosten wird? Der ATmega644 schlägt ja schon (laut Amazon) mit 9 Euro zu Buche.

Na ja, irgendwo zwischn 20 EUR und 60 EUR würde ich sagen / hoffen.
Ich selbst könnte LambdaSpeak 1.9 für ca. 60 EUR produzieren.
Bryce sollte es wesentlich günstiger hinkriegen denke ich; wir werden sehen!

Ja, der 664 kostet so 5 bis 8 EUR wenn man ihn in größerer Stückzahl einkauft denke ich.
Title: Re: Amdrum Emulation mit LambdaSpeak 2.0
Post by: LambdaMikel on 02. March 2018, 15:44:53
Und hier ist LambdaSpeak 1.99, der (hoffentlich) letzte Prototype. Nun also auch mit Amdrum-Emulation / Sample Player-Ausgang:

https://youtu.be/E63uH6SpzMs?list=PLvdXKcHrGqhclo29whlfaO76ge2d-chmx (https://youtu.be/E63uH6SpzMs?list=PLvdXKcHrGqhclo29whlfaO76ge2d-chmx)

Wollte auch den Grüni mal wieder rausholen, und die Stromversorgung testen  ;) Flackert so schön. Richtig geil retro!  :00008351:

Ach ja, Control Bytes - hat sich nichts geändert, nur 2 neue dazugekommen für Amdrum und PCM Sample test:


case 0xFF : process_reset(); break;

  case 0xEF : native_mode_epson(); break;
  case 0xEE : native_mode_dectalk(); break;
  case 0xED : ssa1_mode(); break;
  case 0xEC : dktronics_mode(); break;
  case 0xEB : non_blocking(); break;
  case 0xEA : blocking(); break;
  case 0xE9 : confirmations_on(); break; 
  case 0xE8 : confirmations_off(); break;   
  case 0xE7 : english(); break;
  case 0xE6 : spanish(); break;
  case 0xE5 : fast_getters(); break;
  case 0xE4 : slow_getters(); break;
  case 0xE3 : amdrum_mode(); break;

  case 0xDF : stop_command(); break; 
  case 0xDE : flush_command(); break;

  case 0xCF : get_mode(); break;
  case 0xCE : get_volume(); break;
  case 0xCD : get_voice(); break;
  case 0xCC : get_rate(); break;
  case 0xCB : get_language(); break;
  case 0xCA : get_delay(); break;
  case 0xC9 : get_version(); break;
  case 0xC8 : speak_copyright_note(); break;
  case 0xC7 : speak_hal9000_quote(); break;
  case 0xC6 : sing_daisy(); break;
  case 0xC5 : echo_test_program(); break;
  case 0xC4 : echo_test_program_dk(); break;
  case 0xC3 : test_message(); break;
  case 0xC2 : pcm_test(); break;

  case 0xB0 : set_voice_default(); break;
  case 0xB1 : set_voice(1); break;
  case 0xB2 : set_voice(2); break;
  case 0xB3 : set_voice(3); break;
  case 0xB4 : set_voice(4); break;
  case 0xB5 : set_voice(5); break;
  case 0xB6 : set_voice(6); break;
  case 0xB7 : set_voice(7); break;
  case 0xB8 : set_voice(8); break;
  case 0xB9 : set_voice(9); break;
  case 0xBA : set_voice(10); break;
  case 0xBB : set_voice(11); break;
  case 0xBC : set_voice(12); break;
  case 0xBD : set_voice(13); break;
  case 0xBE : set_voice(14); break;
  case 0xBF : set_voice(15); break;

  case 0xA0 : set_volume_default(); break;
  case 0xA1 : set_volume(1); break;
  case 0xA2 : set_volume(2); break;
  case 0xA3 : set_volume(3); break;
  case 0xA4 : set_volume(4); break;
  case 0xA5 : set_volume(5); break;
  case 0xA6 : set_volume(6); break;
  case 0xA7 : set_volume(7); break;
  case 0xA8 : set_volume(8); break;
  case 0xA9 : set_volume(9); break;
  case 0xAA : set_volume(10); break;
  case 0xAB : set_volume(11); break;
  case 0xAC : set_volume(12); break;
  case 0xAD : set_volume(13); break;
  case 0xAE : set_volume(14); break;
  case 0xAF : set_volume(15); break;

  case 0x90 : set_rate_default(); break;
  case 0x91 : set_rate(1); break;
  case 0x92 : set_rate(2); break;
  case 0x93 : set_rate(3); break;
  case 0x94 : set_rate(4); break;
  case 0x95 : set_rate(5); break;
  case 0x96 : set_rate(6); break;
  case 0x97 : set_rate(7); break;
  case 0x98 : set_rate(8); break;
  case 0x99 : set_rate(9); break;
  case 0x9A : set_rate(10); break;
  case 0x9B : set_rate(11); break;
  case 0x9C : set_rate(12); break;
  case 0x9D : set_rate(13); break;
  case 0x9E : set_rate(14); break;
  case 0x9F : set_rate(15); break;

  case 0x80 : set_buffer_delay_default(); break;
  case 0x81 : set_buffer_delay(1); break;
  case 0x82 : set_buffer_delay(2); break;
  case 0x83 : set_buffer_delay(3); break;
  case 0x84 : set_buffer_delay(4); break;
  case 0x85 : set_buffer_delay(5); break;
  case 0x86 : set_buffer_delay(6); break;
  case 0x87 : set_buffer_delay(7); break;
  case 0x88 : set_buffer_delay(8); break;
  case 0x89 : set_buffer_delay(9); break;
  case 0x8A : set_buffer_delay(10); break;
  case 0x8B : set_buffer_delay(11); break;
  case 0x8C : set_buffer_delay(12); break;
  case 0x8D : set_buffer_delay(13); break;
  case 0x8E : set_buffer_delay(14); break;
  case 0x8F : set_buffer_delay(15); break;



Title: Re: Amdrum Emulation mit LambdaSpeak 2.0
Post by: TFM on 06. March 2018, 21:00:53
Und dazu auch gleich das Update der RSX Erweiterung... Viel Spass!!!
Title: Re: Amdrum Emulation mit LambdaSpeak 2.0
Post by: LambdaMikel on 07. March 2018, 20:45:52
 :00008351: :jubelaola:
Yeah! Muss ich heute Abend gleich ausprobieren!
Title: Re: Amdrum Emulation mit LambdaSpeak 2.0
Post by: LambdaMikel on 10. March 2018, 09:49:54
Hi TFM, Dein Sample-Player |PLAY Command für LambdaSpeak's Amdrum-Mode funktioniert wunderbar:

https://youtu.be/RSu7fPpDmCQ (https://youtu.be/RSu7fPpDmCQ)

Vielen Dank dafür, das ist fantastisch!  :jubelaola: :00008351:
Title: Re: Amdrum Emulation mit LambdaSpeak 2.0
Post by: TFM on 12. March 2018, 17:28:24
Na, da bin ich aber froh. Am Emu ist das hald immer anders. Jedenfalls läuft alles über den Port &FFFF, um mit anderen Sachen (MSX-Adapter, CPC-Booster+) kompatibel zu bleiben.  :winke0002:
Title: Re: Amdrum Emulation mit LambdaSpeak 2.0
Post by: Devilmarkus on 12. March 2018, 18:38:24
Damit es 100% Amdrum-Kompatibel ist, sollte es auf Port &FF00 laufen.  ;)
Title: Re: Amdrum Emulation mit LambdaSpeak 2.0
Post by: TFM on 13. March 2018, 00:22:19
Nein, das Amdrum benutzt &FF80  :zunge0020:
Title: Re: Amdrum Emulation mit LambdaSpeak 2.0
Post by: LambdaMikel on 13. March 2018, 17:16:51
LambdaSPeak Amdrum ist es egal, es dekodiert alles unter &FFxx.
Sollte ich das besser einschraenken?
Title: Re: Amdrum Emulation mit LambdaSpeak 2.0
Post by: TFM on 14. March 2018, 14:56:43
Quote from: LambdaMikel on 13. March 2018, 17:16:51
LambdaSPeak Amdrum ist es egal, es dekodiert alles unter &FFxx.
Sollte ich das besser einschraenken?

Ist sicher in Ordnung (iO) denke ich, da das Original ja auch &FFxx dekodiert. Was die Software betrifft hab ich mir nicht alles angesehen, keine Ahnung (kA) was es da neben &FF80 sonnst noch gibt.

Laut Wiki-Artikel nutzt der Player Befehle wie OUT (C),A wobei B = &FF ist. Im Konkreten Fall wird die I/O-Adresse &FF * 256 + Daten-Byte gewählt.

Also ist es nicht nur iO sondern wohl eher zwingend nötig, alles was über die Port-Adressen &FFxx geht als Daten für's Amsdrum zu interpretieren. Aus Kompatibilitätsgründen.

Ich habe kA ob es andere Hardware beeinflusst, denke aber eher nicht. Wenn ich den CPC-Booster+ über &FF16 anspreche, dann wird wohl auch der selbe Wert ans Amdrum geschickt, aber das macht ja nix.

Viel wichtiger ist es, dass das Amdrum nicht gelesen werden kann (siehe Original). Also sollte auch der LambdaSpeak nicht auf Leseversuche der Port-Adressen &FFxx reagieren. Damit kann man dann vom Amsdap und CPC-Booster+ lesen.
Title: Re: Amdrum Emulation mit LambdaSpeak 2.0
Post by: LambdaMikel on 14. March 2018, 15:05:10
Quote from: TFM on 14. March 2018, 14:56:43
Viel wichtiger ist es, dass das Amdrum nicht gelesen werden kann (siehe Original). Also sollte auch der LambdaSpeak nicht auf Leseversuche der Port-Adressen &FFxx reagieren. Damit kann man dann vom Amsdap und CPC-Booster+ lesen.

Ja, Lesen ist disabled im Amdrum-Mode.